Контроллер санузла на базе Wemos D1 WiFi
- Войдите на сайт для отправки комментариев
Всем привет! Это мой первый проет и первое знакомтсов с ардуиной, поэтому за код прошу сильно не пинать.
Задачи:
Реализовано:
1. Управление светом;
2. Считывание показаний влажности и темературы DHT11;
3. Управление индикация через вебстраничку;
4. Работа в режиме точки доступа;
В процессе:
1. Управление реле вытяжки по достижению влажности.
(Столкнулся с двумя проблемами: 1. Необходимо брать устредненное значение влажности что-бы значение не скакало. 2. Придется использовать прерывание, что плохо для вебсервера.)
2. Отправка состояния и данные по температуре и влажности в интернет (thingspeak);
3. Индикация температуры воды ванной DS18B20
(пока нет ванной :) )
Шрифт поставил большой для удобства просмотра в мобильном телефоне.
Буду рад любым советам.
Собственно код:
#include <ESP8266WiFi.h>
#include "DHT.h"
#define DHTPIN D4 // номер пина, к которому подсоединен датчик температуры
// Инициируем датчик
//DHT dht(DHTPIN, DHT22);
DHT dht(DHTPIN, DHT11);
const char* ssid = "имяточкидоступа";
const char* password = "пароль";
int ledPin = D2; //пин выключателя 1
int ledPin2 = D3; //пин выключателя 2
int value = LOW;
int value2 = LOW;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
dht.begin();
delay(10);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
pinMode(ledPin2, OUTPUT);
digitalWrite(ledPin2, HIGH);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Creating AP");
Serial.println(ssid);
WiFi.softAP(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Creating WiFi AP bathroom OK");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.softAPIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request для реле 1
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, LOW);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1){
digitalWrite(ledPin, HIGH);
value = LOW;
}
// Match the request для реле 2
if (request.indexOf("/LED2=ON") != -1) {
digitalWrite(ledPin2, LOW);
value2 = HIGH;
}
if (request.indexOf("/LED2=OFF") != -1){
digitalWrite(ledPin2, HIGH);
value2 = LOW;
}
float h = dht.readHumidity();
float t = dht.readTemperature();
float hic = dht.computeHeatIndex(t, h, false);
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
if (isnan(h) || isnan(t)) {
client.println("Не удается считать показания темпеатуры и влажности");
client.println("<br><br>");
}
else {
client.print("<center><font size=\"15\" color=\"green\"><font size=\"15\" color=\"blue\">Humidity "); client.print(h); client.println( "%</font></center>");
client.print("<center><font size=\"15\" color=\"green\"><font size=\"15\" color=\"green\">Temperature "); client.print(t); client.println(" *C</font></center>");
client.print("<center><font size=\"15\" color=\"green\"><font size=\"15\" color=\"green\">Heat Index "); client.print(hic); client.println(" *C</font></center>");
client.println("<br><br>");
}
client.print("<center><font size=\"15\">Led pin 1 is now: </font>");
if(value == HIGH) {
client.print("<font size=\"15\" color=\"green\">On</font></center>");
} else {
client.print("<font size=\"15\" color=\"yellow\">Off</font></center>");
}
client.println("<br>");
client.println("<center><font size=\"15\"><a href=\"/LED=ON\">LED on pin 1 ON</a></font></center><br>");
client.println("<center><font size=\"15\"><a href=\"/LED=OFF\">LED on pin 1 OFF</a></font></center><br>");
client.println("<br><br>");
client.print("<center><font size=\"15\">Led pin 2 is now: </font>");
if(value2 == HIGH) {
client.print("<font size=\"15\" color=\"green\">On</font></center>");
} else {
client.print("<font size=\"15\" color=\"yellow\">Off</font></center>");
}
client.println("<br>");
client.println("<center><font size=\"15\"><a href=\"/LED2=ON\">LED on pin 2 ON</a></font></center><br>");
client.println("<center><font size=\"15\"><a href=\"/LED2=OFF\">LED on pin 2 OFF</a></font></center><br>");
client.println("<br><br>");
client.println("</html>");
delay(1);
Serial.println("Client disconnected");
Serial.println("");
}