Arduino框架下ESP32/ESP8266+合宙1.54“ 电子墨水屏(e-paper)驱动显示示例

本文主要是介绍Arduino框架下ESP32/ESP8266+合宙1.54“ 电子墨水屏(e-paper)驱动显示示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Arduino框架下ESP32/ESP8266+合宙1.54" 电子墨水屏(e-paper)驱动显示示例


  • 🌼显示效果展示;
    在这里插入图片描述
    在这里插入图片描述

📓合宙1.54" 电子墨水屏

  • 有关合宙1.54"电子墨水屏的介绍资料:https://wiki.luatos.com/peripherals/eink_1.54/hardware.html
合宙给出的驱动示例有2个,不过都是基于Lua语言的示例程序代码,对于Arduino框架下的驱动显示只能另外找资料,目前有关电子墨水屏资料可以找到的只有两个地点:
  • GooDisplay https://www.good-display.cn/product/92/
  • waveshare(微雪) https://www.waveshare.net/wiki/1.54inch_e-Paper_Module
    在官方所提供的资料当中并未看到我想要的esp32的驱动示例代码,本以为修改一下引脚定义即可现实驱动。实际上是不行的,编译这一关都过不了。只能另辟蹊径了。

在GitHub上找到一个贡献者提供了一个有关waveshare1.54"给ESP32esp8266显示的项目。

  • GitHub:https://github.com/Bodmer,项目仓库位置:https://github.com/Bodmer/EPD_Libraries

  • 驱动demo位置:
    在这里插入图片描述

直接编译还不行,会报找不到头文件,需要将epdlin54目录下方的文件拷贝到项目文件夹下面:
在这里插入图片描述
在这里插入图片描述

🔨修改引脚定义

  • 🔧epdif.h文件内找到有关引脚定义的地方,ESP32如下修改:
//      Display       GPIO   ESP32 pin
#define BUSY_PIN        25 // D1
#define RST_PIN         26 // D2
#define DC_PIN          27 // D3
#define CS_PIN         15 // D4
  • 🌿ESP82666默认无需修改:
// Pin definition for ESP8266 (e.g. NodeMCU)
// Connect display CLK signal to GPIO 14 (Node MCU pin D5)
// Connect display DIN signal to GPIO 13 (Node MCU pin D7)
// Connect display 3.3V to NodeMCU 3V3
// Connect display GND to NodeMCU GND
#define BUSY_PIN        5 // D1
#define RST_PIN         4 // D2
#define DC_PIN          0 // D3
#define CS_PIN          2 // D4

📗接线说明

  • 🌿针对ESP32接线说明:
 ESP32引脚定义:
BUSY -> 25 || RES -> 26 || DC -> 27 || CS -> 15 || SCL -> 18 || SDA -> 23 ||
epd1in54 demo
SCL_PIN--18   
MOSI(SDA)_PIN--23
CS_PIN--15
RST(RES)_PIN-- 26
DC_PIN--27
BUSY_PIN--25
  • 🌿针对ESP8266接线说明,参考上面的宏定义内容接线即可。

📝主程序代码

/***  @filename   :   epd1in54-demo.ino*  @brief      :   1.54inch e-paper display demo*  @author     :   Yehui from Waveshare**  Copyright (C) Waveshare     September 5 2017** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documnetation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to  whom the Software is* furished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** ESP32引脚定义:* BUSY -> 25 || RES -> 26 || DC -> 27 || CS -> 15 || SCL -> 18 || SDA -> 23 ||**/#include <SPI.h>
#include "epd1in54.h"
#include "epdpaint.h"
#include "imagedata.h"#define COLORED     0
#define UNCOLORED   1/*** Due to RAM not enough in Arduino UNO, a frame buffer is not allowed.* In this case, a smaller image buffer is allocated and you have to * update a partial display several times.* 1 byte = 8 pixels, therefore you have to set 8*N pixels at a time.*/
unsigned char image[1024];
Paint paint(image, 0, 0);    // width should be the multiple of 8 
Epd epd;
unsigned long time_start_ms;
unsigned long time_now_s;void setup() {// put your setup code here, to run once:Serial.begin(9600);if (epd.Init(lut_full_update) != 0) {Serial.print("e-Paper init failed");return;}/** *  there are 2 memory areas embedded in the e-paper display*  and once the display is refreshed, the memory area will be auto-toggled,*  i.e. the next action of SetFrameMemory will set the other memory area*  therefore you have to clear the frame memory twice.*/epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = blackepd.DisplayFrame();epd.ClearFrameMemory(0xff);   // bit set = white, bit reset = blackepd.DisplayFrame();paint.SetRotate(ROTATE_0);//指定显示区域paint.SetWidth(200);paint.SetHeight(28);/* For simplicity, the arguments are explicit numerical coordinates */paint.Clear(COLORED);paint.DrawStringAt(30, 2, "Perseverance", &Font16, UNCOLORED);//位置,内容epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight());paint.Clear(UNCOLORED);//白色区域内容显示paint.DrawStringAt(30, 2, "e-Paper Demo", &Font16, COLORED);epd.SetFrameMemory(paint.GetImage(), 0, 16, paint.GetWidth(), paint.GetHeight());paint.Clear(COLORED);paint.DrawStringAt(20, 2, "Hello world!", &Font16, UNCOLORED);//位置,内容epd.SetFrameMemory(paint.GetImage(), 0, 32, 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());//显示位置paint.Clear(UNCOLORED);paint.DrawCircle(32, 32, 30, COLORED);//绘制圆epd.SetFrameMemory(paint.GetImage(), 120, 60, paint.GetWidth(), paint.GetHeight());//显示位置paint.Clear(UNCOLORED);paint.DrawFilledRectangle(0, 0, 40, 50, COLORED);//填充矩形epd.SetFrameMemory(paint.GetImage(), 16, 130, paint.GetWidth(), paint.GetHeight());//显示位置paint.Clear(UNCOLORED);paint.DrawFilledCircle(32, 32, 30, COLORED);//填充圆epd.SetFrameMemory(paint.GetImage(), 120, 130, paint.GetWidth(), paint.GetHeight());//显示位置epd.DisplayFrame();//显示内容delay(2000);if (epd.Init(lut_partial_update) != 0) {Serial.print("e-Paper init failed");return;}/** *  there are 2 memory areas embedded in the e-paper display*  and once the display is refreshed, the memory area will be auto-toggled,*  i.e. the next action of SetFrameMemory will set the other memory area*  therefore you have to set the frame memory and refresh the display twice.*/epd.SetFrameMemory(IMAGE_DATA);epd.DisplayFrame();epd.SetFrameMemory(IMAGE_DATA);epd.DisplayFrame();time_start_ms = millis();
}void loop() {// put your main code here, to run repeatedly:time_now_s = (millis() - time_start_ms) / 1000;char time_string[] = {'0', '0', ':', '0', '0', '\0'};time_string[0] = time_now_s / 60 / 10 + '0';time_string[1] = time_now_s / 60 % 10 + '0';time_string[3] = time_now_s % 60 / 10 + '0';time_string[4] = time_now_s % 60 % 10 + '0';paint.SetWidth(32);paint.SetHeight(96);paint.SetRotate(ROTATE_270);paint.Clear(UNCOLORED);paint.DrawStringAt(0, 4, time_string, &Font24, COLORED);epd.SetFrameMemory(paint.GetImage(), 80, 72, paint.GetWidth(), paint.GetHeight());epd.DisplayFrame();delay(500);
}

📚驱动示例源码

  • 🌿针对已修改的ESP32驱动代码:
链接:https://pan.baidu.com/s/1mCCXOVrYkKJfQXeAonkz7Q 
提取码:55dh
  • 🌿针对ESP8266驱动代码:
链接:https://pan.baidu.com/s/1ODbJHVzT7i2fVYRhcVDyDg 
提取码:qqbr

这篇关于Arduino框架下ESP32/ESP8266+合宙1.54“ 电子墨水屏(e-paper)驱动显示示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/300390

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟