micro:bitのLEDに温度などの数値を表示すると、スクロールして読み取りに苦労することがあります。そこで、比較的安価で手に入るOLEDディスプレーをつないでみることにしました。
制御チップにSSD1306を使ったものなら、MakeCodeエディターで拡張機能を使ってブロックプログラミングができます。
今回はこれを使ってみました。
中国直送のものなら半額ぐらいであります(到着までに時間がかかる)。
購入したディスプレーにはピンヘッダーが別パーツで付いていたので、自分ではんだ付けしました。出ている端子は、VCC/GND/SCL/SDAで、micro:bitのエッジコネクターと次のようにつなぎます。
VCC → 3V(または17/18ピン)
GND → GND(または21/22ピン)
SCL → 19ピン
SDA → 20ピン
実験的につなぐなら、BBC micro:bit用エッジコネクタピッチ変換基板を使うのが簡単です。
micro:bitとディスプレーの接続ができたら、MakeCodeエディターに拡張機能を追加します。
右上の歯車マーク→「拡張機能」で、「SSD1306」を検索。
ちょっと前までは右上の2つしかなかったはずが、合計6種類に増えていました。それぞれ機能が微妙に違うので、試してみるといいでしょう。
まずは、今までポピュラーだった右上の「OLED12864_I2C」を入れてみます。プログラムはこんな感じ。
ディスプレーの解像度は128×64ドットありますが、ドット絵のような文字が表示されます。全体の文字数は、13X4文字。1行目は黄色になってますが、残念ながら色の指定ができるわけではありません。このディスプレーは、1行目相当部分が黄色固定、残りは青色固定になっています。
次に、新興のXinaBoxのモジュール用に用意されている拡張機能「OD01」を入れてみます。ちなみに、XinaBoxのモジュールには、micro:bitにWi-Fi機能を付けるものがあったりして面白そうです(日本では使えませんが)。
「OD01」の方が用意されているブロックが多くて、機能も豊富。21×8文字表示できます。ただし、文字は小さくてちょっと読みにくいかもしれません。「OLED12864_I2C」のドット絵風もかわいいので、お好みで。
注意点としては、今回使ったディスプレーのI2Cアドレスが、たまたまXinaBoxの「OD01」と同じだったのですが、違う場合はこの拡張機能は使えないかもしれません。SSD1306を使ったOLEDディスプレーには、I2Cアドレスが60(0x3C)と61(0x3D)のものがあるようです。
[追記]
OLEDディスプレーの裏面を見ると、I2Cアドレスを変更できるようになっていました。抵抗が「0x78」側にあれば「0x3C」、「0x7A」側なら「0x3D」になります。でも、抵抗が面実装用のとても小さなチップなので、自分で変更するのは難しそうです。