由于需要做一些低功耗的东西,所以最近在尝试玩墨水屏。出于成本考虑(没钱的另一种委婉说法)从咸鱼淘到2块便宜的二手SES 2.66寸三色墨水屏,并使用micropython将其驱动起来,并用字库的方法显示中文。
一.屏幕的驱动
1.硬件连线
买到的屏幕是图上这个样子的,带驱动小板 ,驱动小板的作用是提供给MCU标准的SPI操作接口。
墨水屏与ESP8266的连接方式采用推荐的方式,见下图。


连接没问题就可以测试了。
2.屏幕测试
由于micropython没有这个屏幕的现有驱动,因此拿到手后先使用有现成驱动的arduino环境进行测试,确保屏幕和连线没有问题。
(1)直接刷现成固件测试
卖家提供了编译好的现成的固件,直接使用NodeMCU-PyFlasher刷进去,屏幕上就会有测试画面显示,这是最快的测试方法。现成固件(“2.66测试固件”)下载地址见文末。
(2)使用arduino编译固件测试
下面是arduino下驱动的方法。
arduino的安装不在此述,ESP8266开发板的安装网上有很多教程,由于网速实在很慢,所以我采用的是最懒的使用别人打好的方式安装的。使用的包(“8266_package_3.0.1_arduino.cn.exe“)下载地址见文末。
然后就是把微雪的驱动包导进去,导入方法见“墨水屏使用须知(SES2.66三色为例).docx”,下载地址见文末。导入后需要修改或替换SES2.66b的驱动文件(EPD_2in66b.cpp),文中有叙述,照做就是。
最后编译上传,就应该能看到屏幕有反应了。
二、编写micropython驱动
由于要使用micropython来驱动屏幕,而该屏幕的资料很少,因此我必须研究下arduino下面的驱动程序,以编写相应的python驱动程序。
驱动方法还是主要参考两个部分:一是ariduino下那个EDP_2in66b.cpp,二是微雪的驱动包。
1.初始化
(1)BUSY/RESET引脚状态
由于资料不全,所以我实测了一下,SES2.66b的BUSY引脚高电平为忙,低电平为空闲,所以程序中定义:BUSY = const(1) # 0=idle, 1=busy。
RESET引脚是低电平使模块复位。并且,上电后程序拉低RESET引脚使模块复位后,BUSY引脚会一直处于高电平状态(忙),只有在后续写入POWER ON命令后,BUSY引脚才会变为低电平,这有点坑。
(2)SPI总线初始化
ESP8266只有两个SPI通道,0和1。其中0通道为内部FLASH使用,所以只能用SPI 1。
初始化时,如果不带波特率参数,SPI的总线速度会比较高,高到墨水屏不能接受。你可以测试一下这个:
>>> from machine import SPI
>>> s=SPI(1)
>>> s
HSPI(id=1, baudrate=80000000, polarity=0, phase=0)
>>>
默认波特率是80000000。所以我们需要把波特率降低些,实测10000000可以正常:
e=EPD(spi=SPI(1,baudrate=10000000),cs=Pin(15),dc=Pin(4),rst=Pin(2),busy=Pin(5))
e.init()
(3)初始化命令
直接给出代码吧。
from micropython import const
from time import sleep_ms
import ustruct
import math
# Display resolution
EPD_WIDTH = const(152)
EPD_HEIGHT = const(296)
# Display commands
PANEL_SETTING = const(0x00)
POWER_OFF = const(0x02)
POWER_ON = const(0x04)
BOOSTER_SOFT_START = con

本文介绍了一种低成本的SES 2.66寸三色墨水屏驱动方案,使用micropython实现屏幕驱动并成功显示中文。文章详细记录了硬件连接、SPI总线配置、屏幕初始化过程,并通过自定义函数实现了汉字字模的提取与显示。
最低0.47元/天 解锁文章
1248





