PlatformIO中ESP8266使用GxEPD库和U8G2库驱动 2.9寸黑白墨水屏显示中文

Content

  • 0. 前言
  • 1. 安装platformIO环境
  • 2. 新建工程
  • 3. 添加外部库
  • 4. 修改U8g2_for_Adafruit_GFX库
  • 5. 代码和烧录

0. 前言

墨水屏是黄鱼淘的,效果还不错。

U8G2库一直编译不进去,显示汉字始终不太美观,个人一直不太喜欢汉字取模的方法,过于累赘且不美观,所以探索了以下优化办法。

开发环境:vscode PlatformIO 框架
操作系统:Windows10 专业版
开发板:ESP8266

1. 安装platformIO环境

参考以下博客安装platformIO插件:
platformIO环境安装

如果新建工程速度慢或下载速度慢,使用以下方法来加速:
解决PlatformIO下载速度慢

2. 新建工程

点击新建工程:
在这里插入图片描述
工程名可以随便起,但是芯片和框架一定要选对:

ESP-12E和ESP-12F都是选相同的ESP-12E,都是同样的4M内存,但布线方式不同,ESP-12F在ESP-12E的基础上重新布线,目的是为了增强信号。
在这里插入图片描述

如果这一步一直转圈圈,这是下载编译工具链慢导致,尝试参考以下文章解决:
解决PlatformIO下载速度慢

在这里插入图片描述

新建完工程的目录结构如下图所示:
在这里插入图片描述
其中:

  • .vscode:文件夹存放vscode配置文件,不必过多理会。
  • .pio:通过platformIO下载的库会放入此文件夹中 /芯片 目录中,我的芯片选择是 esp12e,所以我添加的库会存放至 ./pio/esp12e 中,有些如 lvgl 的库是需要做编译设置的,需要时在这边查看。
  • src:存放main.cpp,这是我们主要编写代码的地方。
  • include:技术拙劣,目前没用到还不清楚
  • lib:存放我们自己编写的库,需要放进去并且在用到的地方声明。
  • platformio.ini:这是一个很重要的配置文件,我们添加库和修改编译项目需要在这个地方修改。

3. 添加外部库

现在工程已经新建完成,接下来添加库。

懒人方法:

注释原来的全部内容,加上我的内容

[env:esp12e]
platform = espressif8266
board = esp12e
framework = arduino
lib_deps = olikraus/U8g2_for_Adafruit_GFX@^1.8.0zinggjm/GxEPD2@^1.5.4

在这里插入图片描述
按下Ctrl + S 即可开始下载第三方库,其中下载的库为 GxEPDU8g2_for_Adafruit_GFX

正常方法:

正常来说应该要学会自己如何添加自己需要的库:
在这里插入图片描述
点进GxEPD注意!!! 不要点错为 GxEPD2,二者有差别。
GxEPD2 貌似并不支持ssd1608,所以理论上不能直接选,需要在配置文件中找能替换的IC,目前找不到,先不考虑。

接下来添加进工程:

在这里插入图片描述

选择工程
在这里插入图片描述

等待即可。

U8g2_for_Adafruit_GFX库也是这样操作,将其添加进去。

4. 修改U8g2_for_Adafruit_GFX库

如果不修改库内容,后续会引发错误,导致内存过大无法编译通过。

所以这里使用 甘草酸不酸 修改过的库,感谢开源者做出的贡献:
甘草酸不酸-U8G2-gitee

将这个文件下载下来并且解压:
在这里插入图片描述

复制解压出来的库:

在这里插入图片描述

在这里插入图片描述

进入 .pio\libdeps\esp12e ,粘贴:
在这里插入图片描述
然后库的修改就做好了。

如果你动手能力很强不怕出错,你可以尝试不用别人修改的库:
在.pio\libdeps\esp12e\U8g2_for_Adafruit_GFX\src\u8g2_fonts.h添加

#if defined(ESP8266)
#define U8X8_FONT_SECTION(name) attribute((section(".text." name)))
#endif

\.pio\libdeps\esp12e\U8g2_for_Adafruit_GFX\src\U8g2_for_Adafruit_GFX.cpp添加

#if defined(ESP8266)
uint8_t u8x8_pgm_read_esp(const uint8_t * addr)
{uint32_t bytes;bytes = (uint32_t)((uint32_t)addr & ~3);return ((uint8_t*)&bytes)[(uint32_t)addr & 3];
}
#endif

5. 代码和烧录

现在开始在main.cpp中编程,在第二、第三行中修改你的墨水屏文件:

#include <GxEPD.h>
#include <GxGDEW029T5/BitmapExamples.h>      // 2.9" b/w IL0373
#include <GxGDEW029T5/GxGDEW029T5.h>      // 2.9" b/w IL0373// FreeFonts from Adafruit_GFX
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>#include <U8g2_for_Adafruit_GFX.h>#if defined(ESP8266)
GxIO_Class io(SPI, /*CS=D8*/ SS, /*DC=D2*/ 4, /*RST=D4*/ 2); 
GxEPD_Class display(io, /*RST=D4*/ 2, /*BUSY=D1*/ 5); #endifU8G2_FOR_ADAFRUIT_GFX u8g2Fonts; //初始化 U8G2 对象void fun();void setup()
{display.init(115200); // enable diagnostic output on Serialdisplay.setRotation(3);u8g2Fonts.begin(display);                        // 将u8g2过程连接到Adafruit GFX//u8g2Fonts.setFontMode(1);                        // 使用u8g2透明模式(这是默认设置)u8g2Fonts.setFontDirection(0);      u8g2Fonts.setForegroundColor(GxEPD_BLACK);             // 设置前景色u8g2Fonts.setBackgroundColor(GxEPD_WHITE);             // 设置背景色//u8g2Fonts.setFont(chinese_gb2312);display.setTextColor(GxEPD_BLACK);u8g2Fonts.setFont(u8g2_font_wqy16_t_gb2312a); // select u8g2 font from here: https://github.com/olikraus/u8g2/wiki/fntlistall
}void loop()
{display.drawPaged(fun);delay(5000);
}void fun()
{const char* name = "FreeMonoBold9pt7b";const GFXfont* f = &FreeMonoBold9pt7b;display.fillScreen(GxEPD_WHITE);display.setTextColor(GxEPD_BLACK);display.setFont(f);//设置字体display.setCursor(0, 0);//设置游标u8g2Fonts.setCursor(0, 128/2);u8g2Fonts.println("人不能同时拥有青春和对青春的感受.");
}

编译并烧录后,是这样的结果:

黄色是警告,暂时忽略
在这里插入图片描述

这是资源使用情况,非常的清晰直观,还剩下很多可以供我们操作:
在这里插入图片描述

烧录进去后,是这个效果:
在这里插入图片描述

测试后一行可以显示 18个汉字+1个标点符号,共八行,标点建议使用英文标点,如中文逗号无法显示,但中文句号可以显示并且还不错。

人不能同时拥有青春和对青春的感受,且行且珍惜!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RabbitMQ】RabbitMQ高级:死信队列和延迟队列

目录 设置TTL&#xff08;过期时间&#xff09;概述RabbitMQ使用TTL原生API案例springboot案例 死信队列概述原生API案例springboot案例 延迟队列概述插件实现延迟队列安装插件代码 TTL实现延迟队列实现延迟队列优化 设置TTL&#xff08;过期时间&#xff09; 概述 在电商平台…

Komodor:Kubernetes 监控工具全面指南

为了方便起见&#xff0c;Komodor 提供了一个简单的 Web 界面&#xff0c;以帮助您监控 Kubernetes 集群的状态。它拥有付费和免费增值计划&#xff0c;除了在出现问题时通知用户外&#xff0c;还拥有一系列方便的工具&#xff0c;用于跟踪和管理集群中部署的资源的状态。让我们…

计算机网络 应用层

文章目录 应用层域名系统 DNS域名系统概述互联网的域名结构域名服务器 文件传送协议FTP 概述FTP 的基本工作原理简单文件传送协议 TFTP 远程终端协议 TELNET万维网 WWW统一资源定位符 URL超文本传送协议 HTTP万维网的信息检索系统 电子邮件电子邮件概述简单邮件传送协议 SMTP邮…

2024年机器人和人工智能将通过4种方式改变行业

文 | BFT机器人 前言&#xff1a; 2023年是人工智能界充满创造性和突破性的一年&#xff0c;包括生成式人工智能在内的人工智能 (AI) 技术的出现引起了全球的关注并占据了头条新闻。然而&#xff0c;生成式人工智能在企业中的应用仍处于早期阶段&#xff0c;如何最好地利用这项…

大物②练习题解

1.【单选题】关于磁场中磁通量&#xff0c;下面说法正确的是&#xff08; D&#xff09; A、穿过闭合曲面的总磁通量不一定为零 B、磁感线从闭合曲面内穿出&#xff0c;磁通量为负 C、磁感线从闭合曲面内穿入&#xff0c;磁通量为正D、穿过闭合曲面的总磁通量一定为零 磁感线从…

“轻松粘贴,高效办公:自动粘贴文本技术让您事半功倍

"在快节奏的现代工作中&#xff0c;时间就是金钱。使用自动粘贴文本技术&#xff0c;让您告别繁琐的手动操作&#xff0c;提高工作效率。一键粘贴&#xff0c;释放您的双手&#xff0c;让您专注于创作和思考。让工作更高效&#xff0c;生活更精彩&#xff01;" 首先…

广告投放场景中ABtest分析的评价、优化和决策建议

目录 写在开头1. AB测试基础知识1.1 AB测试概述1.2 原理和流程1.3 广告领域中的AB测试应用 2. 评价广告投放中的AB测试2.1 关键指标选择与解释2.2 统计学方法应用 3. AB测试分析中的常见问题与解决方案3.1 样本偏差3.2 季节性影响3.3 测试时长选择3.4 结果误解与分析失误 4. 优…

《TrollStore巨魔商店》TrollStore2安装使用教程支持IOS14.0-16.6.1

TrollStore(巨魔商店) 简单的说就相当于一个永久的免费证书&#xff0c;它可以给你的iPhone和iPad安装任何你想要安装的App软件&#xff0c;而且不需要越狱,不用担心证书签名过期的问题&#xff0c;不需要个人签名和企业签名。 支持的版本&#xff1a; TrollStore安装和使用教…

Markdown 流程图绘制详解

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

Python图像处理实战:使用PIL库批量添加水印的完整指南【第27篇—python:Seaborn】

文章目录 1. 简介2. PIL库概述3. PIL库中涉及的类4. 实现原理5. 实现过程5.1 原始图片5.2 导入相关模块5.3 初始化数据5.4 水印字体设置5.5 打开原始图片并创建存储对象5.6 计算图片和水印的大小5.7 选择性设置水印文字5.8 绘制文字并设置透明度5.9 遍历获取图片文件并调用绘制…

超简单的node爬虫小案例

同前端爬取参数一样&#xff0c;输入三个参数进行爬取 注意点也一样&#xff1a; 注意分页的字段需要在代码里面定制化修改&#xff0c;根据你爬取的接口&#xff0c;他的业务规则改代码中的字段。比如我这里总条数叫total&#xff0c;人家的不一定。返回的数据我这里是data.r…

内存泄漏检测方式

一 、 日志记录 通过宏定义重载了 malloc 和 free 函数&#xff0c;以在分配和释放内存的时候记录一些信息&#xff0c;包括文件名和行号&#xff0c;并将这些信息写入到相应的文件中。然后在 main 函数中演示了使用这些宏进行内存分配和释放。 _malloc 函数&#xff1a; 在分配…

基于java web的机票管理系统设计与实现设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

中国康复辅助器具协会脊柱侧弯康复技术委员会成立大会圆满召开

2024年1月13日,由中国康复辅助器具协会主办,中国康复辅助器具协会脊柱侧弯康复辅助器具技术专业委员会承办,北京蓝田医疗设备有限公司协办,中国康复辅助器具协会脊柱侧弯康复辅助器具技术专业委员会成立大会暨脊柱侧弯康复辅助器具技术交流会在北京市山西大厦隆重召开。本次会议…

Linux -- firewalld的富语言规则

1. Firewalld支持两种类型的NAT&#xff1a;IP地址伪装和端口转发。 &#xff08;1&#xff09;IP地址伪装 地址伪装&#xff08;masquerade)&#xff1a;通过地址伪装&#xff0c;NAT 设备将经过设备的包转发到指定接收方&#xff0c;同时将通过的数据包的源地址更改为其自己的…

基于SSM的流浪动物救助网站的设计与实现-计算机毕业设计源码82131

摘 要 随着生活水平的持续提高和家庭规模的缩小&#xff0c;宠物已经成为越来越多都市人生活的一部分&#xff0c;随着宠物的增多&#xff0c;流浪的动物的日益增多&#xff0c;中国的流浪动物领养和救助也随之形成规模&#xff0c;同时展现巨大潜力。本次系统的是基于SSM框架的…

C语言:底层剖析——函数栈帧的创建和销毁

一、究竟什么是函数栈帧 C语言的使用是面向过程的&#xff0c; 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以了。所以C语言的程序都是以函数作为基本单位的&#xff0c;如果能够深入理解…

全光谱护眼灯有哪些?寒假护眼台灯推荐

全光谱指的是包含了整个可见光谱范围以及部分红外和紫外光的光线。通常的白炽灯或荧光灯只能发出有限范围内的光波&#xff0c;而全光谱台灯通过使用多种类型的LED灯或荧光灯管来产生更广泛的光谱。这样的光谱更接近自然光&#xff0c;能够提供更真实的颜色还原和更好的照明效果…

【MFC】学生成绩管理系统(期末项目)

如果需要代码请评论区留言或私信 课程设计具体实现 数据库设计 E-R图 关系模式 教师(工号&#xff0c;姓名&#xff0c;学院) 主键(工号)学生(学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;班级&#xff0c;专业&#xff0c;学分) 主键(学号)课程(课程…

element-ui el-table表格勾选框条件禁用,及全勾选按钮禁用, 记录

项目场景&#xff1a; 表格的部分内容是可以被勾选的&#xff0c;部分内容是不可以被勾选的 使用的是 “element-plus”: “^2.2.22”, 以上应该都是兼容的 问题描述 要求el-table表格中&#xff0c;部分内容不可以被勾选&#xff0c;全选框在没有可选内容时&#xff0c;是禁…