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 上提供。