Контроллер санузла на базе 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(""); }