数码之家

标题: Esp8266 墨水屏显示汉字方法 [打印本页]

作者: zipcord    时间: 2022-9-8 16:11
标题: Esp8266 墨水屏显示汉字方法
老样子啊,先来半杯小鸟伏特加,啊不对,先上图[attach]1596803[/attach]

    自从知道了水墨屏,就对这个显示喜欢的不得了,奈何新品价格太贵,只能去咸鱼淘,结果淘回来的屏老化严重,显示效果不好。不过凑合能用。
回到正题,esp8266有GxEPD和GxEPD2 两个库,本身显示英文是有字库的,引用一下显示也很方便,奈何中文显示不好。
  显示中文只能是用软件把汉字转成点阵字库用。对于显示更多的信息就比较麻烦,这也是上面这个屏幕没有显示节日名称的原因。
于是在网上搜了很多地方,也看了很多例程,里面是有显示中文的办法,就是使用u8g2库,可惜的是,虽然字库中只有wqy_chinese1,2,3
这几个库可以正常显示中文,但是里面中文字很少,只有100多个汉字,根本就用不了。
下面这个就是chinese1
[attach]1596815[/attach]

于是我试着使用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() {};



作者: 俊输    时间: 2022-9-8 22:42
不会玩,觉得楼主很厉害
作者: jyobin    时间: 2022-9-9 10:03
原来这么复杂的

作者: hujj    时间: 2022-9-9 10:07
墨水屏看起来就是舒服,不伤眼。
作者: cbq12345    时间: 2022-9-9 10:33

墨水屏看起来就是舒服,不伤眼。
作者: 366261061    时间: 2022-9-15 06:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: bad55    时间: 2022-9-18 16:12
不会玩,就是来膜拜下
作者: t20ily    时间: 2022-12-22 15:26
看不懂,来学习一下
作者: sadfun    时间: 2022-12-23 13:59
不会玩,觉得楼主很厉害
作者: joyspace    时间: 2022-12-23 15:31
收藏一下  大佬的杰作
作者: fmjz    时间: 2025-2-20 23:48
墨水屏看起来很不错,比OLED的板子有质感




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4