本项目是使用esp8266驱动点亮微雪家的2.13寸墨水屏代码教程 (随缘更新)
在github地址上排版比这里会好看很多, 觉得帮助到你能否点个star~

目录简介

source: 源代码文件

  • font(8,12,16,20,24): 字体格式文件;数字代表字体大小
  • epdpaint: 画布文件;矩形、线段、圆等绘图函数
  • epdif: 引脚定义
  • imagedata: 存放图片矩阵
  • epd2in13_V2: 控制命令

docs: 文档图片文件

前期物品准备

需要准备的硬件物品

  • esp8266板子(屏幕24排线)
  • 24排线墨水屏
  • 老式安卓数据线

需要准备的软件以及代码

  • Arduino IDE

环境搭建

下面我们一起开始从零开始吧

  1. 拿出一块esp8266板子插上老式安卓数据线至电脑USB插口
  2. 打开电脑设备管理器,查看端口(COM和LPT)是否有设备,并记录下来
  • 寻找 端口(COM和LPT) 看是否被识别出端口如:-> USB-SERIAL CH340(COM4)
  • 若电脑无法识别该端口,上搜索平台下载CH340驱动,安装以后基本上就能检测出端口了
  • 出现设备如上述USB-SERIAL CH340(COM4)即可进行下一步
  • 如果实在不行检查一下板子是不是烧了 (●’◡’●)
  1. 打开Arduino IDE
  • 依次点击 文件 -> 首选项 -> 找到附加开发板管理器网站
  • 输入网址 http://arduino.esp8266.com/stable/package_esp8266com_index.json
  • 依次点击 工具 -> 开发板 -> 开发板管理器 -> 搜索esp -> 安装
  1. 开发板定义文件安装完成
  • 在安装中有可能因为科学原因,下载失败等信息报错了使用科学方式重试
  • 重试还是不行以后,找到Arduino IDE下方的调试台,将调试文件翻上去顶上,找到文件地址手动下载
  • 从Arduino IDE依次点击 文件 -> 首选项 从下方找到文件路径如 C:\Users\Yakuho\AppData\Local\Arduino15
  • 将下载的压缩包放至 C:\Users\Yakuho\AppData\Local\Arduino15\staging\packages 目录下
  • 重启Arduino IDE
  • 因为要下载多个安装包,后面出现下载失败,仍然手动下载,放在目录中直到全部下载完毕
  • 进行安装并无报错说明成功
  1. 选择开发板
  • 依次点击 工具 -> 开发板 -> Generic ESP8266 Module
  • 依次点击 工具 -> 开发板 -> Upload Speed -> 115200 (按照板子参数进行设置, 一般都是115200这个波特率)
  • 依次点击 工具 -> 开发板 -> Flash Mode -> QIO
  • 依次点击 工具 -> 开发板 -> Flash Frequency -> 40MHz
  • 依次点击 工具 -> 开发板 -> Erase Flash -> Only Sketch
  • 依次点击 工具 -> 开发板 -> 端口 -> 在第2步查看到的那个端口

开始编程

以下编程都是基于Arduino IDE上进行, 该分支仅是要求点亮屏幕

  1. 在原代码目录下新建一个Ariduino文件 ****.ino

  2. 导入头文件

    #include <SPI.h>
    #include "epd2in13_V2.h"
    #include "epdpaint.h"
    Epd epd;
    
  3. 选择一块区域进行编程

    void setup()
    {// 此区域在硬件中只执行一次
    }void loop()
    {// 此区域在硬件中会重复执行
    }
    
  4. 程序猿老规矩 打印一下hello world

    #include <SPI.h>
    #include "epd2in13_V2.h"
    #include "epdpaint.h"
    Epd epd;void setup()
    {Serial.begin(115200);   // 开启串行通信接口并设置通信波特率, 与环境搭建5. 开发板选择中的Upload Speed一致epd.Clear();            // 屏幕情况epd.Init(FULL);         // 屏幕刷新 FULL全屏 PART部分int all_pixel = 104 * 212 / 8;   // 定义画布大小unsigned char image[all_pixel];  // 定义画布矩阵for (int i = 0; i < all_pixel; i++) {image[i] = 0Xff;       // 初始化画布矩阵 亮度为255=0xff}Paint paint(image, 104, 212);   // 初始化画布对象  width should be the multiple of 8paint.SetRotate(3);             // 设置画布旋转角度paint.DrawStringAt(0, 0, "Hello world", &Font20, 0);  // 输出字符串char s, e;for (int x = 0; x < paint.GetWidth() / 8; x++) {          // 将矩阵与输出相匹配 否则会出现字体反转for (int y = 0; y < paint.GetHeight() / 2; y++) {s = image[x + y * paint.GetWidth() / 8];e = image[x + (paint.GetHeight() - 1 - y) * paint.GetWidth() / 8];image[x + y * paint.GetWidth() / 8] = e;image[x + (paint.GetHeight() - 1 - y) * paint.GetWidth() / 8] = s;}}epd.Display(image);
    }void loop()
    {// 此区域在硬件中会重复执行
    }
    
  5. 找到Arduino IDE 依次点击 项目 -> 上传, 观察下方控制台 安静等待 (ง •_•)ง

    项目使用了 272753 字节,占用了 (28%) 程序存储空间。最大为 958448 字节。
    全局变量使用了28272字节,(34%)的动态内存,余留53648字节局部变量。最大为81920字节。
    esptool.py v3.0
    Serial port COM3
    Connecting....
    Chip is ESP8266EX
    Features: WiFi
    Crystal is 26MHz
    MAC: 3c:71:bf:39:0a:28
    Uploading stub...
    Running stub...
    Stub running...
    Configuring flash size...
    Auto-detected Flash size: 4MB
    Flash params set to 0x0040
    Compressed 276912 bytes to 201576...
    Writing at 0x00000000... (7 %)
    Writing at 0x00004000... (15 %)
    Writing at 0x00008000... (23 %)
    Writing at 0x0000c000... (30 %)
    Writing at 0x00010000... (38 %)
    Writing at 0x00014000... (46 %)
    Writing at 0x00018000... (53 %)
    Writing at 0x0001c000... (61 %)
    Writing at 0x00020000... (69 %)
    Writing at 0x00024000... (76 %)
    Writing at 0x00028000... (84 %)
    Writing at 0x0002c000... (92 %)
    Writing at 0x00030000... (100 %)
    Wrote 276912 bytes (201576 compressed) at 0x00000000 in 17.8 seconds (effective 124.5 kbit/s)...
    Hash of data verified.Leaving...
    Hard resetting via RTS pin...
    
  6. 若发现屏幕闪烁并输出 “Hello world”, 说明你成功入门了 (●’◡’●)

更多详细介绍

  1. 屏幕的输出方向

不知道你是否注意到在 “Hello world” 代码中, 设置了一个屏幕方向代码如:

paint.SetRotate(3);

这是可以让屏幕旋转90°的函数, 并让坐标原点函数也会相应跟着旋转, 下面是图像方向与坐标原点之间的关系

这是可以让屏幕旋转90°的函数, 并让坐标原点函数也会相应跟着旋转, 下面是图像方向与坐标原点之间的关系

  • paint.SetRotate(0)

  • paint.SetRotate(1)

  • paint.SetRotate(2)

  • paint.SetRotate(3)

  1. 屏幕的输出颜色以及像素组成
    本项目使用的2.13寸墨水屏中, 该墨水屏的像素矩阵大小为(212, 104), 控制屏幕输出, 有两种不同的输出代码:
    基于epd函数的输出

      void setup(){Serial.begin(115200);epd.Clear();epd.Init(FULL);int all_pixel = 104 * 212 / 8;      // 定义画布大小unsigned char image[all_pixel];     // 定义画布矩阵for (int i = 0; i < all_pixel; i++) {image[i] = 0x00;       // 将画布置为全黑}/*这里可能会有疑惑为什么画布大小明明是 212 * 104 为什么还要除8注意看下面的数组赋值, 每个数组赋值是0x00, 表示一个数组元素是一个字节即包含8比特的值, 正如所说的屏幕像素是由比特位决定的, 所以只需要 212 * 104 / 8*/Paint paint(image, 104, 212);epd.Display(paint.GetImage());}
    

    基于paint函数的输出

      void setup(){Serial.begin(115200);epd.Clear();epd.Init(FULL);int all_pixel = 104 * 212 / 8;      // 定义画布大小unsigned char image[all_pixel];     // 定义画布矩阵for (int i = 0; i < all_pixel; i++) {image[i] = 0x00;       // 将画布置为全黑}/*在这里仍然需要使用比特形式初始化画布但是初始化以后, 就可以使用paint去进行坐标点的绘图这时的坐标点就是 212 * 104*/Paint paint(image, 104, 212);for (int x = 0; x < 212; x++){for (int y = 0; y < 104; y++){paint.DrawPixel(x, y, 1);  // 逐个坐标进行显示}}epd.Display(paint.GetImage());}
    

    微雪的24排线的墨水屏是有黑白红三种颜色的输出, 不用模式下的显示, 代码上也会有稍微的不同, 其中红色显示的比较特殊, 下面有两种模式的Demo代码:
    黑白输出模式

      void setup(){Serial.begin(115200);epd.Clear();epd.Init(FULL);int all_pixel = 104 * 212 / 8;      // 定义画布大小unsigned char image[all_pixel];     // 定义画布矩阵for (int i = 0; i < all_pixel; i++) {image[i] = 0x00;       // 将画布置为全黑}Paint paint(image, 104, 212);paint.SetRotate(3);paint.DrawFilledCircle(50, 50, 10, 1);  // 画一个白色实心圆epd.Display(paint.GetImage());}
    

    红色输出模式
    红色模式输出比较特殊, 必须先黑白输出模式, 然后将原来白色转红色, 原来黑色转白色

      void setup(){Serial.begin(115200);epd.Clear();epd.Init(FULL);int all_pixel = 104 * 212 / 8;      // 定义画布大小unsigned char image[all_pixel];     // 定义画布矩阵for (int i = 0; i < all_pixel; i++) {image[i] = 0x00;       // 将画布置为全黑}Paint paint(image, 104, 212);paint.SetRotate(3);paint.DrawFilledCircle(30, 50, 10, 0);  // 画一个黑色实心圆paint.DrawFilledCircle(50, 50, 10, 1);  // 画一个白色实心圆epd.Display(paint.GetImage());      // 先黑白模式输出epd.Display_red(paint.GetImage());  // 再红色模式输出epd.show();                         // 必须show一次/*最后的效果是底色是白色, 实心圆变成了红色关于更多红色的还得深入探究才知道...*/}
    

更多玩法

使用图片输出到屏幕上

  1. 设计图片(像素尺寸212, 104), 设置想要横向还是纵向显示

  2. 使用tools里面的Python代码将图像转模 ()

    # path: 图片相对路径
    # rotage: 当前图片是设计在哪个角度显示的 (角度可参考上面 更多详细介绍 -> 1. 屏幕的输出方向)
    if __name__ == "__main__":convert(path='demo.png', rotage=3)
    
  3. 将生成代码复制到imagedata.cpp

    #include "imagedata.h"
    #include <avr/pgmspace.h>unsigned char IMAGE_DATA[] PROGMEM = {
    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    ......
    0xff, 0xff, 0xff, 0xff, };
    
  4. 在Arduino IDE上传代码 输出图像

    void setup()  // 此区域代码硬件只执行一次
    {Serial.begin(115200);epd.Clear();epd.Init(FULL);epd.Display(IMAGE_DATA);epd.Sleep();
    }
    
  5. 输出效果

【玩玩硬件】esp8266驱动墨水屏相关推荐

  1. MSP430F5529 DriverLib 库函数学习笔记(十)SPI驱动墨水屏

    目录 上机实战 SPI 驱动 墨水屏 墨水屏介绍 电子纸的分类 电泳型电子纸技术详解 原理 结构 优势与不足 实验电路介绍 程序分析 引脚初始化 SPI模块初始化 发送和接收 全部源代码 main.c ...

  2. 嵌入式开发-STM32硬件SPI驱动TFT屏

    嵌入式开发-STM32硬件SPI驱动TFT屏 这次用到的TFT屏 CubeMX设置 代码编写 增加的内容 需要注意问题 代码下载 这次用到的TFT屏 现在的TFT屏幕已经很便宜了,65536色屏幕,2 ...

  3. ESP8266驱动电子墨水屏显示图片:图像抖动取模

    硬件设备 ESP8266 Epaper_2.13 b/w(汉朔电子价签) SPI驱动板 图片显示 这里墨水屏的驱动程序采用微雪的示例程序进行驱动 微雪资料:ePaper-2.13. 这里说明一下在进行 ...

  4. 网红模块ESP8266与墨水屏e-Paper 的结合,实现网络刷新内容。

    话不多说先上图欣赏一下.由一个ESP8266搭建的驱动模块+一块黑白黄三色墨水屏. ESP8266拥有超低功耗的性能,可以说是移动设备和可穿戴电子产品的优先考虑的通讯模块之一. 和墨水屏的低功耗特性好 ...

  5. esp8266时钟_ESP8266(Non-OS SDK) 驱动 waveshare 2.9 寸墨水屏(二)- 程序移植、修改与测试

    开始移植 上一篇文章简单介绍了了墨水屏原理.例程代码以及移植工作的可行性.这一步的目的是把前面在 STM32 跑的程序,完整地搬到 esp8266 上,达到相同的运行显示效果,Let's get st ...

  6. yota3墨水屏设置_使用ESP32驱动电子墨水屏

    未经私信同意禁止转载! 一.简介 显示技术发展很快,高中的时候大家还在学习阴极射线管显示,天天在算电子的轨迹.而如今随处可见LED显示液晶显示. 今天给大家介绍一下电子墨水屏.目前生活中比较常见的是在 ...

  7. arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏

    关注.星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在进行后续的ESP8266学习前,我们先来对OLED屏进行驱动,为后续学习提供直观的信息显示. 1. 安装驱动库 在之前 ...

  8. stm32驱动微雪墨水屏1.54inch e-Paper V2

    我一起驱动墨水屏 一.墨水屏相关基础(摘自微雪官方) 二.干起来 PART2 配置I/O PART2 底层硬件接口必要的调用函数 PART3 功能函数 PART4 应用函数 三.应用 注意 **[代码 ...

  9. AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

最新文章

  1. linux系统怎样连手机,Linux下手机与蓝牙的连接配置
  2. 脑机互动可提高行动能力
  3. agx 安装ros opencv_怎样在ROS下实现基于YOLO的px4无人机目标检测?
  4. 6.1 从分析到设计
  5. 手把手教你用ECharts画柱状图
  6. VBS教程:函数-FormatPercent 函数
  7. bzoj 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏(floyd)
  8. callback的实现
  9. linux Socket send与recv函数详解
  10. Nginx在Linux下的安装部署
  11. 微信小程序代码最大限制2M的解决方案
  12. Ansible+Redfish+Idrac管理DELL服务器
  13. java偏向锁_Java锁事之偏向锁
  14. 梦参老和尚:糊涂人念〈大悲咒〉往生的故事
  15. Istio对接虚拟机
  16. ProFTPD对接LDAP
  17. 两个实体不是同个类同名字段赋值问题
  18. Python介绍(15)
  19. Havok VS PhysX 漫谈物理加速世界!
  20. MySQL 表中 MUL代表什么含义

热门文章

  1. 【基础篇】————9、隐匿攻击之Twitter
  2. Android 心形图片心形ImageView、带边框的的心形图片和圆形图片
  3. Sketch使用教程(一)
  4. [bzoj3141][HNOI2013]旅行
  5. 用大数据建设“安全”生态 亿赛通出席安徽省通信学会大数据学术交流会
  6. iPhone7 A10处理器性能竟这么强大 吊打骁龙820
  7. QQ可以用十六进制登录哦
  8. 男戴观音女戴佛有依据吗?
  9. microsoft outlook “未读邮件”收藏夹被误删
  10. 计算机考验数学 英语分数要求,2020考研数学一110分,能过985大学复试线?通过这3所大学来预测...