使用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碼
然後到線上漢字轉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

這樣就轉碼完成了,但是還有最後個步驟,要把轉碼好的全部檔案取代給U8g2\src\clib\u8g2_fonts.c」這個檔案,裡的「u8g2_font_unifont_t_chinese1」
這個陣列。
怎麼做?
首先先到~/.pio\libdeps\esp32doit-devkit-v1\U8g2\tools\font\bdfconv底下找到剛轉好檔的檔案

將" " 裡面全複制起來

接著打開「U8g2\src\clib\u8g2_fonts.c」這個檔案,利用"尋找"找到「u8g2_font_unifont_t_chinese1」這個陣列。

把剛才從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());
}

留言

這個網誌中的熱門文章