2024年5月26日 星期日

使用U8g2的BFF轉換程式自建字庫,在OLED顯示中文

本實作使用 WeMos LoLin32 開發板配合U8g2程式庫產生自建字庫後於OLED中顯示中文。直接將 WeMos LoLin32 以 USB 線連接到開發電腦進行程式編譯上傳即可。使用Arduino IDE 編譯 ESP32 程式前請先確認已經正確選定開發板規格。 

U8g2程式庫提供的字型幾乎沒有中文字,如果需要在OLED中顯示中文那就必須要自建字庫。

要在OLED中顯示中文的字庫建立步驟如下:
1.將要顯示的中文字先轉成 Unicode 編碼。例如中文字為「昱得資訊工作室」轉換如下:
\u6631\u5f97\u8cc7\u8a0a\u5de5\u4f5c\u5ba4
2.將 Unicode 編碼後的右斜符號與u小寫字母 \u 置換成錢字號 $。每個字並以逗號 , 隔開。
$6631,$5f97,$8cc7,$8a0a,$5de5,$4f5c,$5ba4
3.取得U8g2程式庫提供的「bdfconv.exe」程式與字體檔案(unifont.bdf)。
「bdfconv.exe」下載位置在 這裡
 
字體檔案(unifont.bdf)下載位置在 這裡


4.將「bdfconv.exe」程式與字體檔案(unifont.bdf)放在同一路徑下。 

5.打開 命令提示字元  視窗,利用「bdfconv.exe」程式與字體檔案(unifont.bdf)來產生中文字的點陣字體矩陣資料,語法如下:
bdfconv unifont.bdf -b 0 -f 1 -m "中文字編碼字串內容" -d unifont.bdf -n 字型名稱 -o 字型輸出檔案名稱
本例為:
bdfconv unifont.bdf -b 0 -f 1 -m "$6631,$5f97,$8cc7,$8a0a,$5de5,$4f5c,$5ba4" -d unifont.bdf -n myFont -o myFont.h
6.將新建的字型檔案(本例為 myFont.h)複製到開發專案相同路徑中備用。

接腳設定 
1. 電源接線: 
【ESP32】3.3V →【OLED】VCC 
【ESP32】GND →【OLED】GND 
2. 信號接線: 
【ESP32】22→【ESP-01】SCL 
【ESP32】21→【ESP-01】SDA


撰寫實驗程式如下:
#include <U8g2lib.h>//引入程式庫
#include "myFont.h" //引入中文字陣列資料

 //U8G2_R2為顯示器翻轉180度顯示
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R2, U8X8_PIN_NONE);

int x1=127; //初始繪製上字串的X座標位置
int x2=-127; //初始繪製下字串的X座標位置

void setup() {
  u8g2.begin();
  u8g2.setFont(myFont);   // 使用自訂的中文字型
  u8g2.enableUTF8Print();  // 啟用顯示UTF-8 編碼功能
}

void loop() {
 u8g2.firstPage();
  do {
    u8g2.setCursor(x1+10, 20);
    u8g2.print("昱得資訊工作室");
    u8g2.setCursor(x2-10, 62);
    u8g2.print("室作工訊資得昱");
  } while ( u8g2.nextPage() );
  
  x1=x1-1;
  if(x1<=-127) {x1=127;};

  x2=x2+1;
  if(x2>=127) {x2=-127;};
  
  delay(10);
}

沒有留言:

張貼留言

熱門文章