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 擴展板之間的連接。 請注意,針腳標籤在不同的 BME280 模組上有所不同。
| 樹莓派 | BME280 突破 | 顏色 |
|---|---|---|
| 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 套件加入專案。 請使用專案目錄中的 .NET CLI 或 Visual Studio。
dotnet package add Iot.Device.Bindings --version 4.1.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。使用宣告來呼叫
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 作為獨立應用程式。 相關說明請參考 Deploy .NET 應用程式到 Raspberry Pi。 務必使用
chmod +x給可執行檔執行權限。切換至部署目錄並執行可執行檔,在Raspberry Pi上執行應用程式。
./SensorTutorial觀察控制台中的感測器輸出。
按 Ctrl+C 終止程式。
祝賀! 你用 I2C 來讀取溫度/濕度/氣壓感測器的數值!
取得原始程式碼
本教學的原始碼為 可於 GitHub 取得。