ESP8266-Arduino编程实例-SHT40温湿度传感器驱动

SHT40温湿度传感器驱动

1、SHT40介绍

SHT40下一代 SHT 传感器,过去我们有过 SHt31 等传感器的示例。

SHT40 基于全新优化的 CMOSens® 芯片构建,可降低功耗并提高精度规格。 凭借 1.08 V 至 3.6 V 的扩展电源电压范围,它非常适合移动和电池驱动应用。

在这里插入图片描述

与早期的 SHT 传感器不同,该传感器具有真正的 I2C 接口,只需两根线(加上电源和地线!)即可轻松连接。

SHT40具有如下特性:

  • 尺寸: 1.5 x 1.5 x 0.5 mm3
  • 输出 I²C
  • 电源电压范围: 1.08 至 3.6 V
  • 能耗: 0.4µA(测量速率为 1 Hz)
  • 相对湿度工作范围: 0 – 100% RH
  • T工作范围: -40 至 +125°C(-40 至 +257°F)
  • 相对湿度响应时间: 6 秒 (tau63%)

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • SHT40传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次使用的驱动库如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "Adafruit\_SHT4x.h"

Adafruit_SHT4x sht4 = Adafruit\_SHT4x();

void setup() {
Serial.begin(115200);

while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens

Serial.println("Adafruit SHT4x test");
if (! sht4.begin()) {
Serial.println("Couldn't find SHT4x");
while (1) delay(1);
}
Serial.println("Found SHT4x sensor");
Serial.print("Serial number 0x");
Serial.println(sht4.readSerial(), HEX);

// You can have 3 different precisions, higher precision takes longer
sht4.setPrecision(SHT4X_HIGH_PRECISION);
switch (sht4.getPrecision()) {
case SHT4X_HIGH_PRECISION:
Serial.println("High precision");
break;
case SHT4X_MED_PRECISION:
Serial.println("Med precision");
break;
case SHT4X_LOW_PRECISION:
Serial.println("Low precision");
break;
}

// You can have 6 different heater settings
// higher heat and longer times uses more power
// and reads will take longer too!
sht4.setHeater(SHT4X_NO_HEATER);
switch (sht4.getHeater()) {
case SHT4X_NO_HEATER:
Serial.println("No heater");
break;
case SHT4X_HIGH_HEATER_1S:
Serial.println("High heat for 1 second");
break;
case SHT4X_HIGH_HEATER_100MS:
Serial.println("High heat for 0.1 second");
break;
case SHT4X_MED_HEATER_1S:
Serial.println("Medium heat for 1 second");
break;
case SHT4X_MED_HEATER_100MS:
Serial.println("Medium heat for 0.1 second");
break;
case SHT4X_LOW_HEATER_1S:
Serial.println("Low heat for 1 second");
break;
case SHT4X_LOW_HEATER_100MS:
Serial.println("Low heat for 0.1 second");
break;
}

}


void loop() {
sensors\_event\_t humidity, temp;

uint32\_t timestamp = millis();
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
timestamp = millis() - timestamp;

Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");

Serial.print("Read duration (ms): ");
Serial.println(timestamp);

delay(1000);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126957631