[実験] Arduino(M5StickC)でefont Unicodeフォント表示 SPIFFS版

/efont/さんのUnicode Fontを利用して、Arduino用のフォントライブラリを作ってみました。

PROGMEMだとプログラム転送時に毎回大きなフォントデータも転送する必要があるので、一度転送すればよいSPIFFSで作ってみました。

※現時点の情報ですので、最新情報はM5StickC非公式日本語リファレンスを確認してください。

注意

こちらは実験ですので、実際に使う場合には以下のページを参考にしてください。

利用フォント

Unicode Font from /efont/

上記のf16.bdfとb16.bdfを利用させていただき、16ピクセルフォントを作成しました。

作成物

GitHub - tanakamasayuki/efontUTF16spiffs: efont UTF16 Font Data(SPIFFS) for Arduino
efont UTF16 Font Data(SPIFFS) for Arduino. Contribute to tanakamasayuki/efontUTF16spiffs development by creating an acco...

上記にとりあえず置いてみました。

フォントサイズ

1.4Mぐらいになりました。SPIFFSなので/efont/が収録しているUTF16のBMP文字はすべて取り込んであります。

実行結果

PROGMEM版と同じなのですが、最初1文字単位だと遅かったので、複数の文字を転送してから描画しています。SPIFFSだとやっぱりファイルオープンに時間がかかりますね。

サンプルコード

#include <M5StickC.h>
//#define EFONT_BUF_SIZE 64
#include "efontUTF16spiffsM5StickC.h"

void setup() {
  M5.begin();
  M5.Lcd.setRotation(0);
  M5.Lcd.setCursor(0, 0);

  printEfont("新しい朝が来た希望の朝がabcd12345()+-12345", 0, 16*0);
}

void loop() {
}

PROGMEM版と比べると、フォント指定がなくなって、バッファサイズの指定が増えています。4とかに変更して実行してもらえればわかりますが、結構遅いので最大文字数より大きくしたほうがいいです。

まとめ

描画自体も遅いのですが、やっぱりSPIFFSのファイルロード時間も結構気になってしまいます。

必要な文字単位でPROGMEMに保存する方が、データ検索に時間がかかりますが使いやすいかもしれないですね。ちょっとそっちも検討してみます。

コメント