温湿度传感器深度解析与多平台开发实战
一、温湿度传感器代码实现(Arduino平台)
1. 基础传感器驱动(DHT11)
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000); // 传感器最小采样间隔1秒
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("传感器读取失败!");
return;
}
// 计算体感温度(热指数)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("湿度: "); Serial.print(h); Serial.print("%\t");
Serial.print("温度: "); Serial.print(t); Serial.print("°C\t");
Serial.print("体感温度: "); Serial.print(hic); Serial.println("°C");
}
代码解析:
-
采样限制:DHT11需至少1秒间隔,强行高频读取会导致数据错误
-
错误处理:
isnan()
检测NaN值,避免程序崩溃 -
热指数计算:DHT库内置算法实现人体感知温度模拟
2. 高精度传感器驱动(SHT31 + I2C)
#include <Wire.h>
#include <Adafruit_SHT31.h>
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
Serial.begin(115200);
if (!sht31.begin(0x44)) { // 地址可选0x44或0x45
Serial.println("找不到SHT31传感器!");
while (1) delay(1);
}
}
void loop() {
float t = sht31.readTemperature();
float h = sht31.readHumidity();
if (!isnan(t) && !isnan(h)) {
Serial.print("Temp *