目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js windows win10 springboot pdf 电路 docker idea esp32 vue macOS nginx Arduino git maven 硬件资料

存档:

X

Arduino U8G2库 任意中文显示(完整GB2312字库)

一、前言

最近要使用U8G2库驱动OLED屏显示大量中文字,并且都是在线获取的资料,就开始从网上寻找解决方案。找到的几乎都是手动制作字库导入的教程,无法解决我面临的问题。

事实上解决方案多年前就有人提出,并且已经合并到了主线的u8g2库当中,不需要任何操作就可以实现GB2312中文字库显示。

a866924c7396431f961190ab22b3a0861.png

二、u8g2_wqy

适合 u8g2 的中文字体,采用文泉驿点阵宋体作为源本,提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。

区别

  • chinese1chinese2chinese3u8g2 官方提供的小字符集。
  • gb2312 是完整的 GB2312 简体中文编码 字符集。
  • gb2312a 只有 GB2312 01021655 以及部分 08 区的编码。没有包含全角标点符号,如 ,请用半角 ! 代替。
  • gb2312b 只有 GB2312 0155 的编码,其中 1015 区为空区。比 gb2312a 多一些额外的符号。

字库大小

字体名字符数字节
u8g2_font_wqy12_t_chinese14119,491
u8g2_font_wqy12_t_chinese257413,701
u8g2_font_wqy12_t_chinese399325,038
u8g2_font_wqy12_t_gb2312a4041111,359
u8g2_font_wqy12_t_gb2312b4531120,375
u8g2_font_wqy12_t_gb23127539208,228
u8g2_font_wqy13_t_chinese141110,341
u8g2_font_wqy13_t_chinese257414,931
u8g2_font_wqy13_t_chinese399327,370
u8g2_font_wqy13_t_gb2312a4041121,327
u8g2_font_wqy13_t_gb2312b4531130,945
u8g2_font_wqy13_t_gb23127539227,383
u8g2_font_wqy14_t_chinese141111,368
u8g2_font_wqy14_t_chinese257416,443
u8g2_font_wqy14_t_chinese399330,200
u8g2_font_wqy14_t_gb2312a4040133,898
u8g2_font_wqy14_t_gb2312b4530143,477
u8g2_font_wqy14_t_gb23127538251,515
u8g2_font_wqy15_t_chinese141112,590
u8g2_font_wqy15_t_chinese257418,133
u8g2_font_wqy15_t_chinese399333,165
u8g2_font_wqy15_t_gb2312a4041147,563
u8g2_font_wqy15_t_gb2312b4531158,713
u8g2_font_wqy15_t_gb23127539276,938
u8g2_font_wqy16_t_chinese141114,229
u8g2_font_wqy16_t_chinese257420,245
u8g2_font_wqy16_t_chinese399337,454
u8g2_font_wqy16_t_gb2312a4041169,286
u8g2_font_wqy16_t_gb2312b4531182,271
u8g2_font_wqy16_t_gb23127539318,090

三、使用方法

只需一句代码
u8g2.setFont(u8g2_font_wqy12_t_gb2312);

以下是完整代码demo

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/15, /* data=*/14);  // ESP32 Thing, HW I2C with pin remapping

// End of constructor list


void setup(void) {
  Wire.begin(15, 14);
  u8g2.begin();
  u8g2.enableUTF8Print();  // enable UTF8 support for the Arduino print() function
}

void loop(void) {
  u8g2.setFont(u8g2_font_wqy12_t_gb2312);  
  u8g2.setFontDirection(0);
  u8g2.firstPage();
  do {
    u8g2.setCursor(0, 10);
    u8g2.print("觊觎耄耋饕餮囹圄");  
    u8g2.setCursor(0, 25);
    u8g2.print("魑魅魍魉");  
    u8g2.setCursor(0, 40);
    u8g2.print("鑫森淼焱"); 
  } while (u8g2.nextPage());
  delay(1000);
}

微信图片20240713192809.jpg

参考资料

[1]https://github.com/larryli/U8g2\_wqy\_Arduino
[2]https://gitee.com/CHN\_ZC/u8g2\_wqy

PlatformIO 使用

找到你的项目.pio/libdeps/pico32目录下放入下载的包,注意你还需要安装u8g2的包

image.png

U8g2wqyArduino0.0.1.zip

代码如下:

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>


//iic驱动方式
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

void setup() {
    u8g2.begin();
    u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
}

void loop() {
    u8g2.setFont(u8g2_font_wqy12_t_gb2312);
    u8g2.setFontDirection(0);
    u8g2.firstPage();
    do {
        u8g2.setCursor(0, 10);
        u8g2.print("觊觎耄耋饕餮囹圄");
        u8g2.setCursor(0, 25);
        u8g2.print("魑魅魍魉");
        u8g2.setCursor(0, 40);
        u8g2.print("鑫森淼焱");
        u8g2.setCursor(0, 55);
        u8g2.print("李13");
    } while (u8g2.nextPage());
    delay(1000);
}

标题:Arduino U8G2库 任意中文显示(完整GB2312字库)
作者:llilei
地址:http://solo.llilei.work/articles/2024/07/13/1720869621306.html