共用方式為


從感測器讀取環境條件

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

在這個主題中,你將使用 .NET 來讀取感測器的環境條件。

先決條件

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

備註

本教學課程是以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 分接板的 Fritzing 圖

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

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

視需要參閱下列接腳圖:

一張顯示 Raspberry Pi GPIO 接頭腳位的示意圖。圖片由Raspberry Pi基金會提供。
圖片由Raspberry Pi基金會提供

小提示

建議使用 GPIO 分流板搭配麵包板,以簡化與 GPIO 標頭的連接。

建立應用程式

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

  1. 請使用 .NET CLIVisual Studio 建立一個新的 .NET 控制台應用程式。 叫它 SensorTutorial

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Iot.Device.Bindings 套件加入專案。 請使用專案目錄中的 .NET CLIVisual Studio

    dotnet package add Iot.Device.Bindings --version 4.1.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

    • 使用宣告來呼叫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 作為獨立應用程式。 相關說明請參考 Deploy .NET 應用程式到 Raspberry Pi。 務必使用chmod +x給可執行檔執行權限。

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

    ./SensorTutorial
    

    觀察控制台中的感測器輸出。

  7. Ctrl+C 終止程式。

祝賀! 你用 I2C 來讀取溫度/濕度/氣壓感測器的數值!

取得原始程式碼

本教學的原始碼為 可於 GitHub 取得。

後續步驟