ESP8266で有機ELディスプレイ
本来、ESP8266をセンサーハードウェアと考えると、ディスプレイなど必要ないのですが、試作やデバック時には動作状態を表示できるデバイスがあると心強いです。シリアルコンソールだと別途PCが必要ですし、Webサーバとしてスマホからアクセス・・・でもいいですが、最初の1歩目をどうするか(WiFiのSSIDの設定とか!)という問題が残ります。
そこでAliexpressでi2c接続の0.96インチ有機ELディスプレイを買いました。中華クォリティよろしく、写真と全く異なる物理形状ピンアサインのものが届いたけど、一応問題なく動作したので文句は言わないことにします。
esp8266-oled-ssd1306ドライバ
Arduino用のドライバは、squix78/esp8266-oled-ssd1306を使いました。非常に高機能のようですが、単純に使うこともできます。
初期化
SSD1306 display(oled_addr, I2C_SDA_PIN, I2C_SCL_PIN); display.init(); display.flipScreenVertically(); display.displayOn();
画面の削除と更新
display.clear(); display.display();
文字列描画
display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(99, 54, string);
ビットマップ表示
display.drawXbm(72, -8, clouds_width, clouds_height, (const char*)clouds_bits);
これだけでも十分過ぎるくらい便利です。
使用感など
このライブラリ、標準フォントもとても綺麗で128×64しかないディスプレイでもかなりの情報を表示することができました。マジお勧めです。
あとわずか$5の有機ELモジュールも、反射液晶などとは見え方が全然違って、画面自体は小さくても、かなり遠くからでも視認できます。いつまで持つか(安い有機ELはシーリングが甘く寿命が短い)は未知数ですが、工作用としては十分以上です。
なお、ESP8266との接続はSDAをIO5, SCLをIO4に割り当てることでスムーズに接続できました。たぶんESP8266 SDKのWireクラスのデフォルト値でもあるでしょうから、他のデバイスとの共存も容易にできることでしょう。
とりあえず、今は天気予報時計を作っています。