Arduino OLED自己添加字庫(kù)教程,剛開始接觸U8g2字庫(kù)走了不少?gòu)澛罚缓骍8g2添加字庫(kù)的過(guò)程記錄下來(lái)做成文檔供和我一樣的小白們參考,希望能申精。
一、前言 最近在研究用 Arduino 以 U8g2 庫(kù)驅(qū)動(dòng) OLED 顯示中文,過(guò)程中走了很多彎路歷經(jīng)曲折,翻閱很多資料對(duì) 于我這樣的小白來(lái)說(shuō)這些資料有點(diǎn)深?yuàn)W,理解不是怎么透徹于是請(qǐng)教群里的高手,非但問(wèn)題沒(méi)有幫助解決還受到嘲 笑和譏諷,于是我下定決心自己一定要把這個(gè)字庫(kù)弄成功,最后我翻閱資料和反復(fù)試驗(yàn)終于成功的添加了自己的字 庫(kù),所以我要將自己的心得和成功的方法獻(xiàn)給像我這樣的小白。 二、準(zhǔn)備硬件和軟件 1. | 準(zhǔn)備一塊 ssd1306 液晶顯示模塊,一塊 arduino 開發(fā)板。 |
| 2. | 準(zhǔn)備 arduino IDE |
| 3. | 下載 ssd 1306 的支持庫(kù) u8g2:地址自行搜索 |
| 或者在 arduino 上安裝 u8g2:(1)打開管理庫(kù):
(2)搜索并安裝 u8b2
三、用 arduino 驅(qū)動(dòng) oled 顯示屏 (1)接線。我用的是 Arduino R3,這個(gè) 1106 的屏幕是使用 i2c,我只需在 Arduino R3 上選取兩個(gè)引腳作為 i2c 即可,而 1106 需要 3.3v 供電,再接兩根線供電。 (2)打開 u8b2 的例程 PrintUTF8。
(3)配置工程的引腳和通訊方式。只需要根據(jù)屏幕的通訊方式和接的 I2C 引腳配置即可,配置方式是選擇對(duì)應(yīng)的 配置去掉注釋。我用的是 SSD1106_128X64,用了 I2C 接口,使用 SDA 和 SCL 作為 i2c 的引腳,所以我配置是:
U8G2_SSD1106_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 23, /* data=*/ 22, /* 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_chinese2); // use chinese2 for all the glyphs of "你好世界" u8g2.setFontDirection(0);
u8g2.clearBuffer(); u8g2.setCursor(0, 15); u8g2.print("Hello World!"); u8g2.setCursor(0, 40);
u8g2.print("世界你好"); // Chinese "Hello World"
u8g2.sendBuffer();
delay(1000);
}
顯示效果如下: 如果不能正常顯示漢字需要將漢字在 UTF8 編碼格式下打開,也可以在 UTF8 編碼格式格式下打開以上代碼然后點(diǎn) 擊保存,我使用的是 Notepad++ 打開并保存代碼便可以解決漢字亂碼的問(wèn)題 四、制作自定義的字庫(kù) u8b2 官方的庫(kù)只能顯示很少的中文,如果要顯示其他中文就要自己制作字庫(kù)了。制作字庫(kù)的工具在目錄在:
u8g2\tools\font\bdfconv
bdfconv.exe 這個(gè)工具是一個(gè) dos 命令,需要開啟 cmd.exe 在命令行輸入命令或者用 bat 腳本來(lái)生成字庫(kù)。
bdfconv.exe 命令的使用方法如下:
bdfconv [options] filename
-h Display this help
-v Print log messages
-b <n> Font build mode, 0: proportional, 1: common height, 2: monospace, 3: multiple of 8
-f <n> Font format, 0: ucglib font, 1: u8g2 font, 2: u8g2 uncompressed 8x8 font (enforces -b 3)
-m 'map' Unicode ASCII mapping
-M 'mapfile' Read Unicode ASCII mapping from file 'mapname'
-o <file> C output file
-n <name> C indentifier (font name)
-d <file> Overview picture: Enable generation of bdf.tga and assign BDF font <file> for description
-l <margin> Overview picture: Set left margin
-a Overview picture: Additional font information (background, orange&blue dot)
-t Overview picture: Test string (Woven silk pyjamas exchanged for blue quartz.)
-r Runtime test
map := <mapcmd> { "," <mapcmd> }
mapcmd := <default> | <maprange> | <exclude>
default := "*"
maprange := <range> [ ">" <addexpr> ] Move specified glyph <range> to target code <num>
exclude := "~" <range>
range := <addexpr> [ "-" <addexpr> ] Select glyphs within specified range addexpr := <mulexpr> [ "+" <mulexpr> ]
mulexpr := <num> [ "*" <num> ]
num := <hexnum> | <decnum>
hexnum := "$" <hexdigit> { <hexdigit> }
decnum := <decdigit> { <decdigit> }
decdigit := "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
hexdigit := "a" | "b" | "c" | "d" | "e" | "f" | "A" | "B" | "C" | "D" | "E" | "F" | <decdigit>
{ } zero, one ore more, [ ] zero or once, | alternative example:
-m '32-255' select gylphs from encoding 32 to 255
-m '32-255,~64' select gylphs from encoding 32 to 255, exclude '@'
-m '32,48-57' select space, '1', '2', ... '9' build modes:
-b 0: Most compact, glyph bitmap is minimal
-b 1: Like -b 0, but glyph bitmap is extended to the height of the largest glyph within the selected glyph list.
Also the width of the gylphs is extended to cover the delta x advance.
-b 2: Like -b 1, but glyph width is set to the width of the largest glyph within the selected gylph list.
-b 3: Like -b 2, but width and height are forced to be a multiple of 8.
在“bdfconv”目錄下有一個(gè)腳本 “test_helvb18.bat” ,
bdfconv.exe -v -f 1 -m "32-127" ../bdf/helvB18.bdf -o helvb18_tf.c -n u8g2_font_helvB18_tf -d ../bdf/helvB18.bdf type helvb18_tf.c
我們可以利用這個(gè)腳本來(lái)生成字庫(kù),這個(gè)是直接通過(guò)“helvB18.bdf”字庫(kù)文件生成 ".C"的字庫(kù)數(shù)據(jù),而中文字庫(kù) 很大,一般都有幾 M 大小,顯然這種直接生成的方法不好用。還有另外一種字庫(kù)生成方法是按需提取字庫(kù),利用一 個(gè) map 表來(lái)提取要生成字庫(kù)的內(nèi)容,map 表里面放置的是 unicode 編碼(需要哪些中文就填這些中文的 unicode 碼)。unicode 編碼工具很多我用的是 ”文本與 unicode 轉(zhuǎn)換小工具 V5.02.05”
Unicode 碼分隔符用$ 在文本區(qū)輸入想要顯示的漢字 Unicode 碼進(jìn)制選十六進(jìn)制,接著 Unicode 碼區(qū)會(huì)顯示十 六進(jìn)制碼,復(fù)制生成的字碼將它填在自己要顯示的 map 表里面。 我的字碼放置在“chinese2.map”(當(dāng)然這和字碼表也可以另建)如下圖:
這種生產(chǎn)方式的命令是: bdfconv.exe -v ../bdf/unifont.bdf -b 0 -f 1 -M ../build/chinese2.map -d ../bdf/7x13.bdf -n u8g2_font_unifont_zgzt -o u8g2_font_unifont_zgzt.c 從這個(gè)命令我們可以知道 map 文件是 “chinese2.map”,全路徑是:“u8g2\tools\font\build”,我們可以在 “chinese2.map”文件里面添加我們要顯示的中文。生產(chǎn)的字庫(kù)代碼在 u8g2_font_unifont_zgzt.c 文件里面,我 們可以將里面的內(nèi)容復(fù)制,然后打開路徑" U8g2\src\clib 下的 u8g2_fonts.c "文件, 將復(fù)制的內(nèi)容粘貼在里面。 注意:我是將字碼放在例程的字庫(kù)里(也就數(shù) chinese2.map 里面)所以產(chǎn)生命令是: bdfconv.exe -v ../bdf/unifont.bdf -b 0 -f 1 -M ../build/chinese2.map -d ../bdf/7x13.bdf -n u8g2_fonts -o u8g2_fonts.c
如下圖: 點(diǎn)擊保存。
打開 u8b2 的例程 PrintUTF8 程序?qū)⑸蛇^(guò)字碼的漢字填在 u8g2.print("");里就可以顯示要顯示的漢字了。
以上圖文的pdf格式文檔下載(內(nèi)容和本網(wǎng)頁(yè)上的一模一樣,方便大家保存):如果你不想保存就不必下載了:
U8g2自己添加字庫(kù).pdf
(1.09 MB, 下載次數(shù): 42)
2022-11-13 13:34 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|