Edited at
IoTLTDay 8

NefryBTで日本語表示させてみる

More than 1 year has passed since last update.

前日の記事は @ykarakita さんで、AWS DeepLensのトレーニング済みサンプルモデル全部試す! でした。

AWS DeepLensうらやましくなんか…!うぅ

さて、本日はNefryBTで何かやるということでしたが、日本語フォントを表示してみました。


概要

NefryBTに日本語を表示させよう!


既存プロジェクトの調査

Arduino上で日本語を表示させるプロジェクトは、いくつかあります。


Arduino-misakiUTF16

https://github.com/Tamakichi/Arduino-misakiUTF16

解説記事:http://nuneno.cocolog-nifty.com/blog/2016/03/arduino-e818.html

Arduinoに美咲フォントを組み込むプロジェクト。

簡単に使えるがライセンスが不明。

まあアドベントカレンダーで使うぐらいなら大丈夫でしょう。


ESP8266-KanjiFont-Library-SPIFFS

https://github.com/Tamakichi/ESP8266-KanjiFont-Library-SPIFFS

上の美咲フォントのライブラリの上位(?)プロジェクト。

こちらはライセンス表記ありで独自ライセンス。


ShinonomeFONTread

https://github.com/mgo-tec/ShinonomeFONTread

解説記事:https://www.mgo-tec.com/blog-entry-adafruit-oled-ssd1351-lib01.html

Arduinoに東雲フォントを組み込むプロジェクト。

MITライセンス。


作ってみよう

今回はライブラリの依存が少なく、導入方法がシンプルなArduino-misakiUTF16を使うことにしました。


ライブラリの改造

そのままだとESP系のデバイスで動かそうとするとコンパイルエラーになってしまうので、

少し書き換えました。

#include <avr/pgmspace.h>

#if defined(ESP8266) || defined(ESP32) || defined(ESP31B)

#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif

プロジェクトをForkしてパッケージにしておきました。

使いたい場合は、ArduinoIDEの.ZIP形式のライブラリのインクルードでインストールできます。

misakiUTF16_1.04.zip


サンプルコードの作成

とりあえず雑に作ったサンプルが以下になります。


nefry_misaki_font.ino

#include <Nefry.h>

#include <NefryDisplay.h>
#include <NefrySetting.h>
#include <misakiUTF16.h>

void setting(){
Nefry.disableDisplayStatus();
}
NefrySetting nefrySetting(setting);

void misakiPrint(int x, int y, char * pUTF8) {
int n=0;
byte buf[20][8]; //160x8ドットのバナー表示パターン
while(*pUTF8)
pUTF8 = getFontData(&buf[n++][0], pUTF8); // フォントデータの取得

// 文字の描画
for (byte i=0; i < 8; i++) {
for (byte j=0; j < n; j++) {
for (byte k=0; k<8;k++) {
if(bitRead(buf[j][i],7-k)) {
NefryDisplay.setPixel(x + 8*j + k , y + i);
}
}
}
}
}

void setup() {
NefryDisplay.clear();
misakiPrint(0,0, "みさきフォントで書き出してみる☆");
misakiPrint(0,16, "5000兆フロップス欲しい!!");
misakiPrint(0,24, "5000兆フロップス欲しい!!");
misakiPrint(0,32, "5000兆フロップス欲しい!!");
misakiPrint(0,40, "5000兆フロップス欲しい!!");
NefryDisplay.display();

delay(5000);

NefryDisplay.clear();
misakiPrint(60,28, "ざわ…");
NefryDisplay.display();

delay(1500);
misakiPrint(15,50, "ざわ…");
NefryDisplay.display();

delay(1500);
misakiPrint(80,36, "ざわ…");
NefryDisplay.display();

delay(1500);
misakiPrint(20,3, "ざわ…");
NefryDisplay.display();

}

void loop() {
}


動かしてみた。

ざわざわ便利ですね。これを発明した福本伸行先生は天才ですね。


さいごに

ディスプレイに日本語が表示できると、可能性が広がりますね。

ゆくゆくはNefryのファームウェアに組み込めればいいのですが、その場合はライセンスがクリアなライブラリを採用すべきですね。

今後もNefryBTの使い道を広げていきましょう。

明日は @algopia さんで、画像認識とIoTの話らしいです。お金になりそうな話ですね…!