ESP8266(WROOM-02) で WiFiマイクロターミナルを作る その(4) 日本語フォント表示
◯やりたいこと
その(3)で準備した漢字フォントを実際に表示してみる
◯やったこと
漢字フォントのフラッシュメモリへのアップロードや表示ライブラリのインストールはその(3)で終了していますので、今回は実際にそのフォントをOLEDに表示してみます。
作ってみたスケッチは以下の通り。
// Standerd Library #include <Arduino.h> #include <Wire.h> // Include Library /* OLED (SSD1306) */ #include <Adafruit_SSD1306.h> #include <espfonts.h> // Global Value /* I2C */ #define I2C_SDA 2 // D2 #define I2C_SCK 0 // D0 #define I2C_CLK 50000 // fSCL=50KHz /* OLED */ #define OLED_ADR 0x3C // I2C ADDRESS #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height,in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); /* ESP FONT */ extern espfonts ESPfonts; ///// ハードウエア 初期設定 void setup() { // I2C 初期化 Wire.begin (I2C_SDA, I2C_SCK); Wire.setClock(I2C_CLK); // OLED(SSD1306) 初期化 display.begin(SSD1306_SWITCHCAPVCC, OLED_ADR); display.clearDisplay(); // ESP FONT 初期化 ESPfonts.init(); ESPfonts.open(); // 漢字描画 String msg; msg = "0Aa東京都"; // 8x8 ESP_print( 0, 0,0,"漢字ターミナル"); // 10x10 ESP_print(64, 0,1,msg); // 12x12 ESP_print( 0, 9,2,msg); // 14x14 ESP_print(64, 9,3,msg); msg = "0A東京"; // 16x16 ESP_print( 0,22,4,msg); // 20x20 ESP_print(64,22,5,msg); msg = "0Aa東京都"; // 24x24 ESP_print( 0,40,6,msg); display.display(); } void loop() { } // void ESP_print(uint8_t x, uint8_t y, uint8_t fnt, String str) { // 漢字フォント表示 if (fnt>=0 && fnt<=6) { // String->char変換 int str_len = str.length() + 1; char msg[str_len]; str.toCharArray(msg, str_len); // フォント指定 ESPfonts.setFontSizeAsIndex(fnt); uint8_t fontB[ESPfonts.getLength()]; // 文字列表示 char *ptr = msg; while(*ptr) { // フォントパターン取得 ptr = ESPfonts.getFontData(fontB, ptr); if (!ptr) break; // フォントサイズ取得 uint8_t fontW = ESPfonts.getWidth(); uint8_t fontH = ESPfonts.getHeight(); // 改行チェック(スクロールなし) if (x+fontW >= SCREEN_WIDTH) { x=0; y+=fontH; } // フォント描画 display.drawBitmap(x,y,fontB,fontW,fontH,WHITE); x+=fontW; } } }
ESP_print()と言う関数を作って7つの各フォントを半角文字と一緒に表示させてみました。
x座標(0-127)、y座標(0-63)、利用フォント(0-6)、文字列(string)を指定して呼び出すとドット座標(x、y)を左上角とした位置に指定されたフォントで文字列を表示します。
Tamakichiさんのライブラリはとてもよく出来ていて、びっくりするほど簡単に漢字フォントを表示することができました。半角全角もライブラリ側で判断してフォントを選んでくれますし、7種類のフォントを自由に選べる点もすごい。ホント感謝です。
◯やってみて
これでWiFiコンソールを漢字化するノウハウが手に入りましたのでさっそくその(1)、(2)で作成したコンソールの漢字化に着手していきます。