Raspberry PI + Windows 10 IoT + C#でI2Cでキャラクタディスプレイに接続する
今回は秋月の有機ELキャラクタディスプレイモジュールを接続します。
出力機器なのでデバイス側からデータを受け取る必要は無く一方的に送るだけなのでセンサーよりも簡単かもしれません。
必要な物
- 前回の温湿度センサーの記事で使った物一式
- 有機ELキャラクタディスプレイモジュール
回路接続
今回は秋月で売ってるブレッドボード用変換基板を使いました。接続がしやすくなるだけなのでなくても全く問題ありません。
今回使用するキャラクタディスプレイは4番ピンの接続でアドレスを切り替えることができます。今回はLowにしてアドレス0x3Cを使用します。
センサーとディスプレイの2つのデバイスを接続しますが並列に接続するだけで問題ありません。
ディスプレイの3番ピンをGNDに接続する必要があったりI2CのInとOutが別のピンになってて両方に接続する必要がありますがデータシート通り接続すれば問題ありません。
プログラム
センサーは前回と同様に初期化します。
ディスプレイはコマンドを送るときは最初に0x00を送ります。
画面クリアは0x01、カーソル位置を初期化するのは0x02、画面表示の設定は0x0Cなので順に送信します。
_display = await InitI2cDevice(0x3C); // 画面クリア _display.Write(new byte[] { 0x00, 0x01 }); // カーソルを左上へ _display.Write(new byte[] { 0x00, 0x02 }); // 表示設定 _display.Write(new byte[] { 0x00, 0x0C });
カーソル位置を1行目先頭にするには0x80、2行目先頭にするには0xA0を送ります。
文字を表示するには0x40に続けてコードを送信します。英数字はASCIIコードと同じコード体系になっているのでChar型をByteにキャストしてそのまま送信できます。
今回は若干トリッキーではありますがLINQを使ってキャストしてToArrayでByte配列にしています。
_display.Write(new byte[] { 0x00, 0x80 }); _display.Write(new byte[] { 0x40 }.Concat(v2.Select(_ => (byte)_)).ToArray());
前回のプログラムで取得した温度湿度をstring.Formatで文字列に変換して表示しています。
特に変わったことはしていないので解説は省略します。ソースコードを見てください。
今回のプログラムI2cDisplay.zip