ハードウェア
IchigoJamで有機ELディスプレイ(OLED)を使ってみよう!
shimizu
今回は、IchigoJamに有機ELディスプレイ(OLED)を繋げて、画面上に描画する方法をご紹介します。有機ELディスプレイは、液晶ディスプレイ(LCD)とは異なる方式で発光する仕組みを持っており、発色の良さや省電力であるという特徴があります。近年はスマホやテレビのディスプレイパネルとして広く普及しています。
今回使用するOLED
今回使用するのは、私が10年ほど前に入手した1.7インチの小型OLEDモジュール「μOLED-160-GMD1」(以下μOLED)です。既に販売が終了しており、現在は入手できない可能性が高い製品ですので、ご了承ください。
このμOLEDは、データシートを参照すると、シリアル接続して制御コマンドを送ることで操作できることが分かります。以前紹介したPanCakeやMixJuiceのように、IchigoJamからμOLED向けのコマンドを「PRINT」して送信するということですね。
必要なもの
- IchigoJam
- μOLED-160-GMD1
- ジャンパー線
実際に使ってみた
μOLEDをIchigoJamに接続します。ジャンパー線で、それぞれ以下のように結線します。(オス・オスのジャンパー線しか用意できなかったので、写真ではブレッドボードを介して配線しています)
μOLED IchigoJam +-----+ +-----+ | + |====| 5V | | - |====| GND | | Tx |====| RXD | | Rx |====| TXD | +-----+ +-----+
それでは早速サンプルプログラムを作って試してみましょう。IchigoJamの電源を入れ、以下のプログラムを入力します。
10 'OLED SAMPLE 20 UART1:?"U":WAIT20 30 ?CHR$(#42,0,0):WAIT10:?"E":WAIT60 40 FOR I=0 TO 159 STEP 5 50 ?CHR$(#4C,I,0,159-I,127,RND(255),RND(255)):WAIT1 60 NEXT 70 FOR I=0 TO 24 80 ?CHR$(#43,RND(127)+16,RND(95)+16,RND(8)+8,RND(255),RND(255)):WAIT2 90 NEXT 100 ?CHR$(#62,1,30,55,#FF,#E0,2,#00,#00,1,1,#45,#79,#65,#73,#2C,#20,#4A,#61,#70,#61,#6E,#00) 110 UART0
- 20行目では、
UART1
でシリアル送信のモードを切り替えて、改行文字と制御コードを送信しない設定にします。そして、「U」を送って伝送速度(ボーレート)の自動判定を行わせます。 - 30行目では、背景色を黒色に設定し、「E」を送って全画面消去します。
ちなみに?CHR$(#42,0,0)
というのは、引数に渡したバイト列(「#xx」は16進表記)をPRINT
するという命令です。 - 40行目から60行目では、画面の上端から下端にランダムな色で斜線を引いていきます。
- 70行目から90行目では、ランダムな位置に塗りつぶし円を描いていきます。
- 100行目では、画面の中央に「Eyes, JAPAN」と表記したボタンを描画します。引数バイト列の「#45,〜,#6E,#00」の部分が、「Eyes, JAPAN」という文字列(と終端文字)を表しています。
それでは、RUNで実行します。
すると、写真のような画面が描画されます。製造から年数を経た今も、有機ELの鮮やかで高コントラストな発色は健在でした。
注意点としては、コマンドを連続して送信する際は適切にWAIT
を入れる必要があります。一つのコマンドの処理が終わる前に送ってしまうと、データ受け取りの際の取りこぼしが発生して誤動作する現象が見られました。特に、全画面消去や大きな塗りつぶし円を描画するような処理に時間のかかる場合に顕著に発生します。μOLEDは、コマンドの処理が完了するとACK(06h)またはNAK(15h)を返してくるので、厳密に処理するならばその返り値を待って次の処理に移る必要があります。
おわりに
IchigoJamにOLEDを繋げて、画面描画する例をご紹介しました。1.7インチという極小サイズであることを活かして、インジケーター表示に利用すると面白そうです。この他にも、現在入手可能なI2C接続のOLEDモジュールを使った例が以下の参考サイトで紹介されていますので、試してみてはいかがでしょうか。