共用方式為


從感測器讀取環境條件

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

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

先決條件

  • ARM 型 (ARMv7 或更新版本) 單板電腦 (SBC)
  • BME280 濕度/大氣壓/溫度感測器模組
  • 跳線
  • 麵包板(選用)
  • Raspberry Pi GPIO 擴展板 (可選)
  • .NET SDK 8 或更新版本

備註

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

這很重要

有許多 BME280 擴充板製造商。 大部分的設計都類似,製造商的不同應不會對功能造成任何差異。 本教學課程會嘗試考量變化。 請確定 BME280 分線板包含 I2C(Inter-Integrated Circuit)介面。

BME280 擴展板等元件通常會以未焊接的針排銷售。 如果您對焊接感到不舒服,請尋找具有預焊接頭或不同連接器的 BME280 突破板。 如果您有興趣,可以考慮學習如何焊接! 以下是一個很好的初學者焊接指南

準備 SBC (單板電腦)

請確定您的 SBC 已設定為支援下列服務:

  • SSH
  • I2C

對於許多裝置,不需要額外的設定。 針對 Raspberry Pi,請使用 raspi-config 命令。 如需 raspi-config 的詳細資訊,請參閱 Raspberry Pi 文件

準備硬體

使用硬體元件來建置線路,如下圖所示:

一個 Fritzing 圖表顯示從 Raspberry Pi 到 BME280 擴展板的連接

以下是 Raspberry Pi 與 BME280 擴展板之間的連接。 請注意,針腳標籤在不同的 BME280 模組上有所不同。

Raspberry Pi BME280 突破 顏色
3.3V VIN/3V3
地面 GND 黑色
SDA (GPIO 2) SDI/SDA
SCL (GPIO 3) SCK/SCL 橘子

視需要參閱下列接腳圖:

此圖顯示Raspberry Pi GPIO 標頭的釘選。圖片由Raspberry Pi Foundation 提供。
圖片由Raspberry Pi Foundation 提供

小提示

建議使用 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 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.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 上取得

後續步驟