碎碎碎碎屁

吃喝玩乐最重要

给笨笨完整的表情


流浪地球2看完后,花了4个人*半下午+晚上,拼完了众筹售价800多的笨笨拼装版(1800+零件的乐高MOC)。拼完之后发现,它的电动/远程控制,只能是4个差速轮,头不能转,表情是两张贴纸+小灯珠,手臂是手动控制,一眼看起来像是“先上线再说”。于是就想,能不能对它做些增强。

经过了一些调研,表情可以用小oled屏来显示,正好也能匹配电影中类似点阵屏效果,好了,那就给笨笨完整的<del>一生</del>表情。

图片来源:https://www.gcores.com/articles/161992

技术实现上用了ESP32开发版+MicroPython固件,使用了SPI协议连接屏,一块ESP32连两块OLED屏。
由于拼装版笨笨表情部位大概9CM宽4CM高,于是选择了2块1.54寸支持SPI的单色OLED屏,单块分辨率128*64,价格¥35一块
ESP32的选择就非常宽容,可能ESP8266、ESP32-S2都行,最便宜闲鱼10块多,我选择了¥26焊接好排针的DevKit V1。

ESP32与OLED屏都有排针,所以它们中间使用杜邦线进行连接。
电源上,前期直接使用了MicroUSB插线,后期换成了18650+锂电池充放电控制板+单母头杜邦线焊接。
笨笨表情,这里给出了GIF原文件,https://www.gcores.com/articles/161992

材料购买到货后,当晚就能helloworld了。因为买了两块不一样的ESP32,先到的一块直接刷好了MicroPython,只需要搭建环境,电脑连接板子就可以开始写功能逻辑。不同的ESP32,USB连接的驱动可能不一样,CH343p、CP2102等等,需要安装好。
ESP32本身有4路SPI,2路可供用户使用(HSPI、VSPI),理论上每一路SPI都可以通过一条CS(Chip Select)控制三个SPI设备。因为只控制2个屏,那就简化一下,HSPI连接一块,VSPI连接一块。OLED上7根线,其他5根没什么好说;DC(Data/Command)接了ESP32上的MISO,反正屏不需要SPI上行;RESET随便找了2个GPIO(32、33)。
OLED屏的驱动是SSD1309,据说和SSD1306基本类似,用了这个MicroPython的库 https://github.com/rdagger/micropython-ssd1309 ,里面提供了draw_bitmap方法,就能把单色图画到屏幕上了。

王铭东老师的教程和B站视频都非常基础,适合入门,https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/01.dajianhuanjing
ESP32的SPI部分参考文档 https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/spi_master.html
SPI协议的解释视频5分钟看懂 https://www.bilibili.com/video/BV1F54y1M7e7/

SSD1309的库里还提供了一个方法(img2monoHMSB.py),使用了Python Pillow,将图片转化为单色图,可以理解为原来是彩色的图片,需要转换至黑白图片,而且没有灰阶,只有黑色和白色。直接用这个库里的方法,容易把一些看起来是黑色背景的图转出白色的点。所以手动掏出<del>画图板</del>Mac下的预览,手动画了黑色方块盖住应该黑色的地方,每个图都要手动处理效率有点低下,但是表情至少动起来了。

为了批量处理gif,掏出了上个世纪的命令行图片处理软件ImageMagick:

-coalesce:补一下gif中省略掉的帧
-crop 686x225+32+17:切一下图里不要的部分
-level 10%:拉一下曲线,将不够黑的黑直接变成黑
-resize x64:将图片的高度缩放到64,适合OLED屏
+repage:前面切的边框这步实际切掉,切完之后尺寸是195*64
-monochrome:转为黑白单色,这步最后做效果比较好

再把gif按帧转为png,最后5个gif变成了143张单色png。
再花了几分钟尝试用magick转成ssd1309库里能用的mono格式,由于不想试了,直接用img2monoHMSB.py一把梭。

ESP32存储空间4MB,每张图片4KB不到,全上传也就0.5MB多,写了一个while True,每个图片中间sleep 100ms。把逻辑放到main.py里,这样启动就能自动循环放了。

剩下来的问题是这套方案怎么塞到眼睛里?截止目前还没塞进去……
因为本来眼睛内的厚度有限,屏后、ESP32的杜邦线在里面不太挤的下,于是考虑过整个拼接板笨笨换头。换头涉及拆头,目前组装完的笨笨上单独把头拆下来的动手成本有点高,近期笨笨又在抛头露面(https://weibo.com/7773082412/MxS0zxRNL 最后一图中跑到模糊那只) ,所以还没实操。
换头考虑过用乐高MOC做个更大的头部空间,但是设计与零件成本,加一起估计起飞。考虑直接3D打印,闲鱼大学生,头部建模报价80,打印的话得有模型才能估价,所以也没进展。

现在先就这样吧,先上线再说

可能可以排期的需求:

  1. 增加麦克风,接入离线唤醒词、在线语音识别。
  2. 屏幕支持临时自定义内容输入,比如临时投一些文本内容
  3. 蓝牙接管电机控制
  4. 前进方向的前避障
  5. 头部旋转使用步进电机控制


发表回复

您的电子邮箱地址不会被公开。