Adafruit_ILI9341に漢字表示機能追加

160907a0Adafruit_ILI9341クラスを拡張し、fontxの描画機能を組み込み、漢字を表示できるようになった。クラス名はHumblesoft_ILI9341でGitHubで公開している。zipでダウンロードし、Arduino で”.ZIP形式のライブラリをインストール”すれば使えるようになるはず。

サンプルとして同梱しているのは、文市(あやち)さんがblogで公開されているILフォント、IPAフォントをfontx化したもの。小さいフォントが多いfontxには珍しく、16,24,32dotのフォントが提供されているのがありがたい。今回は16dotのフォントを使用したが、フラッシュの空き容量からすると24dotぐらいまでは使用できそう。

fontxの使用は、通常の文字描画に使用するprint(),println()メソッドで行う。Printクラスのvirtual methodであるwrite()を拡張し、fontxのフォントが設定されていなければ、親クラスのwrite()を呼び出し、設定されていると自前でutf-8のデコード、unicode-shiftjis変換を行い、fontxの文字の描画を行う。C++だと、こんな感じで機能の拡張を行えて便利だ…と久しぶりに思った。

写真はサンプルプログラムkanjiDisp.inoの実行後の状態。ソースプログラムは、こんな感じ。

#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "Humblesoft_ILI9341.h"

IMPORT_BIN("fontx/ILGH16XB.FNT", font_h);
IMPORT_BIN("fontx/ILGZ16XB.FNT", font_z);

extern uint8_t font_h[], font_z[];

Humblesoft_ILI9341 tft = Humblesoft_ILI9341();

void setup() {
  delay(100);
  tft.begin();
  tft.setFontx(font_h,font_z);
  tft.setRotation(3);
  tft.fillScreen(ILI9341_BLACK);

  tft.setTextSize(1);
  tft.print("Humblesoft_ILI9341 漢字表示デモ\nABCDEFGHIJKLMNOPQRSTUVWXYZ\n");
  tft.print("\n");
  tft.print("このプログラムはILフォントを使用しています。");
  tft.print("ILフォントはIPAフォントを元に作成されたfontx形式のフォントです。\n");
    
  tft.setTextSize(4);
  tft.setTextColor(ILI9341_GREEN);
  tft.setCursor(0, tft.getCursorY() + 10);
  tft.print("Hello世界\n");
  tft.setCursor(80, tft.getCursorY() + 10);
  tft.setTextSize(3);
  tft.setTextColor(ILI9341_YELLOW);
  tft.print("ILI9341\n");
}

void loop() {
}

まぁまぁ上手く実装できたのではなかろうか。

あと、NetLCDも対応済。コードを送るだけで漢字を描画できる。

ILI9341にはあと少し拡張したい機能がある。タッチパネルもなんとかしたい。ほかにもやりたいことがいろいろある。さぁ何をしよう。

Comment

  1. 松永正剛 より:

    AruduinoSTM32でHumblesoft_ILI9341をインクルードして漢字を表示させようとしたのですがコンパイルエラーが発生します。
    STM32F103C8t6 BlackPill を使用しているのですが、対応できないのでしょうか?

松永正剛 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。