Arduino U8G2库 任意中文显示(完整GB2312字库)
一、前言
最近要使用U8G2库驱动OLED屏显示大量中文字,并且都是在线获取的资料,就开始从网上寻找解决方案。找到的几乎都是手动制作字库导入的教程,无法解决我面临的问题。
事实上解决方案多年前就有人提出,并且已经合并到了主线的u8g2库当中,不需要任何操作就可以实现GB2312中文字库显示。
二、u8g2_wqy
适合 u8g2 的中文字体,采用文泉驿点阵宋体作为源本,提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。
区别
chinese1
、chinese2
、chinese3
为 u8g2 官方提供的小字符集。gb2312
是完整的 GB2312 简体中文编码 字符集。gb2312a
只有 GB231201
、02
和16
到55
以及部分08
区的编码。没有包含全角标点符号,如!
,请用半角!
代替。gb2312b
只有 GB231201
到55
的编码,其中10
到15
区为空区。比gb2312a
多一些额外的符号。
字库大小
字体名 | 字符数 | 字节 |
---|---|---|
u8g2_font_wqy12_t_chinese1 | 411 | 9,491 |
u8g2_font_wqy12_t_chinese2 | 574 | 13,701 |
u8g2_font_wqy12_t_chinese3 | 993 | 25,038 |
u8g2_font_wqy12_t_gb2312a | 4041 | 111,359 |
u8g2_font_wqy12_t_gb2312b | 4531 | 120,375 |
u8g2_font_wqy12_t_gb2312 | 7539 | 208,228 |
u8g2_font_wqy13_t_chinese1 | 411 | 10,341 |
u8g2_font_wqy13_t_chinese2 | 574 | 14,931 |
u8g2_font_wqy13_t_chinese3 | 993 | 27,370 |
u8g2_font_wqy13_t_gb2312a | 4041 | 121,327 |
u8g2_font_wqy13_t_gb2312b | 4531 | 130,945 |
u8g2_font_wqy13_t_gb2312 | 7539 | 227,383 |
u8g2_font_wqy14_t_chinese1 | 411 | 11,368 |
u8g2_font_wqy14_t_chinese2 | 574 | 16,443 |
u8g2_font_wqy14_t_chinese3 | 993 | 30,200 |
u8g2_font_wqy14_t_gb2312a | 4040 | 133,898 |
u8g2_font_wqy14_t_gb2312b | 4530 | 143,477 |
u8g2_font_wqy14_t_gb2312 | 7538 | 251,515 |
u8g2_font_wqy15_t_chinese1 | 411 | 12,590 |
u8g2_font_wqy15_t_chinese2 | 574 | 18,133 |
u8g2_font_wqy15_t_chinese3 | 993 | 33,165 |
u8g2_font_wqy15_t_gb2312a | 4041 | 147,563 |
u8g2_font_wqy15_t_gb2312b | 4531 | 158,713 |
u8g2_font_wqy15_t_gb2312 | 7539 | 276,938 |
u8g2_font_wqy16_t_chinese1 | 411 | 14,229 |
u8g2_font_wqy16_t_chinese2 | 574 | 20,245 |
u8g2_font_wqy16_t_chinese3 | 993 | 37,454 |
u8g2_font_wqy16_t_gb2312a | 4041 | 169,286 |
u8g2_font_wqy16_t_gb2312b | 4531 | 182,271 |
u8g2_font_wqy16_t_gb2312 | 7539 | 318,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);
}
参考资料
[1]https://github.com/larryli/U8g2\_wqy\_Arduino
[2]https://gitee.com/CHN\_ZC/u8g2\_wqy
PlatformIO 使用
找到你的项目.pio/libdeps/pico32
目录下放入下载的包,注意你还需要安装u8g2
的包
代码如下:
#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