大家好,自己第一次寫文章,寫的不好,請大家多多見諒.
這里我來教大家來使用Arduino的TFT_eSPI庫來自定義字庫,重點就是如何顯示中文.
教程開始
第一步 安裝Arduino
網絡上有很多教程,我就不贅述了.我用的版本是1.8.12.
第二部 選擇開發板,安裝庫TFT_eSPI
選擇開發板我也不講了,選擇完開發板之后.
依次點擊 工具 --> 管理庫 -->輸入TFT_eSPI,安裝即可,安裝完成之后,到Arduino的安裝庫的文件夾下,就可以找到TFT_eSPI.win10系統下我的安裝目錄是C:\Users\Administrator\Documents\Arduino\libraries\TFT_eSPI
第三部 自定制字庫文件
官方已經安排了教程,叫我們如何自制自己的字庫,只不過是英文的,大家沒有注意.
以我的TFT_eSPI安裝目錄下為例,Tools\Create_Smooth_Font\Create_font目錄下存放的就是制作字庫工具..
我們也可以在Arduino的示例文件TFT_eSPI ->Tools-->Create_Smooth_Font-->Create_font找到該文件
Create_font.pde,就是這個文件,
Create_font.pde,就是這個文件,
Create_font.pde,就是這個文件.重要的是說三遍.
在這個目錄下有3個文件

data : 存放我們的字體文件,用ttf結尾的
FontFiles : 存放我們制作出來的字庫文件,制作出來后是vlw結尾的
Create_font.pde : 代碼,通過該代碼來制作字庫文件
該代碼文件已經詳細告訴我們該怎樣去操作.我用簡練的中文翻譯下
-
去https://processing.org/ 下載processing軟件,並且安裝
-
使用processing打開Create_font.pde文件
-
重要要修改的有
String fontName = "simfang"; //你要用的字體文件的文件名,不帶后綴,我從win10上用了一個宋體的, String fontType = ".ttf"; //你要用的字體文件的文件后綴,一般是ttf //String fontType = ".otf"; int fontSize =12; int displayFontSize = 12; //2者用一樣的數字,你想使用的字庫的大小,和像素關聯,我的屏幕是1.44寸,128*128的,就用了一個12像素的. //注意: 漢字的像素最低要用12像素的,再小就顯示模糊了. static final int[] unicodeBlocks = { 0x0030,0x0039, } //這里添加有大小的unicodeBlocks塊,指定范圍 //例如我想要添加0-9到字庫中,0-9的unicode的編碼為 static final int[] specificUnicodes = { 0x6B66,0x6C49, } //這里添加特定的unicode碼 //例如我想要添加 武漢 2個字到字庫文件中,就先把武漢 轉換為unicode碼, //推薦 http://tool.chinaz.com/tools/unicode.aspx 網站 中文轉unciode使用 //就得到\u6b66\u6c49,把\u替換成0x, -
注意,要把你打算用的字體文件ttf復制到data 目錄下
-
修改Create_font.pde代碼,添加我們自己的中文unicode碼
-
運行起來,如果正常,會彈出一張圖片,並且在FontFiles 目錄下出現一個simfang12.vlw的文件


-
然后我們通過https://tomeko.net/online_tools/file_to_hex.php?lang=zh,或者 bin2hex.exe將vlw文件轉換成Arduin使用的字庫文件***font.h
-
注意轉換出來的字庫文件要提那家還是那個頭和尾
0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 假設這就是我在網站上轉換出來的,把它復制下來, 新建一個font_12.h文件, //font_12.h如下 #include <pgmspace.h> const uint8_t font_12[] PROGMEM = { 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, }; -
這樣字庫文件就做好了
-
把字庫文件導入到項目,就可以愉快的使用了.
#include "font/font_12.h" //導入字庫文件 tft.loadFont(font_12); //指定tft屏幕對象載入font_12字庫 tft.drawString("武漢",0,0) //在坐標0,0位置處寫武漢2個字,就可以在tft顯示出來了 tft.unloadFont(); //釋放字庫文件,節省資源

