mikkinikki
New member
Делаю гроубокс с автоматическим включением, выключением лампы, регулировкой температуры и влажности. Имеются таки железки: Wemos D1 mini; ёмкостной датчик влажности почвы; модуль часов в реальном времени DS1302; датчик температуры и влажности DHT 21; 4-х канальный твердотельный релейный модуль G3MB-202P.
Есть скетч автоматизации, который меня полностью устраивает, хотя, может он и не идеальный, я не сильно разбираюсь, но главное - работает так, как я хочу. Я вижу в нем где можно изменить пределы температуры и влажности, периоды и продолжительность работы железок. И есть скетч для web-сервера, который отображает показания датчиков и состояние реле.
Как объединить два скетча, что-бы все работало?
Есть скетч автоматизации, который меня полностью устраивает, хотя, может он и не идеальный, я не сильно разбираюсь, но главное - работает так, как я хочу. Я вижу в нем где можно изменить пределы температуры и влажности, периоды и продолжительность работы железок. И есть скетч для web-сервера, который отображает показания датчиков и состояние реле.
Как объединить два скетча, что-бы все работало?
C++:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <DHT.h>
#define DHTTYPE DHT21
int sensorPin = A0;
uint8_t DHTPin = 2;
DHT dht(DHTPin, DHTTYPE);
MDNSResponder mdns;
// Wi-Fi
const char* ssid = "*****************";
const char* password = "*************";
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 222); // здесь можно изменить IP адрес контроллера
IPAddress gateway(192, 168, 1, 1); // IP адрес роутера
IPAddress subnet(255, 255, 255, 0);
ESP8266WebServer server(80);
int lamp = 14;
int ventil = 12;
int water = 13;
void setup(void) {
// preparing GPIOs
pinMode(lamp, OUTPUT);
pinMode(ventil, OUTPUT);
pinMode(water, OUTPUT);
delay(100);
Serial.begin(115200);
WiFi.begin(ssid, password);
WiFi.config(ip, gateway, subnet);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
//+++++++++++++++++++++++ START ЛАМПА ++++++++++++++++++++
server.on("/", []() {
server.send(200, "text/html", webPage());
});
server.on("/socket1On", []() {
digitalWrite(lamp, HIGH);
server.send(200, "text/html", webPage());
delay(100);
});
server.on("/socket1Off", []() {
digitalWrite(lamp, LOW);
server.send(200, "text/html", webPage());
delay(100);
});
//+++++++++++++++++++++++ END ЛАМПА ++++++++++++++++++++
//+++++++++++++++++++++++ START ВЫТЯЖКА ++++++++++++++++++++
server.on("/socket2On", []() {
digitalWrite(ventil, HIGH);
server.send(200, "text/html", webPage());
delay(100);
});
server.on("/socket2Off", []() {
digitalWrite(ventil, LOW);
server.send(200, "text/html", webPage());
delay(100);
});
// +++++++++++++++++++++++ END ВЫТЯЖКА ++++++++++++++++++++
//+++++++++++++++++++++++ START УВЛАЖНИТЕЛЬ ++++++++++++++++++++
server.on("/socket3On", []() {
digitalWrite(water, HIGH);
server.send(200, "text/html", webPage());
delay(100);
});
server.on("/socket3Off", []() {
digitalWrite(water, LOW);
server.send(200, "text/html", webPage());
delay(100);
});
// +++++++++++++++++++++++ END УВЛАЖНИТЕЛЬ ++++++++++++++++++++
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
String webPage()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
String web;
web += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/> <meta charset=\"utf-8\"><title>ESP 8266</title><style>button{color:red;padding: 10px 27px;}</style></head>";
web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">ESP8266 Web Server</h1><div>";
//++++++++++ ЛАМПА +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----ЛАМПА----</p>";
if (digitalRead(lamp) == 1)
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
}
else
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
}
web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket1On\"><button>ON</button></a> <a href=\"socket1Off\"><button>OFF</button></a></div>";
// ++++++++ ЛАМПА +++++++++++++
//++++++++++ ВЫТЯЖКА +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----ВЫТЯЖКА----</p>";
if (digitalRead(ventil) == 1)
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
}
else
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
}
web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket2On\"><button>ON</button></a> <a href=\"socket2Off\"><button>OFF</button></a></div>";
// ++++++++ ВЫТЯЖКА +++++++++++++
//++++++++++ УВЛАЖНИТЕЛЬ +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----УВЛАЖНИТЕЛЬ----</p>";
if (digitalRead(water) == 1)
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
}
else
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
}
web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket3On\"><button>ON</button></a> <a href=\"socket3Off\"><button>OFF</button></a></div>";
// ++++++++ УВЛАЖНИТЕЛЬ +++++++++++++
//++++++++++ Влажность почвы +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">-Влажность почвы-</p>";
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #5191e4;margin: 0 auto;\">" + String((int)analogRead(sensorPin)) + "</div>";
// ++++++++ Влажность почвы +++++++++++++
//++++++++++ Температура в боксе +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">-Температура в боксе-</p>";
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #5191e4;margin: 0 auto;\">" + String((int)t) + "</div>";
// ++++++++ Температура в боксе +++++++++++++
//++++++++++ Влажность в боксе +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">-Влажность в боксе-</p>";
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #5191e4;margin: 0 auto;\">" + String((int)h) + "</div>";
// ++++++++ Влажность в боксе +++++++++++++
// ========REFRESH=============
web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
// ========REFRESH=============
web += "</div>";
return (web);
}