本帖最后由 jerry_jn 于 2025-7-17 17:37 编辑
作为一个每天扒在电脑前的数码爱好者,总觉得主屏幕被代码编辑器、浏览器窗口占满后,想瞥一眼时间、CPU 占用率都得切来切去,实在太影响效率。于是琢磨着搞个低成本副屏,看了一圈成品副屏要么太贵,要么功能不合心意,干脆自己用单片机捣鼓一个!折腾小半个月总算成了,今天就来详细说说过程,给想动手的朋友打个样~
一、核心硬件选款:性价比优先
一开始在单片机型号上纠结了好久,从 51 单片机到 STM32 都看了个遍。最终选了ESP32,理由很简单:自带 WiFi 和蓝牙,方便和电脑无线通信,而且处理能力足够带动屏幕,价格也就几十块,比 STM32 入门款便宜不少。屏幕选的是0.96 英寸 OLED,虽然尺寸小但清晰度够高,黑底白字看着也舒服,关键是功耗低,用个小锂电池就能续航大半天。
这里提醒下,要是想做更大的副屏(比如 2.4 英寸 LCD),建议直接上 STM32F103,ESP32 驱动大尺寸屏幕时偶尔会有卡顿。另外,接线时一定要注意屏幕的 IIC 接口引脚定义,我第一次就因为把 SDA 和 SCL 接反了,屏幕白亮半天没反应,排查了俩小时才发现问题,血的教训!
二、功能实现:从基础到自定义
目前我的副屏主要显示这几类信息,都是日常高频用到的:
系统状态:CPU 占用率、内存使用率、硬盘剩余空间,通过 Python 脚本读取电脑数据,再用 MQTT 协议发给 ESP32
时间信息:精确到秒的时钟 + 农历日期,用 NTP 同步时间,误差基本控制在 1 秒内
自定义内容:可以手动输入文字(比如待办事项 “下午 3 点开会”),甚至能显示简单的 BMP 格式小图标,我就把女朋友画的小猫头像设成了屏保
程序部分用 Arduino IDE 写的,其实难度不算高,核心就是把传感器数据(或者电脑发来的数据)解析后,通过库函数输出到屏幕。比如显示 CPU 占用率,先在电脑上用psutil库获取数据,转成 JSON 格式通过 WiFi 发出去,ESP32 收到后用OLED.display()函数刷新屏幕就行。要是完全没接触过编程也别怕,网上有很多现成的例程,稍微改改参数就能用。
三、踩坑与优化:实用经验分享
供电问题:刚开始用 USB 线直连电脑供电,屏幕总闪屏,后来发现是电脑 USB 口电压不稳,换成 5V 1A 的小电源就稳了
无线延迟:WiFi 传输偶尔会有 0.5 秒左右的延迟,对实时性要求高的朋友可以试试有线串口连接,延迟能降到 100ms 以内
屏幕烧屏:OLED 长时间显示同一画面会烧屏,建议加个自动切换显示内容的功能,比如每 10 分钟换一次布局
四、优缺点总结:适合哪些人玩?
优点:成本低(全套下来不超过 80 块)、完全自定义(想显示啥就编啥)、体积小(巴掌大,随便贴在显示器旁边)
缺点:显示面积有限(复杂图表别想了)、需要一点点编程基础(至少得会改参数)、颜值看个人手艺(我这手残党焊的杜邦线有点乱)
总体来说,这个小项目特别适合想入门单片机的新手练手,既能学到硬件接线,又能接触到简单的通信协议,做好了还挺实用。我现在每天写代码时,副屏就乖乖显示着时间和系统状态,切窗口的次数少了一半,效率真的提上去了!
|