M5StickCの(というかベースとなっているTFT_eSPIの)テキスト表示機能は謎が多い。M5StickC非公式日本語リファレンスなど親切な情報サイトもあるのだが、私はソースコードを直接見て確認する方が早いし安心できる。ここに調査結果をメモしておくことにする。(→その2)
setTextFont()で選択できるフォント
setTextFont(番号)
で選択できるフォントはこのディレクトリ直下に入っている。
https://github.com/m5stack/M5StickC/tree/master/src/Fonts
どの番号がどのフォントに対応するかがわかるテーブルがここ。
https://github.com/m5stack/M5StickC/blob/24b448915d32fecfbcbe4f09a7a3245e77de155d/src/utility/In_eSPI.h#L618-L663
実際どんなグリフなのかよくわからないので、自分で画像化(M5StickCでSpriteに描画しシリアルで吸い出し)してみた。
Font 1 (glcdfont.c
)
HelloWorldでおなじみ、デフォルトの5x7フォント。非ASCII(文字コード128以上)にもグリフが割り当てられており、UTF-8エンコードされたバイト列を渡せば表示することができる。(実はdrawString
は正しくエンコードしなくてもなんとなく動いてしまう; 理由についてはその2を参照)
Font 2 (Font16.*
)
高さ16ピクセル。文字コード0x60がバッククォートではなく度記号(°)になっている。Font16.c
の #define
をいじれば変えられるようだ。
Font 4 (Font32rle.*
)
高さ26ピクセル。文字コード0x60が度記号なだけでなく、0x24が$ではなく£になっている。
Font 6 (Font64rle.*
)
高さ48ピクセルの数字フォント。時計用途っぽくam/pmが含まれている。
Font 7 (Font7srle.*
)
高さ48ピクセルの7セグLED風の数字フォント。
Font 8 (Font72rle.*
)
高さ75ピクセルのArial数字フォント。M5StickCには大きすぎて少々使いにくい。
setFreeFont()で選択できるフォント
GFXfontへのポインタを setFreeFont(&FreeMono12pt7b)
のように渡して使う。以下ライブラリにバンドルされているものを紹介する。
ところで、これらのバンドルフォントは In_eSPI.h
で豪快に #include
されているのだが、ここ↓に
https://github.com/m5stack/M5StickC/blob/24b448915d32fecfbcbe4f09a7a3245e77de155d/src/utility/In_eSPI.h#L412-L413
// We can include all the free fonts and they will only be built into
// the sketch if they are used
と書いてある。へー、そうなんだ。
Fonts/GFXFFディレクトリにあるもの
GNU FreeFont由来のもの
Adafruit GFX Libraryに付いてくるGNU FreeFont由来のフォントがそのまま同梱されている様子。フォント一覧と名称規則はこちらを参照。
https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts
TomThumb
3x5ピクセルの極小フォント。使ったことないけど。
https://robey.lag.net/2010/01/23/tiny-monospace-font.html
Fonts/Customディレクトリにあるもの
こちらのディレクトリには装飾性の高いフォントが幾つか入っている。
Orbitron
setFreeFont(&Orbitron_Light_24)
setFreeFont(&Orbitron_Light_32)
Roboto
setFreeFont(&Roboto_Thin_24)
Satisfy
setFreeFont(&Satisfy_24)
Yellowtail
setFreeFont(&Yellowtail_32)
以上です(・∀・)