IoT 设备的最常见方案之一是检测环境条件。 各种传感器可用于监视温度、湿度、对称压力等。
在本主题中,将使用 .NET 从传感器读取环境条件。
先决条件
注释
本教程编写为假设目标设备为 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 分线板 | 颜色 |
|---|---|---|
| 3.3V | VIN/3V3 | 红色 |
| 地面 | GND | 黑色 |
| SDA (GPIO 2) | SDI/SDA | blue |
| 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 包添加到项目。 可以从项目目录使用.NET CLI,或者使用Visual Studio。
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和传入I2cDevice.Create来创建i2cSettings的实例。 这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。 请确保使用 指定可执行的 execute 权限
chmod +x。切换到部署目录并运行可执行文件,在 Raspberry Pi 上运行应用。
./SensorTutorial观察控制台中的传感器输出。
按 Ctrl+C 终止程序。
祝贺! 你已使用 I2C 从温度/湿度/气压传感器读取值!
获取源代码
本教程的源 在 GitHub 上提供。