次の方法で共有


センサーから環境条件を読み取る

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 ブレークアウト ボードへの接続を示すフリッツ図

Raspberry Pi から BME280 ブレークアウトへの接続を次に示します。 ピン ラベルは、さまざまな BME280 ブレークアウトで異なる点に注意してください。

Raspberry Pi BME280 ブレイクアウト Color
3.3V VIN/3V3 赤い
地面 GND 黒い
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL オレンジ

必要に応じて、次のピン配列図を参照してください。

Raspberry Pi GPIO ヘッダーのピン配置を示す図。画像提供:Raspberry Pi Foundation。
画像提供:Raspberry Pi Foundation

ヒント

GPIO ヘッダーへの接続を合理化するには、ブレッドボードと組み合わせた GPIO ブレークアウト ボードをお勧めします。

アプリを作成する

好みの開発環境で次の手順を実行します。

  1. .NET CLI または Visual Studio を使用して、新しい .NET コンソール アプリを作成します。 SensorTutorial という名前を付けます。

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Iot.Device.Bindings パッケージをプロジェクトに追加します。 プロジェクト ディレクトリまたは Visual Studio から .NET CLI を使用します。

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. 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のインスタンスが作成されます。 この I2cDeviceI2C バスを表します。 using宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。

    • もう 1 つの using 宣言では、センサーを表す Bme280 のインスタンスが作成されます。 I2cDeviceはコンストラクターで渡されます。

    • チップがチップの電流(デフォルト)設定で測定を行うために必要な時間は、 GetMeasurementDurationを呼び出すことによって取得されます。

    • while ループは無期限に実行されます。 各イテレーション:

      1. コンソールをクリアします。

      2. 電源モードを Bmx280PowerMode.Forcedに設定します。 これにより、チップは強制的に 1 回の測定を実行し、結果を格納してスリープ状態にします。

      3. 温度、圧力、湿度、高度の値を読み取ります。

        高度は、デバイス バインドによって計算されます。 この TryReadAltitude のオーバーロードでは、平均海面圧力を使用して推定値が生成されます。

      4. 現在の環境条件をコンソールに書き込みます。

      5. 1000 ミリ秒スリープします。

  4. アプリをビルドします。 .NET CLI を使用している場合は、 dotnet buildを実行します。 Visual Studio でビルドするには、Ctrl++キーを押します。

  5. 自己完結型アプリとして SBC にアプリをデプロイします。 手順については、「 Raspberry Pi への .NET アプリのデプロイ」を参照してください。 を使用して実行可能ファイルにchmod +xアクセス許可を付与してください。

  6. Raspberry Pi でアプリを実行するには、デプロイ ディレクトリに切り替えて実行可能ファイルを実行します。

    ./SensorTutorial
    

    コンソールでセンサーの出力を確認します。

  7. Ctrl キーを押しながら C キーを押してプログラムを終了します。

おめでとうございます! あなたは温度/湿度/気圧センサーから値を読み取るためにI2Cを使用しました!

ソース コードを入手する

このチュートリアルのソースは GitHub で入手できます

次のステップ