Arduinoプログラミング手法-(6)ATtiny85にOLEDを繋ぐ

前々回と前回で紹介したSPI/TWIテンプレートクラスの使い方を、お値段の安さに釣られ衝動買いしてしまった秋月電子の小さなOLED用のライブラリを例にして紹介。

0.96インチ 128×64ドット有機ELディスプレイ(OLED)

初めて使うデバイスなのでとりあえずググってみたら有名どころがいくつか見つかった。早速、使ってみようと思ったらコードもデータもバカでかくてATtiny85には入らない。ArduinoといいつつATtiny85好きな私には、ATtiny85にOLEDを繋いでみましたって記事がないのはなぜだろうと以前から思っていたが、こういうことだったとは...(-_-;)

だからといってMCUを変える気などさらさらないし誰もやってないほうがやりがいもあるので作ってみることにしたがまずドキュメントを見てControl-byteのContinuation-bitの意味がなかなか理解できなかった。だがデータを受け取るデバイス側の気持ちになって考えてみてようやく理解できた。ようするに知ってることしか知らないので知らない未知のコマンドが来た時にも正しくコマンドサイズを解釈できるようにするためのものだということだ。これが理解できればあとはそう難しいことはない。また、性能面では若干デメリットにはなってしまうが互換仕様のSH1106でもそのまま使えるように共通コマンドのみを利用している。(SH1106が手元にないので試してないけど...)

SSD1306/SH1106はシリアルインターフェースでのGRAM読み込みができないことからグラフィックス対応にはGRAMと同じ容量のメモリを確保し、そのメモリを書き換えた後にメモリ全体を転送するのが通常の方法であると思うが、その方法だと1024バイトものメモリが必要になってしまうし性能もそれなり。ATtiny85のメモリは512バイトしかなくどうあがいても普通の方法は無理であることから文字のみの対応としているが、多少の制限とより低い性能が許容できるなら数十バイト程度のメモリしかなくてもグラフィック対応する方法はある。が、ATtiny85のコード量にもあまり余裕がないというかライブラリのみでお腹一杯にするわけにもいかないし対応する価値があるかどうかは微妙な感じ。いつか気が向いたら実験してみることにしよう。

【続編】
ATtiny85で128×64グラフィック描画を試す
ATtiny85で128×64グラフィック描画を再挑戦してみた。
ATtiny85+OLEDでストップウォッチ&タイマーを作ってみた。

なお、フォントは美咲フォント(8×8)(ANK文字のみ抜粋)を有り難く使わせて頂きました。老眼の人にはちと厳しい大きさ。だが、ATtiny85にはこれくらいのフォントしか入らない...(-_-;)

美咲フォント

フォントは漢字まで含めるとかなりのメモリ量になるのでフォントROMとかSDカードを使うのが良いのかもしれない。なんとなくI2Cで使える漢字フォントROMってのがあると便利かなとも思うが、そこまでするならRaspberry PiなどのLinuxにすべきか...

【文字で全画面書き換えするプログラム】

このライブラリは、SPIやTWIのヘッダーファイルなど何もインクルードしてないのに、それらのメソッドを呼び出して動作する。なぜそんなことができるのか考えてみて。テンプレートって素晴らしいな!!

【SSD1306ライブラリ】

【SSD1306フォントデータ】