#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHTPIN 26 // DHT传感器连接的GPIO引脚
#define DHTTYPE DHT22 // DHT类型(DHT11或DHT22)
#define LED1PIN 25 // LED连接的GPIO引脚
#define TEMPERATURE_THRESHOLD 35 // 温度阈值
//传感器数据
String data = "";
String tmp = "&light=300&infrared=0";
String url = "http://122.51.140.72:3535/sensorDataServlet";
String mode = "";
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(LED1PIN, OUTPUT); // 设置LED引脚为输出模式
dht.begin(); // 初始化DHT传感器
// Wire.begin();
//连接WiFi
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
//初始化模式
HTTPClient http;
Serial.print("[HTTP] 确认模式...\n");
http.begin("http://122.51.140.72:3535/statusServlet"); // 指定请求的URL
int httpCode = http.GET();
if (httpCode == 200) {
String payload = http.getString();
mode = payload.charAt(0);
if(mode=="0") {
Serial.println("[HTTP] 自动模式");
}
if(mode=="1") {
Serial.println("[HTTP] 手动模式");
}
}
else {
Serial.printf("[HTTP] 错误: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
void loop() {
//自动模式
if(mode=="0") {
Serial.println("当前模式:自动");
// 读取温度和湿度值
float temperature1 = dht.readTemperature();
float humidity1 = dht.readHumidity();
// 检查温度是否高于阈值
if (temperature1 >= TEMPERATURE_THRESHOLD) {
digitalWrite(LED1PIN, HIGH); // 开启空调
Serial.println("开启空调");
} else {
digitalWrite(LED1PIN, LOW); // 关闭空调
Serial.println("关闭空调");
}
Serial.print("Temperature: ");
Serial.print(temperature1);
Serial.print(" *C, Humidity: ");
Serial.print(humidity1);
Serial.println("%");
delay(5000);
// 再次读取温度和湿度值
float temperature2 = dht.readTemperature();
float humidity2 = dht.readHumidity();
//温湿度发生变化,向服务器发送数据
if(temperature1!=temperature2||humidity1!=humidity2) {
if (WiFi.status() == WL_CONNECTED) {
String request = url+"?temperature="+String(temperature2)+"&humidity="+String(humidity2)+tmp;
//Serial.println(request);
// 创建HTTPClient实例并发送请求
HTTPClient http;
http.begin(request);
int httpCode = http.GET();
if (httpCode == 200) {
Serial.println("数据发送成功!");
} else {
Serial.println("数据发送失败!");
}
http.end();
} else {
Serial.println("未连接到网络!");
}
}
// 查询状态
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://122.51.140.72:3535/statusServlet");
int httpCode = http.GET();
if (httpCode == 200) {
String payload = http.getString();
mode = payload.charAt(0);
} else {
Serial.printf("[HTTP] 错误: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.println("未连接到网络!");
}
}
//手动模式
else {
Serial.println("当前模式:手动");
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
//查询状态
http.begin("http://122.51.140.72:3535/statusServlet");
int httpCode = http.GET();
if (httpCode == 200) {
String payload = http.getString();
mode = payload.charAt(0);
String air = "";
air = payload.charAt(1);
if(air=="0") {
digitalWrite(LED1PIN, LOW); // 关闭空调
Serial.println("空调状态:关闭");
} else {
digitalWrite(LED1PIN, HIGH); // 开启空调
Serial.println("空调状态:开启");
}
} else {
Serial.printf("[HTTP] 错误: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
} else {
Serial.println("未连接到网络!");
}
delay(2000);
}
}