概要
TFT_eSPIを使って日本語を表示する方法はWebに幾つか有ります。loadFont関数を使用して表示するのが一番簡単と思います。
vlw形式のフォントが必要
TFT_eSPIで表示出来るフォントのフォーマットはvlw形式です。まずはこの形式のフォントを入手する必要が有ります。 Webで検索したところ、”M5Stack の LCD に TFT_eSPI を使って日本語フォント “源真ゴシック” で表示する” を見つけました。ここには既にvlw形式に変換された”源真ゴシック Regular”が有り今回はフォントサイズ 20ptをダウンロードして使う事にしました。
使い方
ダウンロードした”フォントサイズ 20pt; "genshin-regular-20pt.vlw (5.0 MB)” をSDカードに保存。関数を使ってそれを読み込めば後は通常と同じに使えます。以下はサンプルスケッチ
#include "SPI.h"
#include <FS.h>
#include <SD_MMC.h>
#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();
//------------ SD_MMC 1-wire SD mode ----------------------------
#define mmc_CMD 21
#define mmc_CLK 48
#define mmc_D0 47
#define SDMMC_FREQ 30000
#define MAX_FILE 3
void setup() {
Serial.begin(115200);
// Initialise the SD_MMC
pinMode(mmc_D0, INPUT_PULLUP);
SD_MMC.setPins(mmc_CLK, mmc_CMD, mmc_D0);
if(!SD_MMC.begin("/sdmmc", true, false, SDMMC_FREQ, MAX_FILE)){
Serial.println("Card Mount Failed");
return;
}
else Serial.println("SD_MMC initialisation OK");
// Now initialise the TFT
tft.begin();
tft.setRotation(1); // 0 & 2 Portrait. 1 & 3 landscape
tft.fillScreen(TFT_BLUE);
tft.setTextDatum(TL_DATUM);
tft.setTextColor(TFT_WHITE, TFT_WHITE);
Serial.println("\nLoading Font");
tft.loadFont("/genshin-regular-20pt", SD_MMC); // Use font stored on SD
tft.drawString("日本語フォントのテストです", 50, 60, 1);
tft.drawString("あいうえお", 50, 100, 1);
tft.drawString("カキクケコ", 50, 140, 1);
tft.drawString("価格が高騰するコメ", 50, 180, 1);
}
void loop() {
// put your main code here, to run repeatedly:
}
- フォントはSDカードのルートに保存しています。
- 36行:tft.loadFont("/genshin-regular-20pt", SD_MMC);
- ここでフォントを読み込んでいます。
- 第一引数:フォントデータファイル名
- 第二引数:ファイルシステム
- 実行結果は以下の通り
若干潰れ感は有りますが十分読めます。サイズをこれより小さくすると更に潰れ感が増し 大きくすると表示文字数が減り、20位がちょど良さそうです。
最後に
今回で ”TFT_eSPIを使う” は終了です。当初SDカードを使わなければ配線はいりませんと言いましたが 画像やフォントの表示を考えると絶対必要と思います。このLCDの製造メーカもそれを見越してソケットを付けてくれたと思います。
ここまで見て来てこのライブラリはアプリGUI製作に非常に役立つと思いました。