说实话,我第一次看到这个项目的时候,整个人都有点愣住了。
你想象一下这个画面:我正坐在电脑前码字,一转头,发现旁边一个小小的屏幕上,竟然实时显示着我电脑桌面的画面。不是那种通过HDMI线连接的副屏,而是纯无线的,画质虽然不算惊艳,但这种“黑科技”的感觉,真的让人忍不住想分享。
事情是这样的。前几天我在GitHub上瞎逛,看到一个叫ESP32-Desktop-Monitor的项目。简单来说,就是用一个带屏幕的ESP32开发板,通过WiFi把电脑屏幕的画面实时“投屏”到这个小屏幕上。
我当时的第一反应是:这玩意儿能流畅吗?延迟会不会高得离谱?
这玩意儿到底能干啥?
你可能会问,做个这么小的副屏有什么用?
说实话,实用性可能确实比不上正经的显示器。但是,把它摆在桌面上当监控面板,显示系统状态、CPU占用、天气信息,或者干脆就让它循环播放一些像素风格的动画,逼格瞬间就上来了。
而且,对于喜欢折腾的极客来说,这种“把不可能变成可能”的过程,本身就是最大的乐趣。
硬件准备:其实就两样东西
先说说需要啥硬件,其实特别简单:
1. ESP32开发板
项目推荐的是 TENSTAR T-Display,某宝几十块钱就能拿下。这块板子最大的特点就是自带一块1.14英寸的ST7789屏幕,135×240的分辨率,不用自己接线焊接,到手就能用。当然手里其他的带屏开发板改下代码一样可以。
2. 你的电脑
随便什么电脑都行,只要能跑Python。Windows、macOS、Linux通吃。
软件设置:看起来复杂,其实就两步
这部分可能是很多人觉得头疼的地方。别担心,我踩过坑了,你跟着我做就行。
第一步:搞定ESP32接收端
打开Arduino IDE,加载项目里的receiver.ino文件。首先得改WiFi密码:
const char* ssid = "你家WiFi名字";
const char* password = "你家WiFi密码";
这一步没啥技术含量,照做就行。
然后是最容易出问题的地方——TFT_eSPI库的配置。如果你用的是T-Display板子,驱动和引脚定义其实都是现成的。你需要找到Arduino库文件夹里的User_Setup.h文件,确保这几行是“活着的”(没有被注释掉):
#define ST7789_DRIVER
#define TFT_WIDTH 135
#define TFT_HEIGHT 240
上传代码,打开串口监视器,你就能看到屏幕上显示出ESP32获取到的IP地址。记下这个地址,一会儿要用。
第二步:搞定电脑发送端
电脑这边需要Python环境,然后用pip装几个库:
pip install opencv-python mss numpy
这几个库的作用分别是图像处理、屏幕截图和数组运算,都是专业工具,靠谱。
然后运行发送脚本:
python transmitter.py --ip 你刚才记下的IP地址
如果一切顺利,你就能看到小屏幕上开始显示电脑画面了。
一些小窍门
折腾过程中我发现几个小技巧,分享给你:
画面不动的时候,项目会自动检测变化区域,只发送变化的像素。这样既省带宽又省电。你可以在命令行里调整--threshold参数,数值越大,对变化的敏感度越低,传输压力也越小。
如果感觉卡顿,试试降低帧率。默认是15帧,改成10帧甚至8帧,日常看个系统监控完全够用,流畅度会好很多。
颜色不对怎么办? 我一开始也遇到这个问题,画面颜色发紫发蓝。后来发现需要在receiver.ino里改一行:
bool useBgrSetting = false; // 如果颜色不对,试试改成true
写在最后
说实话,这个项目可能算不上“实用”,但它让我重新感受到了折腾的乐趣。看着自己动手让两个毫不相干的设备“对话”,那种成就感,真的很棒。
如果你手头也有闲置的ESP32开发板,不妨试试这个项目。就算最终不常用,光是折腾的过程,也能学到不少东西。
项目地址:https://github.com/tuckershannon/ESP32-Desktop-Monitor