
博客原文:ESP8266(Non-OS SDK) 驱动 waveshare 2.9 寸墨水屏(一) - 国际哥的独立博客
随着屏幕的阵阵闪烁刷新、黑白字符图案浮现眼前,毕业设计总算有了起色。经历了几个下午的不懈努力总算把墨水屏驱动搞定,点亮的何止是小小的墨水屏,还有我骚动的心呐!一开始还想着从头啃芯片手册造轮子,最后由于时间紧迫 + 能力有限,于是想(tou)到(lan)把微雪提供的 STM32 例程移植到 8266。

由于都是纯 C 的代码,整个过程说不上十分艰辛,但也踩了不少坑:从最初对 8266 硬件 SPI 的不明觉厉,到迫于无奈用 GPIO 软件模拟、最后移植适配官方 STM32 例程,与网上的 Arduino、Lua 实现不同,我是在乐鑫 Non-OS SDK 环境下开发,步骤稍多,特此记录。
开发环境
- SDK:ESP8266_NONOS_SDK-2.1.0 Toolchain:乐鑫标配 VirtualBox + lubuntu 编译环境
- Editor:VS Code / Nodepad++ / 随便你啦
- board: NodeMCU
友情提示:没有接触过 8266 SDK 开发?没事,在正式开始之前,请按照文档《ESP8266 SDK 入门指南》把编译、下载的流程玩一遍即可。
屏幕相关资料
- 产品详情:2.9inch e-Paper Module - Waveshare Wiki
- 用户手册:2.9inch-e-paper-user-manual-cn.pdf
- 数据手册:2.9inch e-Paper Datasheet.pdf
- 例程源码:2.9inch_e-Paper_Module_code.7z
waveshare 2.9 寸黑白墨水屏(模块)介绍

产品参数
电压:3.3 V
通信接口:3-wire SPI、 4-wire SPI
分辨率:296 × 128
显示颜色:黑、白
灰度等级:2
刷新时间:2-3 s
管脚定义
VCC3.3 VGNDGNDDINSPI 通信 MOSI 引脚CLKSPI 通信 SCK 引脚CSSPI 片选引脚(低电平有效)DC数据/命令控制引脚(高电平表示数据,低电平表示命令)RSY外部复位引脚(低电平复位)BUSY忙状态输出引脚(高电平表示忙)
数据显示原理
屏幕通过 SPI 总线与 MCU 连接作为从机使用,通过接受命令/数据完成相应功能。和其他模块相似,墨水屏 SPI 总线上传输的比特位也分为数据和命令两种类型,并根据 DC 引脚电平区分(高电平数据低电平命令)。而其中最重要的数据便是显存了,它决定着屏幕每个像素点的状态,控制显示内容。
2.9 寸墨水屏分辨率为 296 × 128,即宽度有 296 个像素点、高度有 128 个像素点。对应到显存数据就是横向每 8 个点用一个字节表示(1 byte = 8 pixels),一行就包含 296/8 = 37 个字节,共有 128 行。显示方式是从左到右从上到下,如下图所示: