I2C接続有機LEDディスプレイ
DUE

概要

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を設定しています。このデータを送るためのスケッチは以下の通りです。

1
2
3
4
5
6
uint8_t SO2002A_I2C::writeCommand(uint8_t rs, uint8_t data) {
  Wire.beginTransmission(i2cAddress);
  Wire.write(rs);
  Wire.write(data);
  return Wire.endTransmission();
}

以下に今回実装した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の最初のほうを自己責任でいじってください。

!
AVRを追加しました。繰り返しになりますが、5Vで利用する場合は、注意してください。

ソースコードは、GitHubに置いてあります。

バージョン

Hardware:Arduino Due
Software:Arduino 1.5.7

最終更新日

November 28, 2021

inserted by FC2 system