SHT3XX 系列的传感,常见的有三种:SHT 30、SHT 31、SHT 35。其中,比较便宜性价比较愉快的是 SHT 30。

DHT 11 模块也是检测温度、湿度的,但SHT 11 使用的不是我们常见的 i2c 等协议,而是用它自己特有的单数据线协议。因此使用 DHT11 你需要自己写通信协议或使用现有的库;另外,DHT 11 模块似乎反应不太灵敏,上电后还得等几秒钟才能读到稳定数据。最重要的一点,不知道是不是老周运气不好,买了三个 DHT 11,坏了两个。而 SHT 30,一直用着——老周把它弄成家用温度计,挂在家里长期运作。当然,不是用树莓派去控制。毕竟,你想想,刻意用树莓派去读个温度,这也太浪费资源了,最开始是和客厅的监控连在一起的。老周买了个摄像头,用一块2G内存的树莓派刷了 Motion ,做成了监控,供家里客厅使用。

为了完美的伪装,找了个旧手机的盒子,自己打几个孔,然后把树莓派放进盒子里,摄像头用双面胶贴在盒子上。伪装效果还行,外人进来了一般不会发现。装中盒子里就造成一个问题:SHT30 检测温度湿度就不准了。于是,老周就拿掉了SHT,买了一块山寨的 ESP-8266,体积也很小,功耗低,也便宜,搞几个干电池就能供电了,然后就用 ESP 8266 来控制 SHT 30,还能通过 Wi-fi 来传数据(就读个温度/湿度,安全性不重要,随便透传)。用了三天,ESP 8266 上的板载LED灯坏了,但开发板还能正常用。

如果你特别喜欢大草莓(树莓派),也可以买树莓派家族的微控制器开发板—— 树莓派 Pico,也可以叫它小草莓。小草莓和 Arduino 系列的板子有点像(和 Nano 体积差不多),有 Micro-USB 口,用一根安卓手机数据线就可以和电脑连接了,非常地友好。Pico 不带操作系统,就是一块单片机,所以功耗低,特省电,供电电压在 1.8V 到 5.5V 之间,可以用手机充电器供电,省事。

好了,扯远了,因为本文的内容比较 easy,所以老周就先扯些没用的,接下来咱们扯些有用的。

SHT30 很小巧,标准的 i2C 引脚——vcc、gnd、sda、scl。买的时候最好买已经焊接好引脚的,不然,自己焊的话真的需要经验,毕竟模块很小,技术不好容易弄坏,动作不够快也容易焊成连锡——各个引脚导通了。老周的焊功比较烂,不敢自己动手。

既然是标准的 I2C 引脚,这模块当然是用 I2C 来通信了。如果你没作更改,默认的从机地址是 0x44。

这一次,老周向各位介绍微软封装的另一个库——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/<你要放置的目录>

运行结果如下图所示。

是不是很简单呢?前面在写这系列文章时,老周没有提到这个 Iot.Device.Bindings 库,是因为想让大伙伴们对 GPIO 一些基本通信有所了解。咱们在学习的时候,不要急着拿现成的库来用,先自己试着写些简单的东东玩玩,对相关知识有一定了解后,再去寻找现成的库。这样既能学到原理性的东西,也能提高开发效率。

目前这个 bindings 库微软在不断地更新,支持的模块越来越多。尽管如此,有些模块还是没有收录进去。比如,上次老周介绍过的 MPU 6050 ,bindings 库里面就没有,库里面只有 MPU 6500 和 MPU 9250。

【.NET 与树莓派】温度/湿度传感器——SHT30的更多相关文章

  1. 树莓派从 DHT11 温度湿度传感器读取数据

    时序图参考厂家说明书:DHT11数字湿温度传感器的原理和应用范例 四个阵脚连接:VCC接3.3伏电源,Dout接GPIO口,我接的是物理12针脚,NC留空,GND接地. 波折1:电阻被错接进了VCC, ...

  2. 【Raspberry Pi】DHT11 温度湿度传感器数据读取

    时序图参考厂家说明书:DHT11数字湿温度传感器的原理和应用范例 四个阵脚连接:VCC接3.3伏电源,Dout接GPIO口,我接的是物理12针脚,NC留空,GND接地. 波折1:电阻被错接进了VCC, ...

  3. Arduino IDE 开发ESP-01/ESP8266-01读取DHT11温度湿度传感器

    引脚接线: DHT11---ESP8266-01 Singnal--IO2, GND----GND, VCC----VCC DHT11引脚说明: ESP8266-01/ESP8266-01S引脚说明: ...

  4. Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器

    一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 ...

  5. 单片机DIY制作-基于STM32单片机甲醛二氧化碳温度湿度采集系统

    基于STM32单片机甲醛二氧化碳温度湿度采集系统 实践制作DIY-GC008-甲醛二氧化碳温度湿度采集系统 一.功能说明: 基于STM32单片机设计-甲醛二氧化碳温度湿度采集系统 二.功能介绍: 1. ...

  6. 「雕爷学编程」Arduino动手做(8)——湿度传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  7. Arduino+温度、湿度传感器

    Arduino语言注解Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们 ...

  8. 树莓派读取DHT11传感器的源代码

    import wiringpi2 as gpio owpin=8 #第8脚为1-wire脚 def getval(owpin): tl=[] #存放每个数据位的时间 tb=[] #存放数据位 gpio ...

  9. [转载] 树莓派读取温湿度传感器DHT11

    原文地址: http://blog.csdn.net/liang890319/article/details/8739683 硬件: 树莓派 2.0 DHT模块  接树莓派5V GND GPIO1 功 ...

随机推荐

  1. hdu1247 字典树或者hash

    题意:      给你一些串,问你哪些串是由其他两个串连接成的. 思路:        我用了两种方法,一个是hash,hash的时候用map实现的,第二种方法是字典树,字典树我们枚举每个一字符串,查 ...

  2. Burpsuite工具的使用

    目录 Burpsuite Proxy代理模块 Repeater模块(改包,重放) Intruder模块(爆破) Target模块 position模块 Payloads模块 Options模块 一处爆 ...

  3. hdu3415单调队列

    题意:       给你一个数字组成的环,要求在里面找到一个最大的子序列,使得和最大,要求: (1)子序列长度不能超过k (2)如果子序列和相同要起点最小的 (3)如果起点相同要长度最小的 思路:   ...

  4. WindowsPE 第五章 导出表编程-1(枚举导出表)

    导出表编程-1-枚举导出表 开始前先回忆一下导出表: 1.枚举dll函数的导出函数名字: 思路: (1)加载dll到内存里. (2)获取PE头,逐步找到可选头部. (3)然后找到里面的第一个结构(导出 ...

  5. Wampserver-删除虚拟主机

    对hosts操作 到目录C:\Windows\System32\drivers\etc中修改hosts 比如你想删除iwh2.com 选中这2行进行删除,保存退出 对httpd-vhosts操作 到目 ...

  6. Day015 Error和Exception

    Error和Exception 什么是异常 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件的格式不对,你 ...

  7. Nmap浅析(2)——端口发现

    端口发现 ​ 每台网络设备最多有216(65536)个端口,端口的作用是实现"一机多用".操作系统分了65536个端口号,程序在发送的信息中加入端口号,操作系统在接收到信息后按照端 ...

  8. Scrum Meeting 1

    Basic Info where:新主楼 when:2020/4/23 target: 简要汇报一下已完成任务,下一步计划与遇到的问题 Progress Team Member Position Ac ...

  9. copy和deep.copy

    https://blog.csdn.net/qq_32907349/article/details/52190796 加上crossin公众号上的可变对象与不可变对象 a=[1,2,3,[4]] b= ...

  10. Nginx导航

    简介 最近都在弄微服务的东西,现在来记录下收获.我从一知半解到现在能从0搭建使用最大的感触有两点 1.微服务各大组件的版本很多,网上很多博客内容不一定适合你的版本,很多时候苦苦琢磨都是无用功 2.网上 ...