用ESP8266和SHT31制作一个温湿度计

最近天气是越来越热了,到底有多热呢? 我也不知道,如果有一个温湿度计的话就知道有多热了,于是就萌生了做一个温湿度计的想法。

选材

网上的做温湿度传感器用得最多的是DHT11和DHT22,因为这两便宜简单嘛,DHT11几块钱,三根线,能测温度和湿度。
我之前做过的温湿度传感器用的误差和精度相对高一点的DHT22, 虽然比DHT11贵了好几倍,但却没多少长进, 温度还好,误差都不大,湿度测量起来就是玄学了(涉及到测量气体的都不好整),一会儿90%,一会儿60%,这两个在湿度测量方面来说只适合在实验室拿来练手。

在对市面上的温湿度传感器做了一番调研之后,我相中了盛世瑞恩(SENSIRION)这个公司的SHT3x系列的传感器,(https://www.sensirion.com/cn/environmental-sensors/temperature-sensors/)。

SHT3X系列主要有低成本的SHT30, 中端的SHT31, 和高品质的SHT35, 顺便提一句: 小米的温湿度仪就是采用的SHT30传感器。

考虑到SHT35的售价和SHT30的质量,最终我选择了SHT31。上位机选择了ESP8266来读取SHT31的测量的数据,还可以将数据通过网络发送到服务器做统计,如果有OLED屏幕,也可以直接显示在屏幕上。

所以此温湿度计所用到的硬件有:
SHT31
ESP8266
导线若干,10K电阻若干
OLED屏幕(可选)
软件:
MicroPython

接线

我使用的是ESP8266裸芯片,需要按照最小系统电路图接上若干电阻,然后烧录MicroPython固件,使用MicroPython快速开发

SHT31对外通讯使用了I2C总线,ESP8266与SHT31的接线如下图所示
ESP8266 SHT31 接线图

读取温湿度

接下来使用MicroPython的库来获取SHT31的数据:
直接贴代码:

1
2


联网

读取到温湿度以后可以通过MQTT或者其他方式将温湿度数据发送出去, 比如我们写个服务端,将接收到的温湿度实时展示出来,或者接入homeassistant平台,将根据温湿度变化控制风扇、空调, 实现家居智能化。

MicroPython的通过MQTT发消息的代码如下:

1
2