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. UVA11292杀怪

    题意:      一个怪物有N个头,每个头都有半径,然后有M个骑士,每个骑士能砍掉半径小于等于 X[i]的头,花费为X[i],并且一个骑士只能用一次,问砍掉怪物所有头的最小花费. 思路:       ...

  2. CString,string,char数组的转换

    来源:http://ticktick.blog.51cto.com/823160/317550 //----------------ANSI字符串转换为UNICODE字符串-------------- ...

  3. 【JavaScript】JS从入门到深入(复习查漏向

    [JavaScript]JS从入门到深入(复习查漏向 pre 精细得学过一遍JS后才发现,原来之前CTF中有些nodejs的题目以及一些游戏题的payload就变得很好理解了. 基础知识 ECMASc ...

  4. 7 IDEA连接数据库

    IDEA连接数据库 连接成功后,选择数据库 查看数据库/表的内容就双击数据库 修改数据库--要点击DB才能保存 出现问题 错误描述 Server returns invalid timezone. G ...

  5. GUI基础知识点

    简介 GUI的核心技术:AWT(是Swing 的前身) Swing 不流行的原因 界面不美观 运行需要jre环境(可能一个项目的大小比jre还要大) 为什么我们需要学习 了解MVC架构和监听 AWT ...

  6. idea中修改代码大小设置

    修改代码大小 控制台字体大小

  7. 【Linux】在centos中使用命令安装redis

    1.前提centos能够上网 测试方式输入命令,有数据返回即可.如果则先配置centos网络连接. ping www.baidu.com 2.安装gcc 输入命令进行安装 yum install gc ...

  8. myysql 不能远程访问的解决办法

    1.通过navicat或者命令行,将user表中原来host=localhost的改为host=% 命令行方式: mysql> update user set host = '%' where ...

  9. mysql搭建多主一从源复制环境

    问题描述:搭建过一主多从的环境,由于数据库数据一致性要求高,有些情景会搭建一主多从的架构,搭建多主一从的模式,相对来说适合数据整合,将多个业务的库整合到一起,方便做查询,也可以当做一个监控其他主库数据 ...

  10. LinkedList作为栈和队列的使用

    最近在LeekCode用java写一些算法时,经常遇到要使用栈和队列结构,使用栈的话,Stack已经不被推荐使用了,所以栈和队列我们通常都是用LinkedList这种双链表结构实现.Linkedlis ...