前回 .NET nanoFrameworkでの開発環境を構築しました。
今回はデバイスに温湿度センサーを接続してみます。
使用するハードウェア
・M5ATOM Matrix
・Unit EnvIII
使用するソフトウェア
・Visual Studio 2019
・ファームウェア ESP32_PICO 1.7.3-preview.124
プログラム
・VisualStudioを起動して、新しいプロジェクトの作成をクリックします。
・Blank Application (nanoFramework)を選択し、次へをクリックします。
・初めにプログラム内で使用するパッケージ(Arduinoではライブラリです)をインストールします。ツール > Nugetパッケージマネージャー > ソリューションのNugetパッケージの管理をクリックします。
・検索BOXにESP32と入力すると下部リストに nanoFramework.Hardware.Esp32が表示されるのでクリックします。右側のプロジェクト名にチェックを入れてインストールをクリックします。
・パッケージの依存関係がチェックされて追加パッケージが表示されます。そのままOKをクリックします。
・再びパッケージ参照画面の検索ボックスにsht3と入力すると、リストに nanoFramework.Iot.Device.Sht3xと表示されるのでクリックします。先ほどと同じようにプロジェクト名にチェックを入れてインストールをクリックします。
・依存関係のチェックが行われます。OKをクリックしてインストールを完了します。
・次にプログラムを書いていきます。Program.csを選択します。
・4行目より後に次の3行を追加します。
using nanoFramework.Hardware.Esp32;
using System.Device.I2c;
using Iot.Device.Sht3x;
・メインプロシージャ内に次のコードを追加します。
//I2Cで使うPinを設定
Configuration.SetPinFunction(26, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(32, DeviceFunction.I2C1_CLOCK);
//センサーのアドレスを設定
I2cConnectionSettings settings = new I2cConnectionSettings(1, 0x44);
//センサーオブジェクトの作成
using I2cDevice device = I2cDevice.Create(settings);
using Sht3x sensor = new(device);
while (true)
{
//センサーデータの取得
double tmp = sensor.Temperature.DegreesCelsius;
double hum = sensor.Humidity.Percent;
//デバッグウィンドウに出力
Debug.Write("tmp : ");
Debug.WriteLine(tmp.ToString("F2"));
Debug.Write("hum : ");
Debug.WriteLine(hum.ToString("F2"));
Debug.WriteLine(" ");
Thread.Sleep(10000);
}
・入力ができたらプログラムを実行してみましょう。画面上部の ▶.NET nanoFramework Device をクリックします。
・もし配置エラーになるようでしたら一度PCからデバイスを外し、Device Explorerを表示してから デバイスをもう一度接続してください。自動的にデバイスが認識されます。その後実行をしてみましょう。
・エラーが出なければ出力ウィンドウに温度と湿度が10秒ごとに表示されます。
以上でプログラムは完成です。
今回は温度センサーを使ってみましたが、既に .NET nanoFramework 向けに各種センサーのパッケージが用意されています。メジャーなセンサー類は大体そろっています。
興味のある方はこちらを参照してみてください。サンプルプログラムも含まれているのでぜひ参考にしてください。
最後に今回のコード全体を載せておきます。
using System;
using System.Diagnostics;
using System.Threading;
//新たに追加
using nanoFramework.Hardware.Esp32; //デバイス
using System.Device.I2c; //I2C
using Iot.Device.Sht3x; //センサー
//
namespace NF_SHT30
{
public class Program
{
public static void Main()
{
//I2Cで使うPinを設定
Configuration.SetPinFunction(26, DeviceFunction.I2C1_DATA); //SDAはGPIO26に割り当て
Configuration.SetPinFunction(32, DeviceFunction.I2C1_CLOCK); //SCLはGPIO32に割り当て
//センサーのアドレスを設定
I2cConnectionSettings settings = new I2cConnectionSettings(1, 0x44); //SHT30のアドレスは0x44、I2Cポートは1
//センサーオブジェクトの作成
using I2cDevice device = I2cDevice.Create(settings);
using Sht3x sensor = new(device);
while (true)
{
//センサーデータの取得
double tmp = sensor.Temperature.DegreesCelsius; //温度を摂氏で取得
double hum = sensor.Humidity.Percent; //湿度をパーセントで取得
//デバッグウィンドウに出力
Debug.Write("tmp : ");
Debug.WriteLine(tmp.ToString("F2"));
Debug.Write("hum : ");
Debug.WriteLine(hum.ToString("F2"));
Debug.WriteLine(" ");
Thread.Sleep(10000); //10秒待機
}
}
}
}