前言
前几日逛淘宝发现一个1.54寸双色墨水屏,屏幕+驱动只要16,果断下单拿来玩玩
[第二天就涨价到了26了hhhhhhhhhhhc]
如果还有人感兴趣的话在这:某宝链接
arduino
接线
在微雪官网资料找到接线图:
虽然和我的引脚名称不太一样,但是不影响理解和使用。
程序
当然也是在微雪官网下载的资料,注释都是英文而且一些有点问题,这里整理一下
微雪资料下载链接
由于我的屏幕是1.54寸,所以在arduino
的epd1in54
文件夹内
主要需要改动的是epd1in54.ino
和imagedata.cpp
imagedata.cpp
这个文件要修改的是那个保存图片的数组。图片转换数组可以用微雪提供的工具:图片取模软件
打开后是这样:
首先修改图片尺寸,我的屏幕是200x200.
然后左上角打开,选择一张图片,修改参数后保存为c语言数组。
打开保存的数组文件可以看见:
用数组数据替换掉原来文件里的数据
需要注意的是复制的时候跳过数组第一行,从第二行开始复制,否则最后显示的图片会发生偏移
epd1in54.ino
废话不多说直接上代码和注释:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <SPI.h> #include "epd1in54.h" #include "epdpaint.h" #include "imagedata.h" #define COLORED 0 #define UNCOLORED 1
unsigned char image[1024]; Paint paint(image, 0, 0);
Epd epd; void setup() { Serial.begin(115200); Serial.print("e-Paper init "); if (epd.Init(lut_full_update) != 0) { Serial.print("e-Paper init failed"); return; } epd.ClearFrameMemory(0xFF); epd.DisplayFrame(); epd.ClearFrameMemory(0xFF); epd.DisplayFrame(); paint.SetRotate(ROTATE_0); paint.SetWidth(200); paint.SetHeight(24); paint.Clear(COLORED); paint.DrawStringAt(30, 4, "Hello world!", &Font16, UNCOLORED); epd.SetFrameMemory(paint.GetImage(), 0, 10, paint.GetWidth(), paint.GetHeight()); paint.Clear(UNCOLORED); paint.DrawStringAt(0, 2, "e-Paper Demo", &Font24, COLORED); epd.SetFrameMemory(paint.GetImage(), 0, 30, paint.GetWidth(), paint.GetHeight()); paint.SetWidth(64); paint.SetHeight(64); paint.Clear(UNCOLORED); paint.DrawRectangle(0, 0, 40, 50, COLORED); paint.DrawLine(0, 0, 40, 50, COLORED); paint.DrawLine(40, 0, 0, 50, COLORED); epd.SetFrameMemory(paint.GetImage(), 16, 60, paint.GetWidth(), paint.GetHeight()); epd.DisplayFrame(); delay(8000); epd.SetFrameMemory(IMAGE_DATA); epd.DisplayFrame(); epd.SetFrameMemory(IMAGE_DATA); epd.DisplayFrame(); epd.Sleep(); } void loop() { }
|
这里我删掉了原来资料的画图部分,只保留了字符串显示,画图直接看微雪文档就好
但是还有一个问题,资料中没有关于局部刷新的demo,只在文档里提到了局部刷新的初始化方式。这里暂时留坑。
树莓派