次の方法で共有


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

IoT デバイスの最も一般的なシナリオの 1 つは、環境条件の検出です。 温度、湿度、気圧などを監視するために、さまざまなセンサーを使用できます。

このトピックでは、.NETを使用して、センサーから環境条件を読み取ります。

前提条件

  • ARM ベース (ARMv7 以上) シングルボード コンピューター (SBC)
  • BME280 湿度/気圧/温度センサーブレークアウト
  • ジャンパーワイヤー
  • ブレッドボード (省略可能)
  • Raspberry Pi GPIO ブレークアウト ボード (省略可能)
  • .NET SDK 8 以降

このチュートリアルは、ターゲット デバイスが Raspberry Pi であることを前提として記述されています。 ただし、このチュートリアルは、Orange Pi、ODROID など、.NETをサポートする Linux ベースの SBC に使用できます。

重要

BME280 ブレークアウトの製造元は多数あります。 ほとんどの設計は類似しており、製造元が異なる機能を用意することはないはずです。 このチュートリアルでは、バリエーションの考慮を試みます。 お使いの BME280 ブレークアウトに、Inter-Integrated Circuit (I2C) インターフェイスが含まれていることを確実にします。

BME280 ブレークアウトなどのコンポーネントは、多くの場合、固定されていないピン ヘッダーで販売されます。 はんだ付けに問題がある場合は、事前にはんだ付けされたヘッダーまたは別のコネクタを備えた BME280 ブレークアウト ボードを探します。 あなたが望むなら、はんだ付けする方法を学ぶことを検討してください! 初心者向けのはんだ付けガイドです。

SBC を準備する

次のサービスをサポートするように SBC が構成されていることを確認します。

  • SSH
  • I2C

多くのデバイスでは、追加の構成は必要ありません。 Raspberry Pi の場合は、 コマンドを使用します。 の詳細については、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 パッケージをプロジェクトに追加します。 プロジェクト ディレクトリから .NET CLI または Visual Studio を使用します。

    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);
    }
    

    前のコードでは、次のようになります。

    • は、 の新しいインスタンスに設定されます。 コンストラクターは、 パラメーターを 1 に、 パラメーターを に設定します。

      重要

      一部の BME280 ブレークアウト 製造元は、セカンダリ アドレス値を使用します。 これらのデバイスには、 を使用します。

    • using 宣言では、を呼び出してを渡すことによって、のインスタンスが作成されます。 この はI2C バスを表します。 宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。

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

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

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

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

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

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

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

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

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

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

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

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

    ./SensorTutorial
    

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

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

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

ソース コードを入手する

このチュートリアルのソースは GitHub で使用できます。

次のステップ

LCD にテキストを表示する方法について説明します