在Arduino U8g2庫中顯示中文的方法

U8g2庫支持中文顯示,但需要手動添加中文字體或使用內置的有限中文字符。以下是具體實現方法:

方法一 使用U8g2內置的中文字體(不推薦)

缺點:內置字體支持的漢字較少,可能無法顯示所有需要的字符。不推薦。

U8g2庫內置了一些中文字體,但覆蓋的漢字有限(通常為常用符號或少量漢字)。例如:

#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);void setup() {u8g2.begin();
}void loop() {u8g2.clearBuffer();u8g2.setFont(u8g2_font_unifont_t_chinese2);  // 使用內置中文字體(部分漢字)u8g2.drawStr(0, 20, "你好");                 // 顯示中文u8g2.sendBuffer();delay(1000);
}

方法二 使用XBM格式顯示中文(不推薦)

缺點:位圖方式,占用資源,僅適合固定內容,無法動態修改文本,不推薦

如果只需要顯示少量固定漢字,可以將其轉換為 XBM位圖,直接渲染:

  1. 使用 LCD Assistant(在線工具)將漢字轉換為XBM格式。
  2. 在代碼中引用XBM數據:
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);// 定義中文字符的XBM位圖(示例:"你好")
static const unsigned char hello_bits[] U8X8_PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ... // 具體數據由工具生成
};void setup() {u8g2.begin();
}void loop() {u8g2.clearBuffer();u8g2.drawXBM(0, 20, 16, 16, hello_bits); // 顯示XBM位圖u8g2.sendBuffer();delay(1000);
}

方法三 自定義中文字體(推薦)

如果需要顯示任意中文,需使用 U8g2字體工具 生成自定義字體文件。U8g2庫的官方字體轉換工具是 ?bdfconv,它可以將標準字體文件(如TTF、BDF)轉換為U8g2兼容的C語言字體文件。
U8g2字體工具(bdfconv)獲取方式?:

步驟1:下載并安裝U8g2字體工具(bdfconv)

GitHub倉庫(源碼+工具)
  • U8g2官方字體工具網站: https://github.com/olikraus/u8g2/wiki/fntgrp
  • bdfconv工具:https://github.com/olikraus/u8g2/tree/master/tools/font/bdfconv
    (包含Windows/Linux/macOS的預編譯版本)

Windows用戶直接下載

  • 預編譯的Windows版 bdfconv.exe
    點擊下載 bdfconv.exe

步驟2:準備中文字體文件

  • 從系統字體目錄(如Windows的C:\Windows\Fonts)復制一個中文字體(如simsun.ttfmsyh.ttf)。
  • 或使用開源字體(如 ?思源黑體、文泉驛微米黑)。

步驟3:生成U8g2兼容的字體文件

在命令行運行:

./bdfconv -v -f 1 -m "32-127, 19968-40959" simsun.ttf -o my_chinese_font.c

參數說明

  • -f 1:抗鋸齒級別(1=無抗鋸齒,2=有抗鋸齒)。
  • -m "19968-40959":指定Unicode漢字范圍(19968-40959覆蓋常用漢字)。
  • simsun.ttf:輸入字體文件。
  • -o my_chinese_font.c:輸出C語言字體文件。

步驟4:在Arduino項目中導入自定義字體

  1. 將生成的my_chinese_font.c復制到Arduino項目目錄。
  2. 在代碼中引用該字體:
#include <U8g2lib.h>
#include "my_chinese_font.c"  // 導入自定義字體U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);void setup() {u8g2.begin();
}void loop() {u8g2.clearBuffer();u8g2.setFont(my_chinese_font);  // 使用自定義字體u8g2.drawStr(0, 20, "你好世界"); // 顯示中文u8g2.sendBuffer();delay(1000);
}

常見問題

  • Q1:提示“找不到bdfconv”??
    確保將 bdfconv.exe 放在系統路徑(如 C:\Windows)或當前目錄。

?- Q2:生成的字體文件過大?
縮小字符范圍(如 -m “19968-20000” 僅轉換少量漢字)。
使用 -b 0 禁用非必要字符:

bdfconv -b 0 -m "19968-20000" simsun.ttf -o small_font.c
  • ?Q3:中文顯示為亂碼?
    確保字體文件包含目標漢字(檢查Unicode范圍)。
    在代碼中使用 ?UTF-8編碼字符串?(Arduino IDE默認支持)。

Q1:中文顯示亂碼

  • 確保字體文件包含所需漢字的Unicode編碼。
  • 檢查drawStr是否使用UTF-8編碼字符串。

Q2:字體太大,占用過多Flash

  • 減少字體范圍(如-m "19968-20000"僅生成少量漢字)。
  • 使用-b 0選項禁用非必要字符。

Q3:顯示速度慢

  • 使用U8G2_FONT_MODE_TRANSPARENT減少渲染時間:
    u8g2.setFontMode(1); // 透明模式
    

總結

方法優點缺點
內置中文字體簡單,無需額外文件支持的漢字有限
自定義字體支持任意漢字,靈活需手動生成字體文件
XBM位圖適合固定內容,渲染快無法動態修改,占用空間較大

推薦

  • 少量中文 → 內置字體
  • 大量中文,需要完整中文支持 → 使用bdfconv轉換TTF字體
  • 固定標語 → XBM位圖

通過以上方法,可以在Arduino OLED項目中完美顯示中文!

補充:無需bdfconv工具的替代方案

方法三還有一個替代方案(無需bdfconv),在線字體轉換工具(如 LVGL Font Converter),生成兼容U8g2的字體。

方法優點缺點
bdfconv工具支持任意字體和漢字,靈活需手動操作命令行
在線轉換工具無需安裝軟件依賴網絡,可能格式不兼容

參考:

  1. 如何利用Arduino來顯示Unicode文本

  2. Arduino驅動LED128X64 - U8g2 自定義中文字庫

  3. arduino如何在ssd1306上顯示中文字符

  4. Arduino技巧使用u8g2函式庫建立自訂字庫,讓OLED顯示中文

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903261.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自動駕駛分級

一、美國 SAE J3016 Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles(2021) 1、駕駛自動化級別&#xff08;Levels of Driving Automation&#xff09; 共分為 6 個級別&#xff0c;從 無自動化&#xff08;0&#…

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能 北京海特偉業科技有限公司任洪卓發布于2025年4月28日 在數字化轉型浪潮下&#xff0c;IP應急廣播呼叫對講廣播系統憑借其網絡化、智能化、融合化、多元化等優勢&#xff0c;已…

DNS主從同步及解析

DNS 域名解析原理 域名系統的層次結構 &#xff1a;DNS 采用分層樹狀結構&#xff0c;頂級域名&#xff08;如.com、.org、.net 等&#xff09;位于頂層&#xff0c;下面是二級域名、三級域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是頂級域名…

再看 BBR 到 BBRv3 的公平性改進

從看一篇論文開始&#xff1a;Performance Evaluation of TCP BBRv3 in Networks with Multiple Round Trip Times&#xff0c;結論比較悲觀&#xff1a; 雖然 BBRv2/3 試圖解決 BBRv1 的公平性問題&#xff0c;但結果依舊不夠理想&#xff0c;BBR 的迭代依舊任重而道遠。 BB…

locust壓力測試

安裝 pip install locust驗證是否安裝成功 locust -V使用 網上的教程基本上是前幾年的&#xff0c;locust已經更新了好幾個版本&#xff0c;有點過時了&#xff0c;在此做一個總結 啟動 默認是使用瀏覽器進行設置的 # 使用瀏覽器 locust -f .\main.py其他參數 Usage: locust […

優先隊列和單調隊列(雙端隊列實現的)

這里寫自定義目錄標題 一、優先隊列與單調隊列二、優先隊列2.1 概念2.2 增刪查 判空2.3 示例代碼 三、雙端隊列四、單調隊列4.1 單調遞增隊列4.2 單調遞減隊列 一、優先隊列與單調隊列 二、優先隊列 2.1 概念 一種特殊的隊列&#xff0c;它與普通隊列的主要區別在于元素的出…

如何在idea中寫spark程序

在 IntelliJ IDEA 中編寫 Spark 程序是一個高效且便捷的方式&#xff0c;以下是一個詳細的步驟指南&#xff0c;幫助你在 IntelliJ IDEA 中創建和運行 Spark 程序。 一、環境準備 安裝 Java&#xff1a; 確保已經安裝了 JDK 1.8 或更高版本。可以通過以下命令檢查&#xff1a;…

BERT BERT

BERT ***** 2020年3月11日更新&#xff1a;更小的BERT模型 ***** 這是在《深閱讀的學生學得更好&#xff1a;預訓練緊湊模型的重要性》&#xff08;arXiv:1908.08962&#xff09;中提到的24種較小規模的英文未分詞BERT模型的發布。 我們已經證明&#xff0c;標準的BERT架構和…

SpringBoot啟動警告:OpenJDK 64-Bit Server VM warning

問題描述 以Debug模式啟動Spring boot項目之后&#xff0c;日志打印&#xff1a;OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended&#xff0c; 警告信息 解決方案&#xff1a;配置VM opt…

“該虛擬機似乎正在使用中“

當某一天打開虛擬機突然彈出"該虛擬機似乎正在使用中"。 遇到這種問題的解決方法很簡單&#xff0c;出現這種問題是因為錯誤關閉虛擬機導致&#xff0c;當我們點擊獲取所有權時發現不能解決問題。這里分享一種簡單的解決方法。 打開虛擬機的文件目錄 找到lck文件夾下…

【CSS】層疊,優先級與繼承(三):超詳細繼承知識點

目錄 繼承一、什么是繼承&#xff1f;2.1 祖先元素2.2 默認繼承/默認不繼承 二、可繼承屬性2.1 字體相關屬性2.2 文本相關屬性2.3 列表相關屬性 三、不可繼承屬性3.1 盒模型相關屬性3.2 背景相關屬性 四、屬性初始值4.1 根元素4.2 屬性的初始值4.3 得出結論 五、強制繼承5.1 in…

Android LiveData關鍵代碼

1、observer方法 public void observe(NonNull LifecycleOwner owner, NonNull Observer<? super T> observer) {assertMainThread("observe");if (owner.getLifecycle().getCurrentState() DESTROYED) {// ignorereturn;}LifecycleBoundObserver wrapper …

Docker-高級使用

前言 書接上文Docker-初級安裝及使用_用docker安裝doccano-CSDN博客&#xff0c;我們講解了Docker的基本操作&#xff0c;下面我們講解的是高級使用&#xff0c;請大家做好準備&#xff01; 大家如果是從初級安裝使用過來的話&#xff0c;建議把之前鏡像和搭載的容器數據卷里面…

Spring Boot常用注解詳解:實例與核心概念

Spring Boot常用注解詳解&#xff1a;實例與核心概念 前言 Spring Boot作為Java領域最受歡迎的快速開發框架&#xff0c;其核心特性之一是通過注解&#xff08;Annotation&#xff09;簡化配置&#xff0c;提高開發效率。注解驅動開發模式讓開發者告別繁瑣的XML配置&#xff…

TRO再添新案 TME再拿下一熱門IP,涉及Paddington多個商標

4月2日和4月8日&#xff0c;TME律所代理Paddington & Company Ltd.對熱門IP Paddington Bear帕丁頓熊的多類商標發起維權&#xff0c;覆蓋文具、家居用品、毛絨玩具、紡織用品、游戲、電影、咖啡、填充玩具等領域。跨境賣家需立即排查店鋪內的相關產品&#xff01; 案件基…

經驗分享-上傳ios的ipa文件

.ipa格式的二進制文件&#xff0c;是打包后生成的文件&#xff0c;無論我們是放上去testflight測試還是正式上傳到app store&#xff0c;都需要先上傳到蘋果開發者中心的app store connect上的構建版本上。 在app store connect上&#xff0c;上傳構建版本的功能&#xff0c;它…

docker(3) -- 圖形界面

1. 前言 在wsl(8) – 圖形界面文章中介紹了wsl2默認是支持圖形界面的&#xff0c;現在我們嘗試下在docker中運行gui程序試試看。 2. x11-apps 啟動一個docker&#xff0c;安裝一些gui小程序&#xff0c;然后運行&#xff0c;發現會失敗。ubuntu_base詳見文章wsl(6) – 安裝d…

Docker容器跑定時任務腳本

最近搞了一個Docker容器跑腳本&#xff0c;想設置一個定時任務&#xff0c;每天8點運行一次&#xff0c;結果死活不成功。排查了一天&#xff0c;有一點當局者迷了&#xff0c;明明時間是對的&#xff0c;明明時區是對的&#xff0c;定時任務也是啟動的&#xff0c;它就是不執行…

【Linux】什么是完全限定域名

FQDN 是 “完全限定域名” (Fully Qualified Domain Name) 的縮寫。 FQDN 是一個互聯網上特定計算機或主機的完整且唯一的域名。它詳細說明了該主機在域名系統 (DNS) 層級結構中的確切位置。 一個 FQDN 通常由以下幾個部分組成&#xff0c;從左到右依次是&#xff1a; 主機名…

小結:BFD

*BFD&#xff08;雙向轉發檢測&#xff0c;Bidirectional Forwarding Detection&#xff09;是一種快速、輕量級的故障檢測機制&#xff0c;用于檢測網絡中兩點之間的連通性。它廣泛應用于各種場景 1. 檢測 IP 鏈路 應用場景&#xff1a; BFD 用于檢測兩臺設備之間的 IP 層連…