前阵子刷“什么值得买”的时候看到,
【流浪地球2】联名款互联网主机秘钥充电宝大甩卖了,
https://post.smzdm.com/p/aev3zw74/
原价两三百的玩意,有故障的大概四五十块块,能用的大概80-90。
200块买个上不了飞机的充电宝是个大聪明,
90块买个联名手办还要什么自行车啊。
于是,下单搞了一个。到手了如下:
一个数码管的显示屏,下面三个按钮可以控制显示功能。
甚至还能看到充电功率和电量~
能用,很重,不适合出门。
确实就是个手办玩具。
过了两天又想了下,要不拆了这玩意,‘
把显示屏接到自己的设备上,
在设备上写个支持 Authenticator 2FA的程序,
让它做个真正的“互联网主机秘钥”设备?
说干就干。
首先就是选个硬件板子,需要小,同时能驱动显示屏。
看了一下,ESP32 很合适,IO口够用,
能驱动小显示器,能连接WIFI,
价格也便宜~
选个硬件板子 -> ESP32C3
上了淘宝看了一圈,最终找了一个ESP32C3的板子。
支持C口,电脑直连就完事了。
什么驱动都不需要,甚至macOS也是直接能用的~
开发框架 -> micropython
看了一圈开发框架之后,发现还是micropython比较简单。
boot.py是框架自带的,自己的逻辑写在main.py,
IO口和网络都内部自带,需要的驱动基本都能找到第三方库。
不过,需要自己刷个固件 -> 在 ESP32 上开始使用 MicroPython。
|
|
验证micropython环境
最简单的方案,VS Code Pymark 插件:Pymakr - Visual Studio Marketplace
装上去之后,在左侧栏目,点击一下“
”图标,选择“List Device”。
如果ListDevice没有出现或者报错了,
可能需要再安装一下Nodejs运行环境。(Windows上碰到过:choco install nodejs 完事。)
再点击“设备COM”,选择“连接”图标之后,在选择“终端”图标。
选择终端图标之后,能看到这个命令行界面,说明micropython环境好了。
如果看到的是报错,估计是上面的固件没有刷好。
重新尝试输入固件即可。
PS:可能需要切换–baud 460800 输入,具体的看micropython文档或者问下AI
esptool.py –chip esp32 –port /dev/ttyUSB0 –baud 460800 write_flash -z 0x0000 micropython.bin
选个屏幕 -> 2.25寸长条屏
选屏幕是个大难题了。找了一圈很难找到这个规格的屏幕。
这玩意显示区域:1.8CM高,15CM宽,长条形。
在淘宝翻了一圈都没找到类似的规格。
最后退而求次:2.25寸 TFT液晶屏幕。
支持了ST7789(micropython有st7789.py驱动)。
显示屏的8P接口分表是:GND、VCC、SCL、SDA、RST、DC、CS、BL。
对着ESP32的引脚,就是在右侧一个个接进去。
ESP32的引脚分别是:GND、3.3V、GPIO02、GPIO03、GPIO02、GPIO10、GPIO06、GPIO07
对应代码:
你的接线: SCL、SDA、RST、DC、CS -> GPI002、GPI003、GPI010、GPI006、GPI007
SCK_PIN = 2 # SCL 引脚 (时钟) -> GPI002
MOSI_PIN = 3 # SDA 引脚 (数据) -> GPI003
RST_PIN = 10 # RST 引脚 (复位) -> GPI010
DC_PIN = 6 # DC 引脚 (数据/命令) -> GPI006
CS_PIN = 7 # CS 引脚 (片选) -> GPI007
————-`————–
最后屏幕的BE口接到另一个GND。(这里我也没弄懂,测试出来的
然后屏幕就点亮了。
“开始表演” :项目代码 -rw-r–r– 1 liguobao staff 6.3K 7 30 11:05 http_server.py -rw-r–r– 1 liguobao staff 4.3K 7 30 11:05 main.py -rw-r–r– 1 liguobao staff 265B 7 20 13:53 pymakr.conf -rw-r–r– 1 liguobao staff 1.6K 7 30 11:05 show_text.py -rw-r–r–@ 1 liguobao staff 30K 7 22 15:19 st7789.py -rw-r–r–@ 1 liguobao staff 3.6K 7 22 15:19 vga1_8x8.py
st7789和vga1 都来源于: https://github.com/russhughes/st7789py_mpy/
连接WIFI + 实现HTTP服务 http_server.py
|
|
主函数 -> 屏幕初始化 + 适配高度、宽度
- main.py
|
|
多行文本显示
- show_text.py
|
|
最终效果
装回去之后发现显示反了,安装位置没法改了,直接改下代码算了。
内部走线
塞了个USB线进去,供电+数据传输
总结
因为屏幕尺寸和驱动支持的尺寸不那么匹配,最后采用的方案是代码逻辑上实现裁剪。
又因为屏幕尺寸翻转的时候需要更改内存地址,折腾这个搞了很久。
其他的代码倒都是不断试错验证,没太大的问题。
后记 -> “友情忠告”
该设备组装是靠着固体胶水和卡扣,
不存在后期拆装的可能。
一切的拆装都基于暴力和破坏。
所以:
这玩意的拆卸是“有损方案”,不存在无损拆装改造。
这玩意的拆卸是“有损方案”,不存在无损拆装改造。
这玩意的拆卸是“有损方案”,不存在无损拆装改造。
内部屏幕没找到适配的IC驱动板,
左右两侧一共四个电源线焊接不那么牢固,
拆装过程很容易断开,
正常情况下很难复用这玩意
(有朋友有方案可以滴滴我。
电池拆装有起火风险,请谨慎操作。
电池拆装有起火风险,请谨慎操作。
电池拆装有起火风险,请谨慎操作。
最后。
祝玩得开心~
资料连接: