本帖最后由 zipcord 于 2022-9-8 19:51 编辑
在论坛也学到很多,现在也给论坛做点贡献把,先上图镇楼
[size=0.83em]1.jpg (155.58 KB, 下载次数: 0)
下载附件
[color=rgb(153, 153, 153) !important]1 小时前 上传
自从知道了水墨屏,就对这个显示喜欢的不得了,奈何新品价格太贵,只能去咸鱼淘,结果淘回来的屏老化严重,显示效果不好。不过凑合能用。
回到正题,esp8266有GxEPD和GxEPD2 两个库,本身显示英文是有字库的,引用一下显示也很方便,奈何中文显示不好。
显示中文只能是用软件把汉字转成点阵字库用。对于显示更多的信息就比较麻烦,这也是上面这个屏幕没有显示节日名称的原因。
于是在网上搜了很多地方,也看了很多例程,里面是有显示中文的办法,就是使用u8g2库,可惜的是,虽然字库中只有wqy_chinese1,2,3
这几个库可以正常显示中文,但是里面中文字很少,只有100多个汉字,根本就用不了。
下面这个就是chinese1
于是我试着使用wqy_gb2312库,但是死活编译不过去。提示的是ib存储空间不足,不应该啊,esp8266 我这个有4Mflash存储。
我在网上又搜索了一番,看到大神甘草酸不酸的源码里面提到他的可以显示所有汉字,但是他是带了一个字库gb2312.c文件,
而且他提到必须用他提供的U8g2_for_Adafruit_GFX库,而且有人在下面评论一些内容,虽然我不是很懂,但是不影响我用他。
我把它的库和字库导入源码,然后果然可以正常显示汉字了,既然这样,那是不是可以换别的字库了呢,我于是又换上wqy字库
果然也可以了,就在这里留给大家,看有需要的人拿去用吧。
修改ugg2_for_Adafruit_GFX 的地方
感谢 甘草和felixlet 大神
//=========================
在 Arduino\libraries\U8g2_for_Adafruit_GFX\src\u8g2_fonts.h
添加
#if defined(ESP8266)
#define U8X8_FONT_SECTION(name) attribute((section(".text." name)))
#endif
在 Arduino\libraries\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
//==============================
下面是示例代码,
需要注意添加对应的库,用标准示例改一下,GxEPD2,U8g2_for_Adafruit_GFX.h (需要改动上面的部分):
#include <GxEPD2_BW.h> // including both doesn't use more code or ram
#include <U8g2_for_Adafruit_GFX.h>
// select the display class and display driver class in the following file (new style):
#include "GxEPD2_display_selection_new_style.h"
// alternately you can copy the constructor from GxEPD2_display_selection.h or GxEPD2_display_selection_added.h of GxEPD2_Example to here
// e.g. for Wemos D1 mini:
//GxEPD2_BW<GxEPD2_154_D67, GxEPD2_154_D67::HEIGHT> display(GxEPD2_154_D67(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDEH0154D67
GxEPD2_BW<GxEPD2_213, GxEPD2_213::HEIGHT> display(GxEPD2_213(/*CS=D8*/ SS, /*DC=D3*/ 0, /*RST=D4*/ 2, /*BUSY=D2*/ 4)); // GDE0213B1, phased out
U8G2_FOR_ADAFRUIT_GFX u8g2Fonts;
void setup()
{
display.init(115200);
fullClear();
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
Serial.println("setfont");
display.setFullWindow();
Serial.println("first");
display.firstPage();
do
{
u8g2Fonts.setCursor(5, 25);
u8g2Fonts.println("不要温顺的走进那个良夜,");
u8g2Fonts.println("激情不能被消沉的暮色淹没,");
u8g2Fonts.println("咆哮吧,咆哮,痛斥那光的退缩。");
u8g2Fonts.println("智者在临终的时候,对黑暗妥协,");
u8g2Fonts.println("是因为它们的语言已黯然失色,");//");
u8g2Fonts.println("它们不想被夜色迷惑,");
u8g2Fonts.println("咆哮吧,咆哮,痛斥那光的退缩。");
//display.setCursor(80, 80);
//display.print("Hello World!");
}
while (display.nextPage());
}
void loop() {};
|