上面就是ESP8266的引脚图,水温检测使用的是水位监测传感器,温湿度测量使用的是DHT11,DHT11的反应时间是2秒,这里要注意。开发采用Arduino程序
1. 传感器初始化
-
功能:初始化DHT11温湿度传感器和串口通信。
-
代码实现:
#include <DHT.h> #define DHTPIN D4 // DHT11数据引脚接D4 #define DHTTYPE DHT11 // 传感器类型为DHT11 DHT dht(DHTPIN, DHTTYPE); // 创建DHT对象 void setup() { Serial.begin(9600); // 串口通信初始化(波特率9600) dht.begin(); // 启动DHT11传感器 }
2. 传感器数据采集
-
功能:循环读取三个传感器的数据:
-
A0引脚:模拟值(如水位传感器的原始电压值)。
-
DHT11:湿度(
humidity
)和温度(temperature
)。
-
-
代码实现:
void loop() { int sensorValue = analogRead(A0); // 读取A0引脚模拟值(水位) float humidity = dht.readHumidity(); // 读取湿度(单位:%) float temperature = dht.readTemperature(); // 读取温度(单位:℃)
3. 数据有效性检查
-
功能:检测DHT11数据是否读取成功,失败时输出错误信息。
-
代码实现:
if (isnan(humidity) || isnan(temperature)) { // 检查是否为无效数据 Serial.println("Failed to read from DHT sensor!"); delay(1000); // 等待1秒后重试 return; // 跳过后续代码,直接进入下一轮循环 }
4. 数据格式化与输出
-
功能:将传感器数据格式化为字符串并通过串口发送。
-
代码实现:
char buffer[50]; // 格式化字符串:水位(整数)、湿度(两位小数)、温度(两位小数) snprintf(buffer, sizeof(buffer), "%d,%.2f,%.2f", sensorValue, humidity, temperature); Serial.println(buffer); // 输出到串口
输出示例
串口输出格式为:水位模拟值,湿度,温度
,例如:
512,45.00,25.50
表示:水位模拟值512,湿度45%,温度25.5℃。