とりあえず、気軽に使えそうなライブラリで日本語実験です。
※現時点の情報ですので、最新情報はM5StickC非公式日本語リファレンスを確認してください。
注意
こちらは実験ですので、実際に使う場合には以下のページがおすすめです。
利用 ライブラリとフォント
上記をお借りいたしました。
コード
#include <M5StickC.h>
#include "misakiUTF16.h"
void setup() {
M5.begin();
M5.Lcd.setRotation(3);
M5.Lcd.setCursor(0, 0);
writeKnj("新しい朝がきた希望の朝が\n123\n");
M5.Lcd.setTextSize(2);
writeKnj("新しい朝がきた希望の朝が\n123\n");
M5.Lcd.setTextSize(3);
M5.Lcd.setTextColor(RED, BLUE);
writeKnj("新しい朝がきた希望の朝が\n123\n");
}
void loop() {
}
void writeKnj(char *str) {
int posX = M5.Lcd.getCursorX();
int posY = M5.Lcd.getCursorY();
uint8_t textsize = M5.Lcd.textsize;
uint32_t textcolor = M5.Lcd.textcolor;
uint32_t textbgcolor = M5.Lcd.textbgcolor;
byte font[8];
while( *str != 0x00 ){
// 改行処理
if( *str == '\n' ){
// 改行
posY += 8 * textsize;
posX = M5.Lcd.getCursorX();
str++;
continue;
}
// 文字横幅
int width = 8 * textsize;
if( *str < 0x80 ){
// 半角
width = 4 * textsize;
}
// フォント取得
str = getFontData( font, str );
// 背景塗りつぶし
M5.Lcd.fillRect(posX, posY, width, 8 * textsize, textbgcolor);
// 取得フォントの描画
for (uint8_t row = 0; row < 8; row++) {
for (uint8_t col = 0; col < 8; col++) {
if( (0x80 >> col) & font[row] ){
int drawX = posX + col * textsize;
int drawY = posY + row * textsize;
if( textsize == 1 ){
M5.Lcd.drawPixel(drawX, drawY, textcolor);
} else {
M5.Lcd.fillRect(drawX, drawY, textsize, textsize, textcolor);
}
}
}
}
// 描画カーソルを進める
posX += width;
}
// カーソルを更新
M5.Lcd.setCursor(posX, posY);
}
実行結果

さすがに8ドットフォントだと文字が小さいですね。東雲フォントの16ドットぐらいだときれいに表示されるかな?
実験としては描画は問題なさそうなので、もう少し他のフォントで実用レベルのライブラリを作りたいと思います。
SPIFFSは事前転送とかが面倒そうなので、オンメモリで動かすことを前提として進めていく予定です。




コメント