包包包子 发表于 2024-4-12 08:33:04

FireBeetle 2 ESP32 C6开发板 最佳伴侣之墨水屏(一)图像模式

本帖最后由 包包包子 于 2024-4-12 10:29 编辑

      FireBeetle 2ESP32-C6是DFRobot新出品的一款基于ESP32-C6芯片设计的低功耗物联网主控板。它除了通过支持Wi-Fi 6的目标唤醒时间(TWT,Target Wake Time)技术来有效降低设备功耗、延长电池使用时间之外,还集成了CN3165锂电池充电管理芯片,可以直接通过太阳能板为锂电池进行充电,有效的解决了部署在阳台、窗户、屋顶等户外无电源线的场景带来的供电问题。所以特别适合我们开发电池供电的户外智能应用。但是作为一套电池供电的户外系统,能耗管理肯定是重中之重,所有能节能的环节我们都要尽量考虑到。显示模块作为智能应用重要的人机界面之一,我也查了一下给这块主控板推荐的几款液晶显示屏的能耗:

液晶显示屏型号全屏点亮电流(3.3V)维持显示电流(3.3V)
1.54" 240x240 IPS广视角TFT约17mA约17mA
1.8”128x160 IPS TFT LCD 约22mA约22mA
2.0" 320x240 IPS广视角TFT约29mA约29mA
2.8" 320x240 IPS TFT电阻触摸屏43.5mA43.5mA
3.5" 480x320 IPS TFT电容触摸屏48.1mA48.1mA


      从上表可以看出,虽然液晶屏的点亮电流不算特别大,但是如果维持持续显示的话,能耗还是不能被忽视的。再加上液晶屏在户外阳光强烈的环境下由于背光亮度不足而难以看清,我就将注意力转向近些年开始在DIY圈里面出现的墨水屏。电子墨水屏,是采用“微胶囊电泳显示”技术显示图像的显示屏。它的基本原理是悬浮在液体中的带电纳米粒子受到电场作用而产生迁移。因为是靠反射环境光来显示图案,所以不需要背光,而且即使是在阳光底下,墨水屏也能清晰可视,可视角度几乎达到了 180°。而且墨水屏在掉电状态下可以保持显示状态,因此基本上仅在显示内容刷新时才产生能耗。上面这些特点使它在户外低刷新低功耗领域有很大的应用潜力。说干就干,本着DIYer变废为宝的精神,我立即从某宝上淘了一个红白黑三色电子标签,费了九牛二虎之力才在不压碎里面墨水屏的前提下把它的外壳撬开。里面的墨水屏型号是HE213AC6RF,我在网上查了一下,关键参数如下:产品尺寸:2.13寸;分辨率:250x122;显示颜色:黑白红;工作电压 :3.3V。最关键的工作电流仅3mA,而且不刷新时的电流仅1uA,等于不耗电了。而且在阳光下显示非常清晰,这就是我想要的理想户外电池供电的显示屏。

这块屏采用的是标准的24pin 4-lineSPI 接口,这里借用一下佳显的接口定义表:这些接口主要分两类:墨水屏供电驱动端口和显示数据控制端口。供电驱动部分我直接用了买的现成的带驱动电路的接口板:
而和ESP32-C6连接的数据控制端口主要是这几根:GND: GNDVCC: 3.3V电源SCL:SPI 串口通信时钟信号线。SDI:SPI 串口通信数据信号线。RES:墨水屏复位信号,低电平有效。DC: 数据/命令控制引脚(高电平表示数据,低电平表示命令)CS: SPI 片选引脚(低电平有效)BUSY:电子纸忙信号。
我们如图接线:硬件准备好之后,我们再来准备软件部分。尝试了多个驱动程序之后,我发现佳显的驱动程序可以用在这块屏幕上,所以我们在Arduino IDE中设定好ESP32-C6之后,就先来定义引用库:#include <SPI.h>#include"Display_EPD_W21_spi.h"#include "Display_EPD_W21.h"#include "Ap_29demo.h"
然后在Setup 中设置引脚定义和SPI接口参数void setup() {pinMode(4, INPUT);//BUSY                           pinMode(16, OUTPUT); //RES pinMode(17, OUTPUT); //DC   pinMode(5, OUTPUT); //CS   SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0)); SPI.begin ();}
然后就是在Loop中写入屏显命令:EPD_HW_Init(); EPD_WhiteScreen_ALL(gImage_BW1,gImage_RW1);EPD_DeepSleep(); 这三条命令分别是:1 屏幕初始化;2 全刷显示图像;3 进入深度睡眠,这句一定要写。对于墨水屏来说,如果不在显示之后进入睡眠模式(显示的画面不会消失),会缩短墨水屏寿命。
主程序命令写好之后,我们就要在Ap_29demo.h之中放入我们准备显示的图片。这次我们以DFRobot的logo为例:首先我们要用绘图软件先制作一个和墨水屏分辨率完全一样的空白黑白图片,这里是250*122像素。然后在这个空白图片中加入所需的图片和文字。得到下图:需要注意的是,如果是黑白两色的墨水屏,一张黑白图片就可以了;但对于三色墨水屏来说,需要将黑色和红色的内容分开制作两张黑白图片(红色的内容也是用黑色表示的)。像是这样:黑白内容:红白内容:然后就要用到Image2Lcd这个软件将上面准备好的图片转换为程序中需要的位图代码。转换的方法如下:1.      运行Image2Lcd软件,将红框内的参数严格按照下图的内容设置好;2.      打开刚才准备好的黑白内容图片;3.      对于这块屏幕,注意要把“颜色反转”的选项选上;4.      然后选择保存,将位图代码储存为C文件。5.      对于红白内容的第二张图片,按照同样的步骤操作。然后在Ap_29demo.h之中找到gImage_BW1和gImage_RW1两个字段,将对应C文件的内容复制过去覆盖原有内容。这样程序就写好了,接下来接上开发板,Upload结束后墨水屏开始闪烁刷新,大约十几秒后,我们就得到一副断电仍然能保持显示的图像啦。



页: [1]
查看完整版本: FireBeetle 2 ESP32 C6开发板 最佳伴侣之墨水屏(一)图像模式