ESP32-S3复古CRT造型多功能独立副屏“iCRT”展示

关于

制作这个iCRT源自之前的游戏机项目”老霸王游戏机“。
在游戏机项目完成后不久,我偶然看到一张老照片,上面有我之前用过的一个CRT显示器,就特别怀念。
正好Fusion360还不够熟练,想着借此机会用它来练练曲面造型,就开了这个坑
第一次将3d打印的外壳拿到手的时候我和朋友都觉得很好看,也挺多人喜欢,遂起了念头,给它加入灵魂—PCB和程序,让它成为独立的一个工具,而不是一个显示设备。 于是画板、打板、焊接、写代码、再改、加功能,到最后,就成为了现在这个“穷尽我目前技术力的多功能副屏设备”了。


PS:iCRT这个名字来源于我的儿子,我之前其实取的名字叫MiniCRT。

功能介绍

目前iCRT包含以下几个功能:

  • AIDA64副屏,通过RemotePanel实现,具有百分比和进度条的动画效果
  • 音乐频谱节拍计,通过内部的麦克风采集环境声,进行FFT处理、实时节拍检测后,显示漂亮的频谱效果和节拍RGB灯
  • 动态天气时钟,通过高德地图API获取天气信息,并读取对应的动态效果作为背景。
  • 视频播放,播放事先处理过的Mjpeg+Mp3文件,音画同步
  • 图片显示,显示JPEG文件。

AIDA64副屏

稍微科普一下目前副屏的几种实现办法,以及为什么iCRT叫“独立”副屏。
副屏主要用来显示当前电脑的一些信息,比如CPUGPU温度、占用、频率等,也会加入一些个性化元素,总之就是一种仪表盘的感觉。
实现的方法主要有:

  • 扩展显示:将显示设备连接到电脑的显示接口,然后作为扩展显示器,将电脑屏幕扩展到该显示器,并将AIDA64仪表盘移动到扩展的屏幕
    优点是效果好,屏幕大,性能强;
    缺点(个人觉得)是扩展显示会占用部分显卡性能,并且会不小心将鼠标移动到扩展屏,有时候不知道鼠标去哪里了,在全屏玩大型游戏的时候很讨厌
  • 独立Web显示:通过一个独立的外设,通常是安卓机、树莓派或者其他能访问网页并显示的设备,远程访问AIDA64提供的网页来展示
    优点是不影响电脑性能,与电脑独立,可以放到其他地方
    缺点是AIDA64提供的RemotePanel网页显示的特效有限,无法显示自定义的仪表和动画特效
  • 独立自定义显示:通过一个独立的外设远程访问AIDA64提供的数据(也可以是自己写的上位机提供的数据),并根据自己的样式来展示(本项目)
    优点仍然是不影响电脑性能,与电脑独立,可以放到其他地方
    对于本项目来说,缺点就是ESP32-S3性能限制,无法显示更好更清晰的效果以及动画,
    如果是性能强劲的安卓副屏+有人帮你设计UI+有人帮你做成安卓APP,那就是我认为最完美的副屏了
  • 第三方外设:AIDA64支持一些第三方外设,比如罗技和雷蛇的一些东西,他们用自定义的协议传输数据
    优点应该是独特的外形和与设备的契合能力了(没用过)
    缺点(没用过)

本项目通过获取AIDA64的RemotePanel的信息,解析后通过自己做好的UI进行展示。
在CPU和GPU的占用上加入了独特的仪表动画效果,加入了随时间流逝的折线图效果
在硬盘、内存使用上也添加了动画效果。

另外:左下角的图片可以自己更换,凸显个性。直接在网页上即可更换,无需用读卡器

音乐频谱节拍计

我最喜欢的功能

一直都很喜欢音乐可视化,也喜欢音乐频谱。之前做过用电脑采集音频进行FFT后,将数据发送给ESP32进行展示,这次做的是实时采集环境音然后分析显示
麦克风试了好几种,有模拟的,有数字的,数字的也测试了好几款,目前这个ICS43434是效果最好的一款,当然也最贵
实时节拍算法换了好几个,也花了茫茫多的时间,这个是我能做到的最好的实时节拍检测了,通过声音能量在一个窗口期内的变化进行判定,能适应大部分的歌曲
在检测到节拍后,RGB灯会闪烁一次,可以通过底座的扩展接口外接音响和RGB灯带,这些灯带也同样能同步进行闪烁
给麦克风采集加入了动态增益算法,通过判断最近一段时间内的平均声音强度,来动态提高或者降低缩放比例,以实现任何音量都能有完美的频谱展示和节拍检测

动态天气时钟

很久以前有个手机厂商叫火腿肠(HTC),当我在别人手机上看到他那随着天气而变动的动态背景的时候,惊为天人,心想这实在是太酷炫了,
这次做天气时钟,我想的就是一定要动态背景
本项目的天气动画来自网上找到的HTC SENSE天气动画。HTC的手机业务也早已停掉多年,如HTC告知我不能使用,请告知我,我会第一时间删除
天气3-5分钟更新一次,目前来自我的高德API,如果自己有API的可以自己申请然后填入自己的使用
在天气改变时,会有丝滑的切换动画
时钟方面,包含了公历、农历的显示,包含了常见节假日、以及24节气的显示

视频播放

或许不能叫视频播放,ESP32-S3只是一个面向IoT的单片机,内部并没有视频编解码功能,就算是JPEG解码,也只是软解码
本项目的视频播放是通过将视频处理为MJPEG文件+MP3文件,保存为相同的主文件名后拷贝到播放目录,设备会同步解码播放
需要MJPEG必须是25帧,因为是按25帧进行的音画同步
MJPEG解码采用的最新最快的SIMD解码,是ESP32-S3上能做到的最快解码了,比JPEGDEC等普通解码库快50-80%

图片播放

同上,没什么好说的,就是播放图片

以上就是iCRT目前实现的所有功能。
它的定位是一个全能的副屏,桌面的摆件,以上所有功能都是基于这个需求来做的
以它的硬件同样也可以移植之前的老霸王游戏机的代码,玩FC游戏,如果有需要的话

后续更新计划

后续计划加入(也就是挖坑):

  • 多城市天气切换(方便你看你和你的TA)
  • 微信小程序控制(虽然Web和按键都能控制,但是手机控制会不会更洋气一些?)
  • 更多的AIDA64UI界面(这个个人不是设计专业,可能需要专业人士给一些设计方案)
  • 单独的MP3播放?(这个喇叭这么挫应该不会有人想用它听歌吧不会把不会吧不会吧…)
  • 扩展底座的制作。目前已经预留了扩展接口。扩展底座计划会有更大的喇叭、更多的RGB氛围灯、USB2.0扩展坞。 这样它的功能就又多了一个
  • 老霸王游戏机。 有了扩展底座之后,可以通过扩展底座供电,现有背后的usb接口就可以接手柄,运行游戏机程序了

控制方法

通过设备后面的按键控制:长按为呼出、确定菜单,短按为当前功能里面的下一个或者菜单的下一项。
通过Web控制:在设备配网成功后,在AIDA64界面的上方可以看到该设备的IP地址,在浏览器内输入这个IP地址就能显示该设备的控制页面,在这个界面控制更加方便和灵活

配网

在没有WIFI信息的时候,设备会打开配网AP,SSID为 Crt-Ap,密码为12345678。
连上后,稍等片刻会自动弹出配网页面,并且自动搜索当前环境的WIFI热点,选中你的网络,输入密码,稍等片刻即配网完成。
如果网络变动需要重新配网,需要在设置界面内选择“清除WIFI信息”来清除,这样下次启动就会重新打开配网热点。

激活

本项目花了很多的时间精力和不算多的钱
由于CRT外壳打印较贵,为了便于DIY,我还特地花了一天时间建立了个便宜的青春版外壳开源供DIYer使用
不想靠也没法靠这个赚钱,但也希望自己花的时间有那么一点价值,以及能获得认同和喜欢
9.9的激活码(一杯打折瑞幸)就能使用我前后编写了一年的固件,以及今后随着我的爱好更新的新功能
如果懒得做可以买我SMT+组装好的成品

我有一个小小的梦想,就是自己做的东西、写的代码能获得别人喜欢的同时,还能帮我实现瑞幸自由

硬件配置

  • 单片机:ESP32-S3-N8R8
  • 显示屏:3.2寸320×240 IPS SPI显示屏(贵)
  • 存储:TF卡,SDMMC 4Bit模式
  • 音频播放:MAX98357 + 普通小喇叭
  • 音频采集:ICS43434 数字I2S麦克风
  • 额外设备:WS2812灯珠控制
  • USB:USB接口支持正反插,正插为CH340X串口,烧录设备用,反插为ESP32-S3自带USB,可以作为HOST在游戏机固件内连接手柄使用
  • 外壳:3D树脂打印的 复古CRT显示器造型(怀旧版,贵) 和 时尚台历造型的(青春版,便宜) 两款

编程平台

IDE:platformio + arduino,6.4.0 ,图形框架是lvgl

开源

想了很久还是选择将PCB和青春版外壳开源,让想自己动手做的朋友也能自己做
一则是因为不能忘记自己做东西的初衷,是想分享自己做的有趣的好玩的东西
二则因为答应了不少群友会开源除了代码以外的内容
代码由于前后花了一年多的精力,以及里面有不少自认为不错的设计,实在是无法开源,见谅

链接会在立创那边开源后再更新

鸣谢

一起完成本项目的神秘藏宝室(Bilibili)、无常喵态等,(好人卡)你们是好人

滚动至顶部