TFT_eSPIを使って日本語を表示する方法はWebに幾つか有りますが、loadFont関数を使用して表示するのが一番簡単と思います。
vlw形式のフォントが必要
TFT_eSPIで表示出来るフォントのフォーマットはvlw形式です。まずはこの形式のフォントを入手する必要が有ります。Arduino IDEのスケッチ例にパソコンシステムのフォントをこの形式に変換してくれるスケッチが有ります。場所は ファイルー>スケッチ例ー>TFT_eSPIー>Toolsー>Create_Smooth_Fontー>Create_Font

このスケッチをコンパイルしたらエラーが出てコンパイル出来ません。スケッチを見たらトップに// This is a Processing sketch, see https://processing.org/ to download the IDE と有り、Arduinoでは無くProcessing用のスケッチでした。
Processing自体何の事か分からず、Webで検索していたら、”M5Stackで好きなフォントを使う”を見つけました。ここにはProcessingの導入方から上記のスケッチの使い方等の説明が有り説明通りにやって行くと確かにシステムのフォントをvlw形式に変換出来るのですが”Unicodeのコードポイント”の指定が良く分からず、もっと簡単にフォントを入手出来ないか検索した所、”M5Stack の LCD に TFT_eSPI を使って日本語フォント “源真ゴシック” で表示する”を見つけました。ここには既にvlw形式に変換された”源真ゴシック Regular”が有り今回はフォントサイズ 20ptをダウンロードして使う事にしました。
使い方
ダウンロードした”フォントサイズ 20pt; genshin-regular-20pt.vlw (5.0 MB)”をSDカードに保存してフォント使用前にフォントを読み込めば後は通常と同じ使い方です。サンプルスケッチは以下、
j_font.ino
#include "SPI.h"
#include <FS.h>
#include <SD.h>
#include <TFT_eSPI.h>
SPIClass sd_spi(HSPI);
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
sd_spi.begin(26, 25, 33, 4);
if(!SD.begin(4, sd_spi)){
Serial.println("Card Mount Failed");
return;
}
// 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("/font/genshin-regular-20pt", SD); // 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:
}
- 13,14行 : SDカードの初期化
- 20,24行 : LCDの初期化
- 26,27行 : フォントの読み込み。読み込みに若干時間がかかります。
- 29行以下 : 日本語フォントの表示。drawString()を使用。
実行結果(以下)LCDに日本語が表示されました。

tft.drawString()の最後の引数は文字の大きさと種類を指定していましたが、今回は何を指定してもロードしたフォントが表示されました。引数を省略しても関数は動作しました。逆に言えば、ロードしたフォントしか表示出来ません。
最後に
今回で ”TFT_eSPIを使う” を終了します。これらはアプリGUI製作に非常に役立ちます。