#include "DHTesp.h"
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#define DHT_PIN 33
DHTesp dhtSensor;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* iocontrol_read_api = "http://iocontrol.ru/api/readData";
const char* iocontrol_send_api = "http://iocontrol.ru/api/sendData";
const char* board_id = "ESP32_LR6Z";
double t = 0;
double h = 0;
bool enabled = false;
unsigned long previousMillis = 0;
const long interval = 5000;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi подключен");
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
updateControlState();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (!enabled) {
sendFloatData("temperature", 0.0);
sendFloatData("humidity", 0.0);
sendTextStatus("disabled");
return;
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
t = data.temperature;
h = data.humidity;
sendFloatData("temperature", t);
sendFloatData("humidity", h);
sendTextStatus(getTempStatus(t));
Serial.println("Температура: " + String(t));
Serial.println("Влажность: " + String(h));
}
}
void updateControlState() {
HTTPClient http;
String url = String(iocontrol_read_api) + "/" + board_id + "/switch";
http.begin(url);
int httpCode = http.GET();
if (httpCode == 200) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
String value = doc["value"];
enabled = (value == "1");
Serial.println("Кнопка: " + String(enabled ? "Включена" : "Выключена"));
} else {
Serial.println("Ошибка: " + String(httpCode));
}
http.end();
}
void sendFloatData(String variable, float value) {
HTTPClient http;
String url = String(iocontrol_send_api) + "/" + board_id + "/" + variable + "/" + String(value, 1);
http.begin(url);
int httpCode = http.GET();
if (httpCode == 200) {
Serial.println("Отправлено: " + variable + " = " + String(value));
} else {
Serial.println("Не отправлено " + variable + ": " + String(httpCode));
}
http.end();
}
void sendTextStatus(String code) {
HTTPClient http;
String url = String(iocontrol_send_api) + "/" + board_id + "/state/" + code;
http.begin(url);
int httpCode = http.GET();
if (httpCode == 200) {
Serial.println("Текст отправлен: " + code);
} else {
Serial.println("Текст не отправлен: " + String(httpCode));
}
http.end();
}
String getTempStatus(float t) {
if (t > 60) return "Dangerously_high";
else if (t > 30) return "High";
else if (t >= -10) return "Optimal";
else if (t >= -30) return "Low";
else return "Dangerously_low";
}