在使用SHT3XX 系列的温度传感的一些过程,特此分享给大家
我们常见的有三种:SHT30、SHT31、SHT35,其中比较便宜性价比较愉快的是 SHT30。因为SHT系列传感器都是标准的 i2C 引脚,那么使用过程中肯定是用 I2C 来通信。如果你没作更改过传感器,默认的从机地址是 0x44。
i2C 引脚——正VCC、负GND、sda、scl
我这里介绍微软封装的另一个库——iot bindings。这个库是微软提供的,里面封装了很多常用模块的操作,我们不用每次都自己手动写硬件通信,直接引用,开箱即用,无需调校,免打孔,免安装。
在创建.NET 项目后,执行以下命令引用(也可以用VS的Nuget管理工具)。
dotnet add package System.Device.Gpio
dotnet add package iot.device.bindings
封装的模块类位于命名空间 Iot.Device.XXX 中,其中XXX是各类模块的大类名。比如,我们这次用的 SHT 30, 它属于 SHT 30、31、35 系列,故命名空间为 Iot.Device.Sht3x。
在代码文件中,using 一下。
using System;
using System.Device.I2c;
using Iot.Device.Sht3x;
然后,很简单的几行代码调用。
I2cConnectionSettings set=new(4, (byte)I2cAddress.AddrLow);
I2cDevice dev= I2cDevice.Create(set);
using Sht3x sht= new Sht3x(dev);
bool running = true;
Console.CancelKeyPress += (_,_) => running=false;
while(running)
{
// 温度
double temp = sht.Temperature.DegreesCelsius;
// 湿度
double hui = sht.Humidity.Percent;
Console.WriteLine("温度:{0:N1} ℃\n湿度:{1:N1} %RH", temp, hui);
System.Threading.Thread.Sleep(2000);
}
注意看 I2cAddress 枚举,它已经为我们定义好了 SHT 3x 传感器(模块)的地址:
public enum I2cAddress : byte
{
AddrLow = 0x44,
AddrHigh = 0x45
}
我们在用时选默认地址 0x44 即可。
Sht3x 类已封装好,访问 Temperature 获取温度值,DegreesCelsius 是摄氏度,其他的不知道什么单位,我见识浅,没研究过。Humidity 属性是相对湿度,一般用百分比。
写完代码后,发布。
dotnet publish -c Release -r linux-arm --no-self-contained
如果你的树莓派上没有配置 dotnet 框架,那就把 --no-self-contained 去掉,让它生成全部类库,然后全部复制到树莓派上运行。
scp -r bin\Release\net5.0\linux-arm\publish* pi@192.168.0.xxx:/home/pi/<你要放置的目录>
运行结果如下图所示。
目前这个 bindings 库微软在不断地更新,支持的模块越来越多。尽管如此,有些模块还是没有收录进去。比如 MPU6050 ,bindings 库里面就没有,库里面只有 MPU 6500 和 MPU 9250,好了剩下的自己研究吧!