Raspberry PiにI2CインターフェースのLCDモジュールを接続する(7)温度の表示
■温度センサTMP102からのデータをLCDへ表示
I2Cのバス・リピータを追加しました。次に示すようにPCA9515をAQM1602とI2Cバスの間に入れることで、信号レベルを改善できました。
- I2Cバスのプルアップ抵抗が1.8kΩと1kΩのように小さくドライブに大きな電流を駆動するI2Cバスでも
- AQM1602側は10kΩや33kΩのようなAQM1602でも駆動できるプルアップ抵抗値にできる
PCA9515は十分なドライブ能力があるので、問題なくI2Cバスの駆動ができるようになります。
●LCDモジュールの処理関数の追加作成
新たに三つの関数を作ります。
- LCDモジュールの表示をクリア lcdclear()
- カーソルをホーム・ポジション(上段左端)にセット lcdhome()
- カーソル位置をx、yにセット lcdcu_set(int x , int y)
これらの関数名は、ArduinoのI2C接続のキャラクタLCDモジュールの処理を行うプログラムの関数名と同じにしました。lcdclear()とlcdhome()は、delay(n)をTask.Delay(n)に変更するだけで済みます。
◆表示クリア関数 lcdclear()
private void lcdclear() { i2cwritecmd(0x01); Task.Delay(1); } |
◆カーソルをホーム・ポジションにセットするlcdhome()
private void lcdhome() { i2cwritecmd(0x02); Task.Delay(1); } |
◆カーソルのセット lcdcu_set(x,y)
ArduinoではINT型をbyte型に暗黙の変換が行えましたが、(byte)で型変換の指定が必要でした。
private void lcdcu_set(int x , int y) { byte ca = (byte)(x + y * 0x40 | 0x80); i2cwritecmd(ca); } |
●タイマが起動するプログラム
500msごとに次のプログラムが起動して、温度の測定、測定結果の表示、カウンタのカウントアップ、UIのディスプレイにカウント値と測定を表示します。
private void Timer_Tick(object sender, object e) |
●デバッグ・モードでテスト
デバッグが開始されると、次に示すようにウォッチ1のペインが表示されます。このペインには変数やオブジェクト名を設定すると、プログラムの実行に応じて未定義から有効になり値が設定されたり、新しい値を代入したりする状況が確認できます。
ここでは、スタート段階なのでほとんどの項目が存在しない、となっています。
プログラムの進行に応じて各項目の定義、設定の命令が実行されると、次に示すように各行の設定値が確認できるようになります。
このウォッチのリストでプログラムの動きの確認がより深まります。
●モニタ・ウィンドウ
Windows UIのモニタウィンドウにはカウンタの値と区切りの”:”と温度測定の値が表示されます。
次に示したRaspberry Piとブレッドボードは、15cm×24cmの板に固定しました。
LCDモジュールには温度の測定値が表示されています。
これで、I2C接続のLCDモジュールをRaspberry Piで利用できるようになりました。
今までは、Visual Studio2015のデバッグ・モードでRaspberry Pi上にプログラムを設定し動かしていました。
次回、テスト・プログラムをRaspberry Piに書き込み、Raspberry PiのWindows10 IoTの管理のもとでプログラムを動かします。
(2016/11/9 V1.0)
<神崎康宏>