ESP32-S3多功能独立副屏[iCRT]
简介
耗时2个月制作的ESP32S3制作的复古多功能副屏: AIDA64副屏, 音乐频谱节拍计, 动态天气时钟, 视频播放,
简介:耗时2个月制作的ESP32S3制作的复古多功能副屏: AIDA64副屏, 音乐频谱节拍计, 动态天气时钟, 视频播放,开源协议
:GPL 3.0
(未经作者授权,禁止转载)描述
展示视频
【开源】复古多功能副屏“iCRT”,音乐频谱节拍、动画天气时钟,来看看吧_哔哩哔哩_bilibili
2024-1-22更新
扩展坞已完成
多功能副屏“iCRT"的扩展坞 - 嘉立创EDA开源硬件平台 (oshwhub.com)
东西都在这里下载,都有 https://pan.baidu.com/s/19-CHRh_MAejMqFVaL9os6Q?pwd=e8y5
制作交流群 739444215
之前SMT贴了一些板子,如有兴趣可直接到我工坊买
https://gf.bilibili.com/item/detail/1105534080
关于
制作这个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)、无常喵态等,(好人卡)你们是好人
制作说明
BOM
直接在嘉立创导出BOM,已尽可能适配了基础库,直接SMT都可以(我就是SMT的)
其中部分原件的购买链接如下:
屏,ST7789V插接款IPS不带触摸 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.758b2e8dl7yLYk&id=606752409953&_u=od53pk3b0b |
麦,ics43434 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.758b2e8dl7yLYk&id=696102320967&_u=od53pk4f88 |
立式fpc,18P | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.758b2e8dl7yLYk&id=665810216667&_u=od53pk8afc |
ch340x | https://detail.tmall.com/item.htm?id=724023996301&spm=a1z09.2.0.0.758b2e8dl7yLYk&_u=od53pkbac5 |
Max98357 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.758b2e8dl7yLYk&id=719153151868&_u=od53pkf9c8 |
按键,底座到柄高7MM | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5a8f2e8dyPZ3om&id=617002359193&_u=pd53pkd33d |
灯珠 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5a8f2e8dyPZ3om&id=678219564054&_u=pd53pkc859 |
AHT20模组 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.418e2e8dybhkR1&id=746563131957&_u=pd53pk23b3 |
喇叭(青春版)3020腔体4R3W-2P1.25 | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.17fc2e8dr0xOtT&id=674903789729&_u=pd53pk0473 |
喇叭(怀旧版)XHXDZ-2840塑胶-4R 3W | https://item.taobao.com/item.htm?spm=a1z09.2.0.0.17fc2e8dr0xOtT&id=23386844911&_u=pd53pkbe40 |
注意,不要声音的不用购买MAX98357和喇叭,不要环境传感器的不要购买AHT20(这个温度不太准,显示的实际上是模组的温度,比环境温度高了几度。
极度省钱的话,也可以不购买CH340X,USB反插就是直接CDC刷机。(但是会影响后续适配游戏机固件的手柄连接)
模组购买N8R8的。
焊接
这个板子的焊接很简单(除了MAX98357),注意RGB灯的温度,以及立式FPC插座的方向,按PCB上画的方向焊接
底部的焊盘是扩展坞,用于连接扩展坞上的喇叭、扩展RGB灯带,扩展坞待后续更新。
90%的问题都是虚焊或者连锡导致
烧录
USB插头正插是CH340X烧录,反插是CDC,都可以烧录。但是CDC烧录后看不到串口信息,默认串口信息是从CH340X出来的。
如何判断当前是340x还是CDC?插上后串口名字里面有340的就是340x,没有就是CDC
提供的固件分为两种,单文件版 和 升级版。
单文件版适用于第一次刷机,刷到地址0x0,刷机后会清空里面的内容,包括激活码信息。单文件版文件名里面有all三个字母。
升级版适合后续升级,刷到地址0x10000,刷机后不会清空里面的设置。
刷机工具选择 ESP32-S3, UART模式。 SPI SPEED 80M, SPI MODE DIO,速度921600
固件在 https://pan.baidu.com/s/19-CHRh_MAejMqFVaL9os6Q?pwd=e8y5 这里下载,进入iCRT目录找。
调试
烧录完成后,串口应该能正常看到启动信息,如果看不到表明没焊好。
准备一张TF卡,将网盘里面提供的目录结构内的目录拷贝到TF卡根目录,插上去之后,上电即可看到画面和声音(没声音就是没焊好98357)
寻求帮助前请提供串口信息
配网
本设备的AIDA64副屏和天气时钟需要配网使用。
在上电后,设备会自动打开一个AP名为Crt-Ap,密码是12345678。用手机连上这个AP,稍等片刻会弹出配网页面,自动搜索当前环境内的热点,选择你的热点并输入密码,即可完成配网。
注意:有的手机一旦发现热点连不上互联网,会自动断开热点用5G网络,这个时候需要再连一次AP。连上AP后如果没有弹出配网页面,请到手机浏览器上输入192.168.4.1 也能打开。
控制
设备可通过背后的按键控制和Web网页控制。
按键控制:长按为呼出菜单、确定。 短按为下一项。
Web控制:直接点对应按钮就行。
Web控制里面可以设置高德地图的API KEY(默认用的是我的),设置城市代码(城市代码就是你所在的区域的身份证开头6位),设置AIDA64主机地址(就是你的电脑IP地址)
激活功能也在Web控制里面,提供给我机器码后,将获得的激活码输入,即可完成激活。
AIDA64
1、去找一个激活了的AIDA64客户端(自行)
2、菜单【文件】【设置】【LCD】,选择Remote Sensor。
3、端口80,分辨率随便填个1280×800,勾选【启用RemoteSensor LCD支持】
4、点击【LCD项目】,在右上角点击【导入】,然后选择我网盘内的 my_aida64_setting.rslcd 文件。
5、导入后需要进行一些设置,因为每个人的CPU GPU 主板 硬盘 网卡等都不相同,请一项一项设置。
6、注意,绝对不要修改”Show Label“里面的文字,”Show unit”必须填入”^”(不含引号),否则设备检测不到。
7、一切修改完成后点击OK,然后将AIDA64最小化。可以在设置里面让它开机自动启动。(设置、常规、在windows启动时运行AIDA64)
8、通过网页访问iCRT的IP地址,在最下面的“副屏主机地址” 里面设置你电脑的IP地址(也就是运行AIDA64的电脑IP),然后保存。
如果本地80端口被占用,则需要在后面加冒号,加自定义端口。
例如
192.168.0.100 使用 192.168.0.100的主机地址,默认80端口
192.168.0.100:9223 使用 192.168.0.100的主机地址,使用9223端口
注意冒号是英文冒号…..
9、防火墙允许AIDA64访问网络,或者手动放通TCP80端口(或者你自定义的端口),重要!
设置完成后,将iCRT切换到AIDA64功能窗口,即可显示电脑状态信息。
音乐频谱
默认开启自动增益功能,即是设备会根据音量大小动态调整增益以显示更好的频谱条。
可以在Web页里面关闭动态增益,固定在某一个增益。
听歌旁边放个这个很棒的啦,相信我。
天气
在Web页面里面配置好城市代码即可使用。如有可能也可以注册自己的高德API KEY并填入。
温度和湿度有两个数字,分别表示设备上传感器的温度湿度,以及高德天气的温度湿度。
设备的温度会超过当前环境温度几度(这个真没法,它要发热)
(晴天的晚上的大月亮最好看)
MJPEG播放
将视频通过下面的FFMPEG命令处理后,改名为 my0.mjpeg my1.mjpeg…..等,拷贝到 TF卡的custom目录。如要同步播放音频,音频文件的名字与mjpeg文件名字相同(my0.mp3,my1.mp3 ….)
./ffmpeg -i 你的视频文件名.mp4 -vf “fps=25,scale=-1:240:flags=lanczos,crop=320:240:(in_w-320)/2:0” -ss 00:00:13 -t 00:02:18 -q:v 7 my0.mjpeg
./ffmpeg -i 你的视频文件名.mp4 -ss 00:00:13 -t 00:02:18 -b:a 128k my0.mp3
注意,-ss部分为剪辑命令,不需要剪辑的就去掉。
更新:网盘内提供傻瓜式转换工具,由神秘藏宝室编写
图片显示
将320×240大小的JPEG文件改名为 p0.jpg p1.jpg p2.jpg 等,放入 TF卡的pic目录即可。
Q&A
如果是在工坊或者黄鱼本人或者朋友处买的,发货前都会激活并测试完所有功能,不会有硬件问题。以下针对自驾车:
90%以上的问题都是因为模组、芯片等虚焊或者连锡,请用微距镜头或者手机相机仔细检查,以下默认忽略掉没焊好的情况
Q: 找不到串口
A: 万用表检测模组是否正常上电3.3v,也检查一下ch340芯片的供电
Q: 无法刷固件
A: 同上
Q: 屏幕不亮或者花屏
A: 排线是否插反,是否有背光
Q: 没声音或者爆音或者白噪音
A: 这个很难焊,基本上都是没焊好98357那个芯片。当然如果在设置里面将设备静音了,也会没声音
Q: TF卡初始化失败
A: 卡坏了或者目录不对
Q: RGB灯珠不亮
A: 灯珠被烫坏
Q: 麦克风采集不到音频
A: 底部可能连锡
Q:无法访问AIDA64
A:在电脑浏览器地址里面输入本机(电脑)ip地址,看看是否能打开aida64的网页,如不能打开,则大概率是80端口被占用,请设置其他端口
其他问题,请进群咨询 739444215
好像就是这些了
评论