【树莓派使用SHT30温度/湿度传感器教程】

  • Post author:
  • Post category:其他


树莓派SHT30系列使用温度/湿度传感器的教程


原文链接:[http://www.raspi.cc/read-45-1.html]

本人小白,在使用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,好了剩下的自己研究吧!

[原文链接:[http://www.raspi.cc/read-45-1.html]