記事

Raspberry PiにI2CインターフェースのLCDモジュールを接続する(9)バックグラウンド動作

バックグラウンドで動かす

 今回から、Windowsの表示をなくして、バックグラウンドで稼働するプログラムを作ります。LCDモジュールへ書き込むためのオブジェクトI2CLCD、I2Cの温度センサTMP102から温度を読み取るオブジェクトを作るための処理は、サンプル・プログラムのWeatherStationの処理の方法を利用しました。

public async void Run(IBackgroundTaskInstance taskInstance)
    {
       deferral = taskInstance.GetDeferral(); 

             // デバイスの作成処理に時間がかかっても中断しない
       var controller = await I2cController.GetDefaultAsync(); 

             //I2Cデバイスを作るためのコントローラを得る

  次の命令で、TMP102の読み書きのI2Cデバイスのオブジェクトが作られます、


       I2CTMP102 = controller.GetDevice(

                            new I2cConnectionSettings(TMP102_I2C_ADDR));


  次の命令で、LCDモジュールの書き込みのI2Cデバイスのオブジェクトが作られます、

       I2CLCD = controller.GetDevice(

                               new I2cConnectionSettings(LCD_I2C_ADDR));

  前回作成したLCDモジュールの初期化プログラムが利用できるようになります。

       Initlcd();


  タイマの設定を行います。

       timer = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick,

                                        TimeSpan.FromMilliseconds(500));
}

 このプログラムの実行の様子を以降に示します。


 次に示すのは、プロのグラムの最初のステップでまだ具体的な処理は開始されていません。そのためController、I2CTMP102、I2CLCDの各オブジェクトはnullで何も設定されていません。

 プログラムを実行していくと、Controllerのオブジェクトが作られ、そのControllerを利用してまずI2CTMP102のオブジェクトを作り、次のI2CLCDのオブジェクトが作られI2Cバスのデバイスの読み書きができるようになります。
 ウォッチ1のペインで、これらの設定されたオブジェクトの仕様が確認できます。

 Windows画面への表示を行っている前回までテストしていたプログラムの方法では、I2cDevice作成時に中断し先に進まなくなりますの、でサンプルのWeatherStationの方法を利用しました。
 実行結果は次に示すようになります。


 センサに手をかざすと少し温度が上昇します。

 リリースされたプログラムBackgroundApplication2をDevice Portalで、次に示すようにApps Managerのウィンドウで配置されていることが確認できます。

 左端のアイコンの操作でプログラムをRestart、Start、Stopなどの処理が行えます。BackgroundApplication2が停止していた場合、矢印の輪のリスタートアイコンをクリックし再起動し動作を開始します。

(2016/12/14 V1.0)

<神崎康宏>

連載メニュー Raspberry PiにI2CインターフェースのLCDモジュールを接続する

(1) Raspberry Pi 3 model Bで新規のプロジェクトを作成しスタート画面を表示する

(2) モニタにメッセージを表示する

(3) モニタのデザインにタイマを追加

(4) I2cDeviceクラスと非同期処理

(5) I2cDeviceの作成

(6) バス・リピータを使用

(7) 温度の表示

(8) プログラムの配置

(9) バックグラウンド動作