最近开始捣鼓esp8266模块和oled,照着网上的例子开始hello world,刚开始显示英文还没什么问题,后面想显示自定义的中文的时候,发现有些字能显示有些不能。
一开始觉得这很简单,照着网上的教程也有一个大概的思路,后来才发现,网上的教程说的都不是很清楚,稍微走了一点点弯路,记录下来给后来的朋友一个完整、详细、能成功的教程。
环境:
操作系统:win10
ide:Arduino
开发板:ESP8266
显示器:0.96寸oled液晶屏
引脚连接:1:D1–SOA 2:D2–SCL 3: 3V3–VCC 4:G–GND
lib包:u8g2
开始操作!
第一步:
打开一个Unicode编码转换网站,然后把想显示的字输进去,例如“想输的字”,进行中文转Unicode
就能得到:\u60f3\u8f93\u7684\u5b57,这样的字符串
Unicode编码转换网站:
第二步:
把刚刚获取到的Unicode编码字符串,将\u替换成$
最后得到的字符串:$60f3,$8f93,$7684,$5b57
将字符串里面的英文变成大写:$60F3,$8F93,$7684,$5B57
第三步:
找到Windows系统font文件里面的字体,放在一个新建的文件夹里面
用GuiTool工具生成字库文件
会生成simsun_U16.bdf和simsun_U16.bin两个文件
第四步:
将 统一码map文件 文件夹中的chinese.map 用编辑器或者sublime打开,把第二步中获取到的字符串添加到最前面,然后保存。将chinese.map文件放到上面两个文件的目录下
将bdfconv文件夹中的bdfconv.exe和转换.bat 放在上面两个文件的目录下
右击转换.bat 选择编辑
查看红框里面三个文件的名字是否和之前生成一样
双击转换.bat 生成 u8g2_font_unifont_zgzt.c 文件
第五步:
打开u8g2_font_unifont_zgzt.c文件
复制等号后面的所有内容
第六步:
找到arduino库文件夹,找到u8g2,找到 font文件
打开u8g2_fonts.c文件,搜索u8g2_font_unifont_t_chinese1
用刚刚新生成u8g2_font_unifont_zgzt内容,替换u8g2_font_unifont_t_chinese1里面的所有内容,保存
第七步:
打开ide Arduino
#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_SW_I2C u8g2(U8G2_R0, /* clock=*/ D2, /* data=*/ D1, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
}
void loop(void) {
u8g2.setFont(u8g2_font_unifont_t_chinese1);
u8g2.setFontDirection(0);
u8g2.clearBuffer();
u8g2.setCursor(0, 15);
u8g2.print("想输的字");
u8g2.sendBuffer();
delay(1000);
}
注意u8g2.setFont要使用刚刚替换的u8g2_font_unifont_t_chinese1
然后编译显示在oled上就成功了
大功告成!