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. Python脚本与Metasploit交互进行自动永恒之蓝攻击

    我们首先利用 findTarget() 函数找到目标网段或目标主机中开放了445端口的主机,然后利用 confickerExploit() 函数将攻击代码写入 configure.rc 配置文件中,最 ...

  2. Portswigger web security academy:Server-side template injection(SSTI)

    Portswigger web security academy:Server-side template injection(SSTI) 目录 Portswigger web security ac ...

  3. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  4. IDEA只有Commit没有Push按钮

    问题描述 idea的右上角只有commit按钮,而没有push按钮 问题解决 打开File->Settings->Menus and Toolbars->Navigation Bar ...

  5. 使用C#进行数据库增删改查ADO.NET(一)

    这节讲一下如何使用C#进行数据库的增删改查操作,本节以SQL Server数据库为例. .NET 平台,使用ADO.NET 作为与数据库服务器的桥梁,我们通过ADO.NET就可以使用C#语言操作数据库 ...

  6. Spring Cloud Alibaba(10)---Sentinel控制台搭建+整合SpringCloudAlibaba

    上一篇博客讲了Sentinel一些概念性的东西 Spring Cloud Alibaba(9)---Sentinel概述 这篇博客主要讲 Sentinel控制台搭建,和 整合SpringCloudAl ...

  7. PSP初体验:求交点

    项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:完成一个平面图形求交点的程序,体验PSP的过程 个人项目作业 我在这个课程的目标是 体验软件开发的全流程 这个作业在哪个具体方面帮助我实 ...

  8. ES6学习-0 前言

    本菜鸟做了二十来年的程序开发了,前后台都写过,队伍也带过.大约是2000年左右,是用dephi 写后台CGI,所有的html,js,css基本都是混在CGI里输出到前台的,那时也没有明确的前后台的概念 ...

  9. Linux创建RAID概述

    Linux创建RAID RAID概述 RAID(Redundant Array of Independent Disk)虚拟存储系统 RAID即独立冗余磁盘阵列,其思想是将多块独立的磁盘按不同的方式组 ...

  10. JFlash ARM对stm32程序的读取和烧录-(转载)

    本篇文章主要是记录一下JFlash ARM 的相关使用和操作步骤,读取程序说不上破解,这只是在没有任何加密情况下对Flash的读写罢了!在我们装了JLINK驱动后再根目录下找到JFlash ARM , ...