從感應器讀取環境情況

IoT 裝置最常見的其中一個案例是偵測環境狀況。 有各種感應器可用來監視溫度、濕度、對稱壓力等等。

在本主題中,您將使用 .NET 從感應器讀取環境條件。

必要條件

  • ARM 型 (ARMv7 或更新版本) 單一面板電腦 (SBC)
  • BME280 濕度/對稱壓力/溫度感應器中斷
  • 跳線
  • 試驗電路板 (選擇性)
  • Raspberry Pi GPIO 擴充板 (選擇性)
  • .NET SDK 7 或更新版本

注意

本教學課程是以 Raspberry Pi 為目標裝置所撰寫。 不過,本教學課程可用於支援 .NET 的任何 Linux 型 SBC,例如 Orange Pi、ODROID 等等。

重要

有許多 BME280 分線製造商。 大部分的設計都類似,製造商的不同應不會對功能造成任何差異。 本教學課程會嘗試考慮變化。 請確定 BME280 分線包含積體電路匯流排 (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 藍色
SCL (GPIO 3) SCK/SCL 橙色

視需要參閱下列封裝接腳圖:

由 Raspberry Pi Foundation 所提供顯示 Raspberry Pi GPIO 連接器封裝接腳的圖表。
圖片由 Raspberry Pi 基金會提供

提示

建議將 GPIO 分線板與試驗電路板搭配使用,以簡化 GPIO 接頭的連接過程。

建立應用程式

在慣用的開發環境中完成下列步驟:

  1. 使用 .NET CLIVisual 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 2.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.Create 並傳入 i2cSettings 來建立 I2cDevice 的執行個體。 這 I2cDevice 代表 I2C 匯流排。 using 宣告可確保已處置物件,且正確釋放硬體資源。

    • 另一個 using 宣告會建立 的實例 Bme280 來表示感應器。 會在 I2cDevice 建構函式中傳遞 。

    • 透過呼叫 GetMeasurementDuration 來擷取晶片目前 (預設) 設定來測量晶片所需的時間。

    • while 迴圈會無限期執行。 每個反覆項目:

      1. 清除主控台。

      2. 將電源模式設定為 Bmx280PowerMode.Forced 。 這會強制晶片執行一個測量、儲存結果,然後睡眠。

      3. 讀取溫度、壓力、濕度和高度的值。

        注意

        高度是由裝置系結計算。 這個 多 TryReadAltitude 載會使用平均海平面壓力來產生估計值。

      4. 將目前的環境條件寫入主控台。

      5. 睡眠 1000 毫秒。

  4. 建置應用程式。 如果使用 .NET CLI,請執行 dotnet build 。 若要在 Visual Studio 中建置,請按 Ctrl+Shift+B

  5. 將應用程式部署至 SBC 做為獨立應用程式。 如需指示,請參閱 將 .NET 應用程式部署至 Raspberry Pi。 請務必使用 chmod +x 提供可執行檔「執行」權限。

  6. 切換至部署目錄並執行可執行檔,在 Raspberry Pi 上執行應用程式。

    ./SensorTutorial
    

    觀察主控台中的感應器輸出。

  7. Ctrl+C終止程式。

恭喜! 您已使用 I2C 從溫度/濕度/對稱壓力感應器讀取值!

取得原始程式碼

本教學課程中的來源位於 GitHub

下一步