/efont/さんのUnicode Fontを利用して、Arduino用のフォントライブラリを作ってみました。
※現時点の情報ですので、最新情報はM5StickC非公式日本語リファレンスを確認してください。
注意
こちらは実験ですので、実際に使う場合には以下のページを参考にしてください。
利用フォント
Unicode Font from /efont/
上記のf16.bdfとb16.bdfを利用させていただき、16ピクセルフォントを作成しました。
作成物
GitHub - tanakamasayuki/efontUTF16progmem: efont UTF16 Font Data(PROGMEM) for Arduino
efont UTF16 Font Data(PROGMEM) for Arduino. Contribute to tanakamasayuki/efontUTF16progmem development by creating an ac...
上記にとりあえず置いてみました。
フォントサイズ
| 対象フォント | ファイル名 | フォント容量 |
| UNICODE(BMP)全部 | 1,441,792 | |
| フォント無し | efontUTF16DisableAll.h | 0 |
| 漢字以外 | efontUTF16DisableCJK.h | 507,904 |
| ハングル以外 | efontUTF16DisableHang.h | 1,081,344 |
| 漢字のみ | efontUTF16OnlyCJK.h | 1,007,616 |
| 常用漢字のみ | efontUTF16OnlyMiniJapanese.h | 753,664 |
全部入れたところ、1.4Mぐらいになりましたので、少し減らすオプションを作りました。指定ファイルを事前に読み込むことで、対象フォントを絞り込むことができます。
256文字単位で管理しているので、ざっくりとしか間引けませんので常用漢字など飛び飛びでいろんな場所に分散しているものは、1文字単位で読み込んだ方が良さそうです。
実行結果

サンプルコード
#include <M5StickC.h>
#include "efontUTF16progmemM5StickC.h"
void setup() {
M5.begin();
M5.Lcd.setRotation(0);
M5.Lcd.setCursor(0, 0);
printEfont("Hello", 0, 16*0);
printEfont("こんにちは", 0, 16*1);
printEfont("你好", 0, 16*2);
printEfont("안녕하세요", 0, 16*3);
printEfont("Доброе утро", 0, 16*4);
printEfont("Päivää", 0, 16*6);
printEfont("Здравствуйте", 0, 16*7);
}
void loop() {
}
上記でUNICODE(BMP)全部が読み込まれます。描画部分は端末依存なのでM5StickC以外の端末で使う場合にはefontUTF16progmemM5StickC.h相当の処理を自作してください。
#include <M5StickC.h>
#include "efontUTF16progmemOnlyMiniJapanese.h"
#include "efontUTF16progmemM5StickC.h"
void setup() {
M5.begin();
M5.Lcd.setRotation(0);
M5.Lcd.setCursor(0, 0);
printEfont("Hello", 0, 16*0);
printEfont("こんにちは", 0, 16*1);
}
void loop() {
}
常用漢字しか使わないのであれば、上記のようにすればプログラムサイズを減らすことができます。
容量的にはSPIFFSで1.4Mのフォントデータを転送して使うのが楽そうな気がしますのでSPIFFSを使ったバージョンも作ってみたいと思います。


コメント