使用u8g2強大的庫顯示中文在OLED上-ESP32
使用u8g2顯示中文在OLED上-ESP32
前言
一般在顯示屏幕上,慣用SSD1306的函式庫,但看習慣了繁文,還是會想
在顯示屏上顯示中文,有一款庫就能實現中文顯示,那就是u8g2,所以就
來實作看看效果如何。
一,下載庫到IDE裡
我這裡使用的是VScode裡的platformIO這套真的好用
在Libraries裡搜尋u8g2
按下"Add to Project"選擇當前的project之後按"add"
二,安裝中文字型所須中文字型制造包
主要是需要u8g2/tools/font/這個目錄,所以直接把tools整個目錄Copy到project裡,例如我的位置在-->「C:\Users\blair\Documents\PlatformIO\Projects\u8g2-oled-chinese\.pio\libdeps\esp32doit-devkit-v1\U8g2」目錄中。
這時就可以在VS左側看到出現了tool的資料夾
其中在以下資料夾底下有個很重要的檔,主要是負責轉碼為中文字型的檔
三,加入字型
首先要把需要的字型加入一個「U8g2\tools\font\build\chinese1.map」檔案裡
打開後可以看到一整排unicode碼
一個字一個逗號+enter這樣排下來,轉出來的碼前面都有\u****,把它全複制起來,貼在記事本上。
然後用記事本的"取代"功能,將\u全部取代為$
將上面貼到記事本並以\u取代為$的碼貼到U8g2\tools\font\build\chinese1.map最下方
接著用CMD視窗到DOS環境中,進入C:\Users\blair\Documents\PlatformIO\Projects\u8g2-oled-chinese\.pio\libdeps\esp32doit-devkit-v1\U8g2\tools\font\bdfconv資料夾執行以下指令:
bdfconv.exe -v ../bdf/unifont.bdf -b 0 -f 1 -M ../build/chinese1.map -d ../bdf/7x13.bdf -n u8g2_font_unifont -o u8g2_font_unifont.c
這個陣列。
怎麼做?
首先先到~/.pio\libdeps\esp32doit-devkit-v1\U8g2\tools\font\bdfconv底下找到剛轉好檔的檔案
把剛才從u8g2_font_unifont.c裡複制的內容,取代「u8g2_font_unifont_t_chinese1」這個陣列內容
#陣列總數也要改
這樣就加字型成功了
三,寫程式
#include <U8g2lib.h> //載入庫
//自搜尋使用spi或i2c
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
//支援非常多型號,我使用的是ssd1306 I2C沒reset的腳位
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
u8g2.begin();//初使化庫
u8g2.enableUTF8Print(); //啟用UTF8文字的功能
}
void loop() {
u8g2.setFont(u8g2_font_unifont_t_chinese1); //剛手動增加的中文字型檔
u8g2.firstPage();
do{
u8g2.setCursor(0, 14);
u8g2.print("我是定凱");
u8g2.setCursor(0, 30);
u8g2.print("日期:2021/11/10");
u8g2.setCursor(0, 50);
u8g2.print("時間:11:50:00");
}
while (u8g2.nextPage());
}
留言
張貼留言