05.CoreInkで日本語表示2


5.CoreInkで日本語表示2

18~30ドットのフォントを探しました。LovyanGFXライブラリ, lgfxJapanフォント, efontJAフォントについて

インストール

Arduino IDE > ツール > ライブラリを管理 > 「LovyanGFX」を検索 > 「LovyanGFX by lovyan03」をインストール(Ver0.3.8でした) > 閉じる

サンプル

Arduino IDE > ファイル > スケッチ例 > LovyanGFX >
  • Advanced > ・・・
  • Game   > ・・・
  • HowToUse > 3_font
  • Sprite  > ・・・
  • Standard > ・・・
  • Test   > ・・・
と解説がいろいろあります。

らびやんさん開発の画面描画ライブラリLovyanGFXがGitHubにてオープンソースソフトとして公開しています。
lovyan03 > LovyanGFX
https://github.com/lovyan03/LovyanGFX

対応ディスプレイ

  • ILI9342 (M5Stack, M5Stack Core2)
  • GDEW0154M09 (M5Stack CoreInk)
  • IT8951 (M5Paper)
  • ST7735 (M5StickC)
  • ST7789 (M5StickCPlus) など

M5Stack.hと共存させる方法

M5Stackライブラリと共存するのにM5Displayの定義が重なるため
#include <M5Stack.h> より後に
#include <LovyanGFX.hpp> を書く。
M5.Lcdは使わずに、LGFXのインスタンスを用意して使用。

以下のフォントはLovyanGFXにプリセットされています。

lgfxJapanフォント

フォントlgfxJapan[A]_[B]にて書体とサイズを指定
  • [A]:Mincho(明朝),
    MinchoP(英数がプロポーショナルな明朝),
    Gothic(ゴシック),
    GothicP(英数がプロポーショナルなゴシック)
    の4書体
  • [B]:(8,12,16),20,24,28,(32,36,40)の9サイズ
4x9=36種類で、日本語のみ
例) 日本語ゴシックで20ドットは、lgfxJapanGothic_20

lgfxJapanGothic_20, lgfxJapanGothic_24, lgfxJapanGothic_28の表示例
* いろいろなサイズがあるが、かすれ、にじみがある。

efontJA_24フォント

フォント efont[A]_[B][C] にて言語、サイズ、装飾を指定
  • [A]:JA(日本語),
    CN(中国語簡体字),
    TW(中国語繁体字),
    KR(韓国語)の4種類
  • [B]:10,12,14,16,24の5サイズ
  • [C]:無し(標準), _i(イタリック), _b(太字), _biの4装飾
* 計4x5x4=80種類で、拡大もできる。
例) 日本語、24ドット、標準は、efontJA_24

efontJA_16の表示例 (文字の高さは約2mm)

efontJA_16_bの表示例

efontJA_24の表示例 (文字の高さは約3mm)

efontJA_24_bの表示例 これが良さそう。
* フォントを2つ入れるとメモリーオーバーになる。

(参考)M5Stack CoreInkの使い方 その2 日本語フォントや描画拡張(2020/12/20)
https://lang-ship.com/blog/work/m5stack-coreink-2-font/

スケッチ


#include "M5CoreInk.h"
//#include <efontEnableAll.h>         // フォント 全て
#include <efontEnableJaMini.h>        // フォント 日本語ミニ
#include <efontFontData.h>            // efontのフォントデータ
#include <LovyanGFX.hpp>              // 描画ライブラリ
Ink_Sprite inkPageSprite(&M5.M5Ink);  //
static LGFX_Sprite sprite;            // 定義

// 1画面表示関数
void pushSprite(Ink_Sprite *coreinkSprite, LGFX_Sprite *lgfxSprite) {
  coreinkSprite->clear();            //
  for (int y = 0; y < 200; y++) {    // 縦方向0-199
    for (int x = 0; x < 200; x++) {  // 横方向0-199
      uint16_t c = lgfxSprite->readPixel(x, y);  //
      if (c == 0x0000) {                  //
        coreinkSprite->drawPix(x, y, 0);  //
      }
    }
  }
  coreinkSprite->pushSprite();  // アロー演算子
}

void setup() {
  M5.begin();               // E-Ink,RTC,I2C,スピーカーを初期化
  M5.M5Ink.isInit();        // 初期化し、  
  M5.M5Ink.clear();         // 呼び出す
  inkPageSprite.creatSprite(0, 0, 200, 200, false);
  // 画像領域を作成し、画面ドライバーから画像データバフを取得しない
  sprite.setColorDepth(2);  // 2ビットパレットモードに設定
  sprite.createPalette();   // パレットモードにする?
  sprite.createSprite(200, 200);  // 200x200でスプライトを作成
  sprite.clear(TFT_WHITE);        // 全体の背景色を白

  //sprite.setFont(&fonts::efontJA_16);       // efont日本語16ドット
  sprite.setTextColor(TFT_BLACK, TFT_WHITE);  // (文字色,背景色)
  //sprite.print("efontJA_16快晴,晴れ,薄曇り,曇り,煙霧,砂じん嵐,地ふぶき,霧,霧雨,雨,みぞれ,雪,あられ,ひょう,雷\n");

  //sprite.setFont(&fonts::efontJA_24);       // efont日本語24ドット
  //sprite.print("efontJA_24快晴,晴れ,薄曇り,曇り,煙霧,砂じん嵐,地ふぶき,霧,霧雨,雨,みぞれ,雪,あられ,ひょう,雷\n");

  //sprite.setFont(&fonts::efontJA_16_b);     // efont日本語16ドット太字
  //sprite.print("efontJA_16_b快晴,晴れ,薄曇り,曇り,煙霧,砂じん嵐,地ふぶき,霧,霧雨,雨,みぞれ,雪,あられ,ひょう,雷\n");

  sprite.setFont(&fonts::efontJA_24_b);       // efont日本語24ドット太字
  //sprite.print("efontJA_24_b快晴,晴れ,薄曇り,曇り,煙霧,砂じん嵐,地ふぶき,霧,霧雨,雨,みぞれ,雪,あられ,ひょう,雷\n");
  sprite.print("efontJA_24_b快晴,晴れ,薄曇り,曇り,煙霧,砂じん嵐,地ふぶき,霧,霧雨,雨,みぞれ,雪,あられ,ひょう,雷,快晴,晴れ,薄曇り,曇り,煙霧,砂じん嵐,地ふぶき,霧,霧雨,雨,みぞれ,雪,あられ,ひょう,雷\n");
  pushSprite(&inkPageSprite, &sprite);       // 1画面表示関数へ
}
void loop() {
  delay(1);  // 1mS待つ
}