esp8266 墨水屏显示字库任意汉字方法-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 827|回复: 3

esp8266 墨水屏显示字库任意汉字方法

[复制链接]
发表于 2022-9-8 16:34 | 显示全部楼层 |阅读模式
本帖最后由 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() {};

发表于 2022-9-8 19:34 | 显示全部楼层
谢谢楼主分享,这个给力
发表于 2022-9-21 22:13 | 显示全部楼层
厉害!对我很有启发,谢谢分享!
发表于 2022-9-21 22:47 | 显示全部楼层
zipcord大侠,能把完整的源代码,字库分享给大家吗?我们先谢谢了。顺便问一下您用的什么屏?我在咸鱼上淘了个4.2inch paper屏可以用吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-1 05:31 , Processed in 0.096956 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表