Контроллер санузла на базе Wemos D1 WiFi

Нет ответов
YaSerg
Offline
Зарегистрирован: 02.03.2017

Всем привет! Это мой первый проет и первое знакомтсов с ардуиной, поэтому за код прошу сильно не пинать.

Задачи:

Реализовано:
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("");
 
}