LEDマトリックスに漢字を表示させるようにします。ドットマトリックスのため、漢字のフォントもドットタイプが必要です。このフォントとして、BDF形式(Bitmap Distribution Format)フォントデータがあります。
mgo-tec様のサイトを参考にしました。
東雲フォントを使い、ESP32用にライブラリ化した「ESP32_SPIFFS_ShinonomeFNT」です。ESP32マイコンには、SPIFFSという内部メモリを利用したファイルシステムがあります。ここにフォントデータを入れておき、読みだして利用するものです。
最近のArduinoIDEの環境では、同じ内部のフラッシュメモリにアクセスする「SPIFFS」が非推奨となり、より高速(2~3倍高速)な「LittleFS」に移行しつつあるようです。上記のライブラリも少し改造することで「LittleFS」を使ったアクセスに変更することができます。
SPIFFSからLittleFSへの変更点
プログラムでLittleFSに変更するには、「SPIFFS.begin()」を「LittleFS.begin()」、「SPIFFS.open()」を「LittleFS.open()」の様に行うことで対応できます。(インクルードも変更します)
今回の実行プログラムは、オリジナルのSPIFFSのまま実行させていきます。
東雲フォントをシリアルモニタに表示させる
(1)準備
#include <ESP32_SPIFFS_ShinonomeFNT.h< //ver beta 1.32
const char* UTF8SJIS_file = </Utf8Sjis.tbl<; //UTF8 Shift_JIS 変換テーブルファイル名を記載しておく
const char* Shino_Zen_Font_file = </shnmk16.bdf<; //全角フォントファイル名を定義
const char* Shino_Half_Font_file = </shnm8x16.bdf<; //半角フォントファイル名を定義
ESP32_SPIFFS_ShinonomeFNT SFR;
#define DISPLINEMAX 16
uint8_t msg_buf[44][16] = {0};
uint16_t msg_data[22][DISPLINEMAX] = {0};
uint16_t msg_sj_length;
void displayFontData( int len ) {
// フォントを表示
for (int c = 0; c < len; c = c + 1 ) {
for (int i = 0; i < DISPLINEMAX; i = i + 1 ) {
Serial.printf("%04x : ", msg_data[c][i] );
for (int j = 15; j >= 0; j--) {
if ( ( msg_data[c][i] & (1 << j) ) != 0 ) {
Serial.printf("*");
} else {
Serial.printf(".");
}
}
Serial.printf("\n");
}
Serial.printf("\n");
}
}
String message="本日は晴天なり";
void setup() {
Serial.begin(115200);
//フォントファイル(SPIFFS)オープン
SFR.SPIFFS_Shinonome_Init3F(UTF8SJIS_file, Shino_Half_Font_file, Shino_Zen_Font_file); //ライブラリ初期化。2ファイル同時に開く
// 漢字フォント取得
msg_sj_length = SFR.StrDirect_ShinoFNT_readALL( message, msg_buf );
// フォントデータを16bitデータに変換
for(int xx=0; xx<message.length()/3; xx++){
for(int yy=0; yy<16; yy++){
msg_data[ xx ][ yy ] = ( msg_buf[ xx * 2 ][ yy ] << 8 ) | msg_buf[ xx * 2 + 1 ][ yy ];
}
for(int yy=16; yy< DISPLINEMAX; yy++){
msg_data[ xx ][ yy ] = 0;
}
}
Serial.println( message );
// フォントを表示
displayFontData( message.length()/3 );
}
void loop() {
}
(2)SPIFFSにファイルを転送
(3)実行結果の確認
表示するメッセージはプログラムの31行目の「本日は晴天なり」表示します。シリアルモニタを確認すると、フォントファイルを処理後に、BDFフォントの16進データとそのビットデータを表示させています。
右の図では、「本」の文字がビットデータになっている様子が分かります。
このデータをLEDマトリックスに表示すると、漢字が表示できるようになります。


0 件のコメント:
コメントを投稿