Amazon で HiLetGo の有機 EL パネルを買ってみました。割と情報が多く見つかるのが 0.96 インチのものですが、買ったのは 1.3 インチのものです。また接続形式は I2C ではなく、 SPI でした。
動作を Arduino UNO を用いて確認したのですが、ちょっとポイントがあったので備忘録と、誰かの役に立つかもと思って、記録&公開しておきます。
接続について
Arduino と OLED との接続は以下のようになります(電源接続を除く)。
Fritzing で配線図を書こうと思ったのですが、 HiLetGo OLED と合う物が見つからず…
Adruinoピン | OLEDピン |
---|---|
13 | CLK |
11 | MOSI |
10 | CS |
9 | DC |
8 | RES |
Arduino 側の準備
Arduino IDE から、 “u8glib” というライブラリを追加します。現時点では 1.19.1 というバージョンでした。ライブラリを追加して、メニューのスケッチ例から “GraphicsTest” を選択して、これを用いて動作の確認をします。
このスケッチでは、使用するパネル・コントローラーについて、コメントアウト行を適切に戻すのがまず必要です。
今対象としているパネルでは、 SDD1306 が使用されているようで、解像度は 128×64 という点より、 “U8GLIB_SSD1306_128X64” という箇所を見つけてコメントを外します。
早速実行してみる
準備が整ったので、早速実行してみます。画面が色々と切り替わって動作するのが確認出来ると思います。
しかし、画面表示が整っている状況ではありませんでした。次のように、なにやらおかしな表示結果となっていました。
左端が欠けている&右端にゴミデータが書かれている状況となっており、意図した状態となっていないようです。
ライブラリ側コードを変更する
正常に動作させるために、ライブラリのコードを変更します。
ライブラリに含まれる、”U8glib\src\clib\u8g_dev_ssd1306_128x64.c” のファイルを開いて、以下の該当箇所を書き換えます。
static const uint8_t u8g_dev_ssd1306_128x64_data_start[] PROGMEM = { U8G_ESC_ADR(0), /* instruction mode */ U8G_ESC_CS(1), /* enable chip */ 0x010, /* set upper 4 bit of the col adr to 0 */ 0x002, /* set lower 4 bit of the col adr to 0 ここを編集 */ U8G_ESC_END /* end of sequence */ };
このように修正して、再度先ほどのスケッチを再コンパイルして実行させてみると、以下のようにうまく動作するようになると思います。
使用しているのは以下の商品ですが、ちょっとお値段が高めですかね・・・。 0.96インチしておけばもう少し安く買えますし、入手性もよさそうです。
( “HiLetgo® 1.3″ SPI 128×64 OLED LCD ディスプレイ 1.3インチ 液晶ディスプレイモジュール AVR PIC STM32 Arduinoに対応 並行輸入品” ※ 既に Amazon から同じものを見かけなくなってしまいました)
その他
Nokia 5110 液晶の代わりに、OLED はどうだろうと思って買ってみたのが動機です。 Nokia 5110 はバックライトあって低消費電力という点に惹かれて買いました。Nokia 5110 は、基板の大きさの割に表示可能エリアの部分は小さめです。
これらの2者で比較してみたら次のようになりました。
デバイス | 表示可能エリア | 解像度 |
---|---|---|
Nokia 5110 | 28 x 19 (mm) | 84 x 48 |
OLED 1.3 | 30 x 15 (mm) | 128 x 64 |
OLED のほうが基板サイズが小さい割に、高解像度かつ表示エリアが Nokia のものと遜色ない程度になっていました。OLED は自己発光でバックライト不要ですし、十分 Nokia 5110 の代わりを果たしてくれそうな印象です。