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 文件。
準備硬體
使用硬體元件來建置線路,如下圖所示:
以下是 Raspberry Pi 與 BME280 擴展板之間的連接。 請注意,針腳標籤在不同的 BME280 模組上有所不同。
| Raspberry Pi | BME280 突破 | 顏色 |
|---|---|---|
| 3.3V | VIN/3V3 | 紅 |
| 地面 | GND | 黑色 |
| SDA (GPIO 2) | SDI/SDA | 藍 |
| SCL (GPIO 3) | SCK/SCL | 橘子 |
視需要參閱下列接腳圖:
圖片由Raspberry Pi Foundation 提供。
小提示
建議使用 GPIO 分流板搭配麵包板,以簡化與 GPIO 標頭的連接。
建立應用程式
在慣用的開發環境中完成下列步驟:
使用 .NET CLI 或 Visual Studio 建立新的 .NET 控制台應用程式。 將它命名為 SensorTutorial。
dotnet new console -o SensorTutorial cd SensorTutorial將 Iot.Device.Bindings 套件新增至專案。 從項目目錄或Visual Studio使用 .NET CLI。
dotnet add package Iot.Device.Bindings --version 3.2.0-*使用下列程式碼取代 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迴圈會無限期執行。 每次迭代清除主控台。
將電源模式設定為
Bmx280PowerMode.Forced。 這會強制晶元執行一個測量、儲存結果,然後睡眠。讀取溫度、壓力、濕度和高度的值。
備註
高度是由裝置系結所計算。 這種過載
TryReadAltitude使用平均海平面壓力來生成估計值。將目前的環境條件寫入主控台。
睡眠 1000 毫秒。
建置應用程式。 如果使用 .NET CLI,請執行
dotnet build。 若要在 Visual Studio 中建置,請按 Ctrl+Shift+B。將應用程式部署至 SBC 作為獨立應用程式。 如需指示,請參閱 將 .NET 應用程式部署至Raspberry Pi。 請務必使用 提供可執行檔
chmod +x許可權。切換至部署目錄並執行可執行檔,在Raspberry Pi上執行應用程式。
./SensorTutorial觀察控制台中的感測器輸出。
按 Ctrl+C 終止程式。
祝賀! 您已使用 I2C 來讀取溫度/濕度/氣壓感測器的值!
取得原始程式碼
本教學課程的來源 可在 GitHub 上取得。