2025-5-15 12:04:37 [显示全部楼层]
57浏览
查看: 57|回复: 0

[项目] Beetle 树莓派RP2350 使用墨水屏制作一个名牌

[复制链接]
本帖最后由 aramy 于 2025-5-15 12:04 编辑

一、项目起源
小朋友参加活动,会有很多陌生小朋友一起玩的场景。这时老师会给每个孩子贴一个名字贴,方便小朋友们互相认识。这次申请到了Beetle树莓派 RP2350的开发板,基于其穿戴特质,加一个墨水屏,为小朋友制作一个名字贴,让孩子成为最闪亮的崽!二、硬件介绍
Beetle 树莓派RP2350 使用墨水屏制作一个名牌图1

主控:Beetle RP2350 是一款基于RP2350芯片设计的高性能迷你体积的开发板,该开发板仅硬币大小(25*20.5mm),专为对空间有要求的嵌入式应用设计。高性能树莓派RP2350芯片是树莓派新推出的高性能安全微控制器,该微控制器拥有独特的双核双架构设计,允许选择Arm Cortex-M33或Hazard3 RISC-V内核。P2350拥有150MHz主频,520KB RAM和2MB Flash,可处理大量高速数据。
高度集成,超小尺寸Beetle RP2350在仅硬币大小的体积上引出了11个IO、BAT、3.3V等众多接口,为项目制作提供了充足的IO和方便的电源连接。Beetle RP2350休眠功耗仅uA,使用电池可长时间工作。同时,Beetle RP2350还集成了锂电池充电功能和电池电压监控功能,可对锂电池进行充电和监测电量,以便在电量不足时采取措施,确保设备持续运行。
Beetle 树莓派RP2350 使用墨水屏制作一个名牌图2
墨水屏:使用的是微雪 3寸墨水屏模块红黄黑白400×168分辨率 e-paper e-ink电子纸。墨水屏使用SPI与主控通讯。
墨水屏与主控使用杜邦线连接。
Beetle RP2350墨水屏
GNDGND
VCC(3.3V)VCC
A1(27)DC
A0(26)CS
MOSI(19)DIN
SCK(18)SCLK
9BUSY
8RST
三、开发介绍
开发工具依然使用自己最喜欢的Vscode+platformIO。但是Beetle RP2350太新了,platformIO暂时还没有支持,这里借用相同主控芯片的seeed-xiao-rp2350开发板的驱动来开发Beetle RP2350板子。开发过程中还使用了python+opencv来对图片进行处理。
上一篇帖子写了,如何在vscode下搭建platformIO的编译环境。除此之外还需要修改板子的引脚对应关系。这里使用到spi通讯接口,所以需要修改spi对应的管脚信息。
Beetle 树莓派RP2350 使用墨水屏制作一个名牌图3
墨水屏显示的内容使用绘图板事先绘制好。需要留意,这个墨水屏是4色墨水屏,支持 黑、白、黄、红四色。电脑绘制好的图片是以RGB方式存放的,每个像素点使用3个字节保存。而墨水屏每个像素点使用2位数据保存(仅仅支持4色),这样图片从电脑到墨水屏就要进行转换。
Beetle 树莓派RP2350 使用墨水屏制作一个名牌图4
数据转换分为两步,第一步将电脑的图片颜色映射到4色上;第二步,将图片每4个像素压缩到一个字节里去。
  1. def getcolor(imgpoint):
  2.     b,g,r=int(imgpoint[0]),int(imgpoint[1]),int(imgpoint[2])
  3.     bwyr=[r*r+g*g+b*b,
  4.           (r-255)*(r-255)+(g-255)*(g-255)+(b-255)*(b-255),
  5.           (r - 255) * (r - 255) + (g - 255) * (g - 255) +b*b,
  6.           (r - 255) * (r - 255) + g*g+b*b]
  7.     return bwyr.index(min(bwyr))
  8. # 原始图片为 168X400X3的位图,目标图片为42X400的位图,每个字节包含4个点的数据,每个l点由两位构成 00:黑  01:白  10:黄  11:红
  9. def img_deal(imgdata):
  10.     desimg=[]
  11.     for i in range(0,imgdata.shape[0]):
  12.         for j in range(0, imgdata.shape[1]):
  13.             sourcedata=imgdata[i,j]
  14.             # print(getcolor(sourcedata))
  15.             desimg.append(getcolor(sourcedata))
  16.     return desimg
  17. # 绘制四色墨水屏能显示的图片
  18. def epd_img(desimg):
  19.     imgpoint=0
  20.     for i in range(0,int(len(desimg)/4)):
  21.         imgpoint=desimg[i*4]<<6 | desimg[i*4+1]<<4 | desimg[i*4+2]<<2 | desimg[i*4+3]
  22.         if i%16==0 and i>0:
  23.             print()
  24.         print('0x%02X' % imgpoint, end=', ')
  25. import cv2
  26. img=cv2.imread("name.bmp",cv2.IMREAD_COLOR)
  27. img_transposed = cv2.transpose(img)
  28. img_transposed=cv2.flip(img_transposed, 0)
  29. cv2.namedWindow("Image")
  30. desimg=img_deal(img_transposed)
  31. # print(len(desimg))
  32. epd_img(desimg)
  33. #显示图片
  34. cv2.imshow("Image", img_transposed)
  35. #暂停运行,防止图片一闪而过
  36. cv2.waitKey (0)
  37. #销毁窗口
  38. cv2.destroyAllWindows()
复制代码
使用python将生成的图片内容,转换为一个数组。
Beetle 树莓派RP2350 使用墨水屏制作一个名牌图5

下位机的代码就比较简单了,将python生成的数据写到屏幕上,就可以完成一个墨水屏名牌的展示了。
  1. #include <SPI.h>
  2. #include "epd3in0g.h"
  3. #include "imagedata.h"
  4. Epd epd;
  5. void setup() {
  6.   // put your setup code here, to run once:
  7.   Serial.begin(115200);
  8.   Serial.print("e-Paper init ");
  9.   if (epd.Init() != 0) {
  10.       Serial.print("e-Paper init failed");
  11.       return;
  12.   }
  13.   Serial.print("White \r\n");
  14.   epd.Clear(white);
  15.   delay(200);
  16.   epd.Init();
  17.   Serial.print("Image \r\n");
  18.   epd.Display(IMAGE_DATA);
  19.   delay(2000);
  20.   Serial.print("Goto Sleep...\r\n");
  21.   epd.Sleep();
  22. }
  23. void loop() {
  24.   Serial.println("hello woeld!");
  25.   delay(2000);
  26. }
复制代码
四、效果展示
墨水屏显示内容还是非常惊艳的。不过红色不够艳丽。开发板掉电后也能正常显示内容。
Beetle 树莓派RP2350 使用墨水屏制作一个名牌图6

Beetle 树莓派RP2350 使用墨水屏制作一个名牌图7


五、源码和视频
下载附件beetle.zip

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail