從感應器讀取環境情況
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 中斷的連線。 請注意,針腳標籤在各種 BME280 中斷點上有所不同。
Raspberry Pi | BME280 中斷 | Color |
---|---|---|
3.3V | VIN/3V3 | 紅色 |
接地線 | GND | 黑色 |
SDA (GPIO 2) | SDI/SDA | 藍色 |
SCL (GPIO 3) | SCK/SCL | 橙色 |
視需要參閱下列封裝接腳圖:
提示
建議將 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 2.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。