如何自己做一个像素风格的彩色时钟。
基本原理是通过ESP8266系芯片的SPI端口来控制彩色LED屏的像素点亮暗。而ESP8266本身又受到局域网内的服务端控制。服务端可以是任何能跑java的设备,比如rspi、笔记本、安卓手机。 控制端和服务端程序都已经有开源的实现,叫做Awtrix 2.0。现在就来动手做一下。
以下教程有部分内容引用自少数派的文章,部分引用自官方教程。
购买材料
WS2812B 全彩 8*32 全彩可编程像素软屏(淘宝 115 元)
ESP8266 WIFI 模块 CP2102 ESP-12E (淘宝 27元) / 或者其他ESP8266系的芯片如NodeMCU V4 (淘宝25元)
杜邦线 公对母 (一定要公对母)
3D 打印光栅
半透明玻璃纸/A3纸等
micro usb 线
胶水、剪刀等工具
3D光栅就是一个塑料方格子,用来把每个像素点的光隔离起来,这样成品才会有清晰颗粒状的显示效果,不会糊成一片。模型文件在那个德国人的网站上有下载(注意要打2个,互相拼接起来)
半透明玻璃纸/A3纸是罩在光栅上的,让光点更加柔和。 我觉得用汽车的半透明防爆膜,夜间显示效果更好。
当然也可以从节省成本的角度,进行其他改造,不一定要用官方提供的3D壳模型。毕竟在资源有限条件下做出做漂亮的东西也是DIY的乐趣之一。
现在现来弄程序部分。
服务端
第一步下载服务端,服务端在blueforcer.de的服务器上。Awtrix 2.0的服务端是不开源的,而控制端固件开源。
wget -N awtrix.jar https://blueforcer.de/downloads/awtrix.jar
Linux下要确保时区正确
sudo timedatectl set-timezone 'Asia/Shanghai'
自启动脚本和守护进程什么的就略过去了
sudo nohup java -jar ./awtrix.jar
Windows下则是:
java -Duser.timezone=Asia/Shanghai -jar awtrix.jar
因为这个服务端程序是德国人写的,我猜当时他编译的时候把程序地区选项也给指定了。假如在运行时不重新指定时区,会发现钟的时间慢八个小时(德国在东一区)
官方文档还有安卓手机上安装服务端的教程,可以自行去看。安装好后浏览器打开这个服务端的 IP,然后端口默认都是 7000,就能看见管理后台了。(这时候提示控制端没有连接是正常的)

控制端固件刷入
首先装个VS Code,然后从这里下载控制端的工程文件。
在VS Code里装Platform.IO插件。这是一个嵌入式设备的开发平台,支持很多种芯片。
然后打开下载好的工程文件,根目录下 awtrix-conf.h 文件里要修改 Wi-Fi 和服务器设置。ssid 填写 Wi-Fi 名,password 填写 Wi-Fi 密码,awtrix_server 填写自己 awtrix 服务器的 IP(不需要填端口)。这样在控制端上电后,才能自动连上wifi,等候服务端指令。
USB 插上 ESP8266 后,点击Platform.IO里的箭头刷写固件即可。这个固件好像是基于ESP8266的arduino版。
这里我踩了个坑,因为Platform.IO在编译固件时需要自动从国外网站下载一些工具链,但我家网络连国外网站时断时续的,屡屡导致编译失败。 网友这一步时要确保网络的质量,有条件的挂个梯子。我这里最后用了十几分钟编译好。
ESP8266 和像素屏幕用杜邦线连接(记住是接 DIN 的那三个)。像素屏上的 DIN 接 ESP8266 上的 D2 口,像素屏 GND 接 ESP8266 的 GND,像素屏 5V 接 ESP8266 的 3V3(或3V)
这时候屏幕应该已经亮了。
然后就可以把光栅粘贴好,扣到屏幕上,把准备好的玻璃纸贴上去(记得平整)。
官方提供的开发平台是B4J,看了一下,似乎是一种类似Visual Basic的脚本语言(及同名IDE)。也提供了很多控制器API(都是在那个不开源的服务端里实现的)。喜欢折腾的同学可以自行开发更多app。这里直接从“Appstore”下载别人做好的app。比如“空气指数” “倒数” “太空中现在有几个人” “月相” “bilibili关注者实时统计” “黑客帝国字符雨” “生命游戏” “俄罗斯方块”等。
实际上,这些app大多涉及网络访问API,所以要有服务端把数据抓好之后,根据设定好的规则转换成像素点的亮暗规则,发送到连着LED屏的控制器上。
网友也贴了很多完成效果图。太酷了。我做的比较挫,就不贴了。