概要
SO2002AWYB-UC-WB-UというI2C接続の有機LEDキャラクタディスプレイを使った実験です。
パラレル接続の有機ELキャラクタディスプレイの実験はこちらから。
影になってしまっていますが、動作しているところです。それでも、視認性はとてもいいです。パラレル接続より少ない信号線で動いています。SDAinとSDAout、/CSやSA0をディスプレイの側で固定的に接続するなどすれば、さらに減らすことができます。
目的
SO2002AWYB-UC-WB-UというI2C接続の有機LEDディスプレイをArduinoから制御できるようにします。
パラレル接続の有機ELキャラクタディスプレイを、I2C接続で利用できるようにしたもののようです。ディスプレイ自身は同じようなので、インターフェイスの違いを中心に調査し、スケッチを作成していきます。
データシート
SO2002AWYB-UC-WB-Uのデータシートを参照して、どのようなものかを調べました。このデータシート以外にも、購入した製品に付属の日本語の説明書が付属していました。こちらの説明書には電源電圧が5Vでも大丈夫と書いてありますが、3.3Vで使うのが正しいようなので、注意してください。このディスプレイを購入した秋月通商の店頭にも、説明書が間違っている旨の記載がありました。
Arduino Nano(5V)で動作を確認したというご連絡をいただきました。ありがとうございます。
概要
SO2002AWYB-UC-WB-Uの仕様の概要は以下の通りです。
項目 | 値など |
---|---|
入力電圧(絶対定格) | 5.5V |
入力電圧 | 3.6V |
コントローラ | US2066もしくは同等品 |
通常は3.6Vまでしかかけないほうがよさそうです。ということで、今回は、3.3Vで動作するArduino Dueで試してみました。Arduino Unoなど、5Vで動作するもので利用する場合は自己責任でお願いします。レベル変換を行うパーツなどがあるようです。
ピンは14本あります。意味と今回の実験のときに接続したArduinoのピン番号は以下の通りです。SCLとSDAin/SDAoutは、プルアップ抵抗を使って、VDDに接続する必要があります。
OLEDディスプレイのピン | 意味 | Arduinoのピン |
---|---|---|
1 | VSS | GND |
2 | VDD | 3.3V |
3 | /CS | GND |
4 | SA0 | I2Cのアドレスを選択する。HIGHのとき0x3d、LOWのとき0x3cとなる。 |
5 | NC | - |
6 | NC | - |
7 | SCL | SCL(21)。要プルアップ。 |
8 | SDAin | SDA(20)。要プルアップ。 |
9 | SDAout | SDA(20)。要プルアップ。 |
10 | NC | - |
11 | NC | - |
12 | NC | - |
13 | NC | - |
14 | NC | - |
コマンド自身は、パラレル接続の有機ELディスプレイと同じようです。ただし、当然のことながら、インターフェイスが異なります。
パラレル接続のときには、8ビットのデータビットに、レジスタ選択(RS)とRead/Writeを加えた10ビットで制御していましたが、I2C接続では、RSを表す1バイトの後に、データを表す1バイト(8ビット)を送信するようになっています。Read/Writeは、I2Cアドレスを選択する際に、一緒に送るようです。実際には、1回の送信で複数データを送信できますが、今回は簡略化のため、1回の送信で1つのデータだけを送信しました。
以下にフォーマットを示します。
赤色のところは、ArduinoのWireライブラリがよきに計らってくれます。Coは継続データがある場合に1です。今回は1バイトのデータしか扱わないことにしたので、0を設定しています。このデータを送るためのスケッチは以下の通りです。
|
|
以下に今回実装したAPIを示します。1から12は、LiquidCrystalライブラリ と同じ動作なので、液晶ディスプレイからの置き換えも簡単だと思います(初期化ルーチンを変更するだけだと思います)。
項番 | API | 意味 |
---|---|---|
1 | コンストラクタ | オブジェクトを作成する。引数に、I2Cアドレスを指定する。 |
2 | begin() | ライブラリを初期化する。 |
3 | clear() | OLEDの表示を消し、カーソルを(0,0)に移動させる。 |
4 | home() | カーソルを(0,0)に移動させる。 |
5 | setCursor() | カーソル位置を指定する。 |
6 | cursor()/noCursor() | カーソルを表示する。 |
7 | blink()/noBlink() | カーソルを点滅させる。 |
8 | display()/noDisplay() | 表示を行う。 |
9 | scrollDisplayLeft()/scrollDisplayRight() | 表示されている文字を左右に1文字ずらす。 |
10 | autoscroll()/noAutoscroll() | 自動スクロールを行う。 |
11 | leftToRight()/rightToLeft() | 文字の表示方向を設定する。 |
12 | createChar() | ユーザ定義の文字を作成する。 |
13 | singleHeightFont()/doubleHeightFont() | フォントの高さを設定する。 |
14 | selectCharacterRom() | フォントセットを選択する。 |
15 | setScrollQuantity() | スクロール量を指定する。 |
16 | setContrastControl() | コントラストを調整する。 |
17 | setFadeOutAndBlinking() | フェードアウトとブリンク。 |
ソース
SO2002A_I2Cというクラスを作成しました。Arduino Due以外でコンパイルしたときはエラーが出るようにしてあります。Arduino Due以外で使う場合は、SO2002A_I2C.hの最初のほうを自己責任でいじってください。
ソースコードは、GitHubに置いてあります。
バージョン
Hardware: | Arduino Due |
Software: | Arduino IDE 1.5.7 |
最終更新日
July 14, 2024