基于arduino的温湿度传感器应用
温湿度传感器深度解析与多平台开发实战
一、温湿度传感器代码实现(Arduino平台)
1. 基础传感器驱动(DHT11)
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11DHT 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或0x45Serial.println("找不到SHT31传感器!");while (1) delay(1);}
}void loop() {float t = sht31.readTemperature();float h = sht31.readHumidity();if (!isnan(t) && !isnan(h)) {Serial.print("Temp *