IoT デバイスの最も一般的なシナリオの 1 つは、環境条件の検出です。 温度、湿度、気圧などを監視するために、さまざまなセンサーを使用できます。
このトピックでは、.NET を使用してセンサーから環境条件を読み取ります。
前提条件
- ARM ベース (ARMv7 以上) シングルボード コンピューター (SBC)
- BME280 湿度/気圧/温度センサーブレークアウト
- ジャンパーワイヤー
- ブレッドボード (省略可能)
- Raspberry Pi GPIO ブレークアウト ボード (省略可能)
- .NET SDK 8 以降
注
このチュートリアルは、ターゲット デバイスが Raspberry Pi であることを前提として記述されています。 ただし、このチュートリアルは、オレンジ Pi、ODROID など、.NET をサポートする Linux ベースの SBC に使用できます。
重要
BME280 ブレークアウトの製造元は多数あります。 ほとんどの設計は類似しており、製造元が異なる機能を用意することはないはずです。 このチュートリアルでは、バリエーションの考慮を試みます。 お使いの BME280 ブレークアウトに、Inter-Integrated Circuit (I2C) インターフェイスが含まれていることを確実にします。
BME280 ブレークアウトなどのコンポーネントは、多くの場合、固定されていないピン ヘッダーで販売されます。 はんだ付けに問題がある場合は、事前にはんだ付けされたヘッダーまたは別のコネクタを備えた BME280 ブレークアウト ボードを探します。 あなたが望むなら、はんだ付けする方法を学ぶことを検討してください! 初心者向けのはんだ付けガイドです。
SBC を準備する
次のサービスをサポートするように SBC が構成されていることを確認します。
- SSH
- I2C
多くのデバイスでは、追加の構成は必要ありません。 Raspberry Pi の場合は、 raspi-config
コマンドを使用します。 raspi-config
の詳細については、Raspberry Pi のドキュメントを参照してください。
ハードウェアを準備する
次の図に示すように、ハードウェア コンポーネントを使用して回線を構築します。
Raspberry Pi から BME280 ブレークアウトへの接続を次に示します。 ピン ラベルは、さまざまな BME280 ブレークアウトで異なる点に注意してください。
Raspberry Pi | BME280 ブレイクアウト | Color |
---|---|---|
3.3V | VIN/3V3 | 赤い |
地面 | GND | 黒い |
SDA (GPIO 2) | SDI/SDA | blue |
SCL (GPIO 3) | SCK/SCL | オレンジ |
必要に応じて、次のピン配列図を参照してください。
ヒント
GPIO ヘッダーへの接続を合理化するには、ブレッドボードと組み合わせた GPIO ブレークアウト ボードをお勧めします。
アプリを作成する
好みの開発環境で次の手順を実行します。
.NET CLI または Visual Studio を使用して、新しい .NET コンソール アプリを作成します。 SensorTutorial という名前を付けます。
dotnet new console -o SensorTutorial cd SensorTutorial
Iot.Device.Bindings パッケージをプロジェクトに追加します。 プロジェクト ディレクトリまたは Visual Studio から .NET CLI を使用します。
dotnet add package Iot.Device.Bindings --version 3.2.0-*
Program.cs の内容を次のコードで置き換えます。
using System; using System.Device.I2c; using System.Threading; using Iot.Device.Bmxx80; using Iot.Device.Bmxx80.PowerMode; var i2cSettings = new I2cConnectionSettings(1, Bme280.DefaultI2cAddress); using I2cDevice i2cDevice = I2cDevice.Create(i2cSettings); using var bme280 = new Bme280(i2cDevice); int measurementTime = bme280.GetMeasurementDuration(); while (true) { Console.Clear(); bme280.SetPowerMode(Bmx280PowerMode.Forced); Thread.Sleep(measurementTime); bme280.TryReadTemperature(out var tempValue); bme280.TryReadPressure(out var preValue); bme280.TryReadHumidity(out var humValue); bme280.TryReadAltitude(out var altValue); Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C"); Console.WriteLine($"Pressure: {preValue.Hectopascals:#.##} hPa"); Console.WriteLine($"Relative humidity: {humValue.Percent:#.##}%"); Console.WriteLine($"Estimated altitude: {altValue.Meters:#} m"); Thread.Sleep(1000); }
前のコードでは、次のようになります。
i2cSettings
は、I2cConnectionSettings
の新しいインスタンスに設定されます。 コンストラクターは、busId
パラメーターを 1 に、deviceAddress
パラメーターをBme280.DefaultI2cAddress
に設定します。重要
一部の BME280 ブレークアウト 製造元は、セカンダリ アドレス値を使用します。 これらのデバイスには、
Bme280.SecondaryI2cAddress
を使用します。using 宣言では、
I2cDevice
を呼び出してI2cDevice.Create
を渡すことによって、i2cSettings
のインスタンスが作成されます。 このI2cDevice
はI2C バスを表します。using
宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。もう 1 つの
using
宣言では、センサーを表すBme280
のインスタンスが作成されます。I2cDevice
はコンストラクターで渡されます。チップがチップの電流(デフォルト)設定で測定を行うために必要な時間は、
GetMeasurementDuration
を呼び出すことによって取得されます。while
ループは無期限に実行されます。 各イテレーション:コンソールをクリアします。
電源モードを
Bmx280PowerMode.Forced
に設定します。 これにより、チップは強制的に 1 回の測定を実行し、結果を格納してスリープ状態にします。温度、圧力、湿度、高度の値を読み取ります。
注
高度は、デバイス バインドによって計算されます。 この
TryReadAltitude
のオーバーロードでは、平均海面圧力を使用して推定値が生成されます。現在の環境条件をコンソールに書き込みます。
1000 ミリ秒スリープします。
アプリをビルドします。 .NET CLI を使用している場合は、
dotnet build
を実行します。 Visual Studio でビルドするには、Ctrl++キーを押します。自己完結型アプリとして SBC にアプリをデプロイします。 手順については、「 Raspberry Pi への .NET アプリのデプロイ」を参照してください。 を使用して実行可能ファイルに
chmod +x
アクセス許可を付与してください。Raspberry Pi でアプリを実行するには、デプロイ ディレクトリに切り替えて実行可能ファイルを実行します。
./SensorTutorial
コンソールでセンサーの出力を確認します。
Ctrl キーを押しながら C キーを押してプログラムを終了します。
おめでとうございます! あなたは温度/湿度/気圧センサーから値を読み取るためにI2Cを使用しました!
ソース コードを入手する
このチュートリアルのソースは GitHub で入手できます。
次のステップ
.NET