Не работает контроллер от других розеток

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

Всем привет. 

Решил я как-то воткнуть контроллер в санузел для управления вытяжкой, контролем влажности и протечками. Собрал все на макетной схеме на работе, запустил все работает отлично. На дисплей информация выводится, реле управляются. 

#include <ESP8266WiFi.h>
#include "DHT.h"
#include <Average.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

unsigned long previousMillis = 0;        // начало времени для опроса датчика температуры
unsigned long previousMillis2 = 0;        // начало отсчета для вытяжки
const long interval = 3000;           // пауза между опросами датчика температуры
const long interval2 = 300000;           // время непрерывной работы вытяжки 5 минут (300000 )
const long interval3 = 120000;           // время остывания мотора вытяжки если влыжность не понижена работой вытяжки 2 минуты (120000 )
int timeTostop;
int hummCount = 70; // влажность для включения вытяжки

#define DHTPIN D2 // номер пина, к которому подсоединен датчик температуры

// Инициируем датчик

//DHT dht(DHTPIN, DHT22);

DHT dht(DHTPIN, DHT11);

Average<float> ave(20); // создаем массив на 20 значений
 
const char* ssid = "bathroom";
const char* password = "123456789";
 
int ledPin = D7; //пин выключателя у раковины
int ledPin2 = D8; //пин выключателя туалет комод
int ledPin3 = D5; //пин выключателя над ванной
int ledPin4 = D6; //пин выключателя вытяжки
int value = LOW;
int value2 = LOW;
int value3 = LOW;
int value4 = LOW;
boolean value5 = false;

WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);

  dht.begin();

  delay(10);

    // initialize the LCD
  lcd.begin(4,5);  // sda=0 | D3, scl=2 | D4

  // Turn on the blacklight and print a message.
  lcd.backlight();
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, HIGH);
  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);
  pinMode(ledPin4, OUTPUT);
  digitalWrite(ledPin4, 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() {

  unsigned long currentMillis = millis();

   
   if (currentMillis - previousMillis >= interval) {
    // опросить датчик температуры и влажности и положить значение в массив
    Serial.println(previousMillis);
    // сохраняем время последнего опроса датчика
    previousMillis = currentMillis;
    Serial.println(currentMillis);
    float humm = dht.readHumidity();
    ave.push(humm); // получаем значение влажности
    Serial.println(ave.mean());
   }

   if (ave.mean() > hummCount && currentMillis - previousMillis2 >= interval3 && !value5) {
   previousMillis2 = currentMillis; 
   digitalWrite(ledPin4, LOW);
   value4 = HIGH;
   value5 = true;
   }
//   дописать условие ИЛИ время работы более 5 минут
// дописать присваивание значение value4 для отображение на веб статуса работы вытяжки
   if (currentMillis - previousMillis2 >= interval2 && value5) {
    digitalWrite(ledPin4, HIGH);
    previousMillis2 = currentMillis;
    value4 = LOW;
    value5 = false;
   }

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float hic = dht.computeHeatIndex(t, h, false);

    lcd.home();
    lcd.print("TEMP:"); 
    lcd.print(round(t)); 
    lcd.print("*C"); 
    lcd.setCursor(10, 0);
    lcd.print("VT:");
    if (value5) {
    timeTostop = currentMillis - previousMillis2;
    timeTostop = timeTostop / 1000;
    timeTostop = 300 - timeTostop;
    // timeTostop = timeTostop / 60;
      lcd.print(timeTostop); }
    else {lcd.print("0FF");}
    lcd.setCursor(0, 1);
    lcd.print("HUMM:");
    lcd.print(round(ave.mean()));
    lcd.print("%  (");
    lcd.print(hummCount);
    lcd.print("%)"); 
   // lcd.setCursor(0, 1);

  
  // 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;
  }

     // Match the request для реле 3  
  
  if (request.indexOf("/LED3=ON") != -1) {
    digitalWrite(ledPin3, LOW);
    value3 = HIGH;
  } 
  if (request.indexOf("/LED3=OFF") != -1){
    digitalWrite(ledPin3, HIGH);
    value3 = LOW;
  }

       // Match the request для реле 4 (вытяжка  
  
  if (request.indexOf("/LED4=ON") != -1) {
    digitalWrite(ledPin4, LOW);
    value4 = HIGH;
    value5 = true;
    previousMillis2 = currentMillis; 
  } 
  if (request.indexOf("/LED4=OFF") != -1){
    digitalWrite(ledPin4, HIGH);
    value4 = LOW;
    value5 = false;
    previousMillis2 = currentMillis;
  }

       // Парсим заданное значение влажности для включения вытяжки 
       
  if (request.indexOf("/HUM=40") != -1) {
      hummCount = 40;
  }  
  if (request.indexOf("/HUM=50") != -1) {
      hummCount = 50; 
  } 
  if (request.indexOf("/HUM=60") != -1){
      hummCount = 60;
  }
  if (request.indexOf("/HUM=70") != -1){
      hummCount = 70;
  }

  
  
  // 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>");
  client.println("<head><meta charset=\"utf-8\"> <title>ЯСанузел</title></head>");

  if (isnan(h) || isnan(t)) {

  client.println("Не удается считать показания темпеатуры и влажности");
  client.println("<br><br>");
  }

  else {
   client.print("<center><font size=\"15\" color=\"blue\">Влажность "); client.print(h); client.println( "%</font></center>");
   client.print("<center><font size=\"15\" color=\"blue\">Средняя влажность:   "); client.println(ave.mean()); client.println(" %</font></center>");
   client.print("<center><font size=\"15\" color=\"green\">Температура "); client.print(t); client.println(" *C</font></center>");
   client.print("<center><font size=\"15\" color=\"green\">Ощущается как "); client.print(hic); client.println(" *C</font></center>");
   client.println("<br><br>");
   }
  
  client.print("<center><font size=\"15\">Свет у раковины чейчас: </font>");
 
  if(value == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");  
    client.println("<center><font size=\"15\"><a href=\"/LED=OFF\">Выключить</a></font></center><br>");  
  } else {
    client.print("<font size=\"15\" color=\"yellow\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED=ON\">Включить</a></font></center><br>");
  }


  client.println("<br><br>");

  client.print("<center><font size=\"15\">Свет у туалета сейчас: </font>");
 
  if(value2 == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED2=OFF\">Выключить</a></font></center><br>");   
  } else {
    client.print("<font size=\"15\" color=\"yellow\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED2=ON\">Включить</a></font></center><br>");
  }
 
  client.println("<br><br>");


  client.print("<center><font size=\"15\">Свет над ванной сейчас: </font>");
 
  if(value3 == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED3=OFF\">Выключить</a></font></center><br>");   
  } else {
    client.print("<font size=\"15\" color=\"yellow\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED3=ON\">Включить</a></font></center><br>");
  }
 
  client.println("<br><br>");

    client.print("<center><font size=\"15\">Вытяжка сейчас: </font>");
 
  if(value4 == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED4=OFF\">Выключить</a></font></center><br>");   
  } else {
    client.print("<font size=\"15\" color=\"yellow\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED4=ON\">Включить</a></font></center><br>");
  }
 
  client.println("<br><br>");

  client.print("<center><font size=\"15\">Влажность для включения вытяжки: "); client.print(hummCount); client.println("</font></center>");
  client.print ("<center><br><font size=\"15\"><a href=\"/HUM=40\">40</a>"); client.print("  "); client.print("<a href=\"/HUM=50\">50</a>"); client.print("  "); client.print("<a href=\"/HUM=60\">60</a>"); client.print("  "); client.print("<a href=\"/HUM=70\">70</a></font></center><br><br>");
  client.print ("<center><br><font size=\"15\"><a href=\"http://"); client.print (WiFi.softAPIP());  client.print ("/\">ОБНОВИТЬ</a>");
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
 
}

Потом все это добро не разбирася забрал домой, перед подключением в санузле решил проверить собранную схему, вставляю в розетку, а на дисплее ничего, точка доступа видна, но страница недоступна. Думал может какой контакт, забрал обратно на работу, вставляю в розетку и все работает. Далее поехал опять домой взяв еще один блоки питания. Приезжаю пробую рабочую схему и опять ничего, другой блок питания, тоже ничего. Просто горит дисплей, видна точка доступа, но страница не открывается и на дисплей ничего не выводится.

Я даже не могу предположить что за полтергейст тут может быть.

Penumbra
Offline
Зарегистрирован: 06.08.2017

а что у вас произойдет если отвалятся датчики? программа в вечный цикл не уйдет?

по ВаФляю вы ваш девайс видите? а через порт Serial?

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

Penumbra пишет:

а что у вас произойдет если отвалятся датчики? программа в вечный цикл не уйдет?

При отключении датчика все норма работает. Значение просто не выводит, позволяет реле управлять.

Penumbra пишет:

по ВаФляю вы ваш девайс видите?

Да, виден. Телефон к нему подключается, но страницу не открыает.

Penumbra пишет:

а через порт Serial?

Пока нет возможности проверить, дома ремонт, компа нет.

 

Забыл написать, что плата Wemos D1 R2

 

Penumbra
Offline
Зарегистрирован: 06.08.2017

На работе Симитируйте работу девайса в туалете: подергайте датчики, поглушите вайфляй, пукните рядом ( для более полного приближения к реальным условиям))

дело точно не в розетках

Penumbra
Offline
Зарегистрирован: 06.08.2017

ищите, ваш код гдето стопорится  или циклится до строк

127     lcd.home();
128     lcd.print("TEMP:");
129     lcd.print(round(t));

 

Penumbra
Offline
Зарегистрирован: 06.08.2017

выводите отладочную информацию на LCD  сразу 

типа

043 void setup() {
044

  Serial.begin(115200);
ЛСД--привет запуск
....
ЛСД -- 5 стро кода прошло.. полет нормальный

....
ЛСД -- 15 стро кода прошло.. полет нормальный

...

ЛСД -- N стро кода прошло.. полет нормальный

и ид

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

Penumbra пишет:

На работе Симитируйте работу девайса в туалете: подергайте датчики, поглушите вайфляй, пукните рядом ( для более полного приближения к реальным условиям))

дело точно не в розетках

Все делал, кроме глушилки вайфай, а как это сделать? Очень рядом сотовая вышка, может она глушит контроллер.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет, точно дома провод от щитка к розетке не в ту сторону протянут. На звук это, как известно, катастрофически влияет, наверное и на экран тоже.

Penumbra
Offline
Зарегистрирован: 06.08.2017

ЕвгенийП пишет:

Нет, точно дома провод от щитка к розетке не в ту сторону протянут. На звук это, как известно, катастрофически влияет, наверное и на экран тоже.

ага, не справа на лево а с лева на право )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

точно!

arduino328
Offline
Зарегистрирован: 01.09.2016

ЕвгенийП пишет:

Нет, точно дома провод от щитка к розетке не в ту сторону протянут. На звук это, как известно, катастрофически влияет

Подробнее здесь: http://arduino.ru/forum/otvlechennye-temy/khifilitiki-kulturnyi-shok

Penumbra
Offline
Зарегистрирован: 06.08.2017

черт, а я до этого считал что если кабель проложить от щитка к розетке то розетка будет работать, тк напруга будет течь по кабелю от начала в конец - из щетка к розетке, а если проложить кабель от розетки к щику то розетка работать не будет так как в розетке нет напруги и нечему  там течь ! и я дома везде кабель протянул от щитка к розетке !  прочитав про хивилитиков я понял что я прав! 

PS  а говорят что еще напругу можно ведрами переносить.. надо проверить...

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

Сделал режим вывод каждой операции на экран и понял на каком моменте зависает. Это строка 81, на экран бесконечно выводятся точки.
Но есть закономерность, контроллер номально загружается вблизи како-либо точки доступа. А в помещении где нет WiFi роутеров висит печатая точку.

Думал что может строки 79-82 касаются подключения к точке доступа, закоментировал их. И контроллер стал нормально загружаться где угодно, но к нему как точке доступа невозможно подключиться.

#include <ESP8266WiFi.h>
#include "DHT.h"
#include <Average.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

unsigned long previousMillis = 0;        // начало времени для опроса датчика температуры
unsigned long previousMillis2 = 0;        // начало отсчета для вытяжки
const long interval = 3000;           // пауза между опросами датчика температуры
const long interval2 = 300000;           // время непрерывной работы вытяжки 5 минут (300000 )
const long interval3 = 120000;           // время остывания мотора вытяжки если влыжность не понижена работой вытяжки 2 минуты (120000 )
int timeTostop;
int hummCount = 70; // влажность для включения вытяжки

#define DHTPIN D2 // номер пина, к которому подсоединен датчик температуры

// Инициируем датчик

//DHT dht(DHTPIN, DHT22);

DHT dht(DHTPIN, DHT11);

Average<float> ave(20); // создаем массив на 20 значений
 
const char* ssid = "bathroom";
const char* password = "14041984";
 
int ledPin = D7; //пин выключателя у раковины
int ledPin2 = D8; //пин выключателя туалет комод
int ledPin3 = D5; //пин выключателя над ванной
int ledPin4 = D6; //пин выключателя вытяжки
int value = LOW;
int value2 = LOW;
int value3 = LOW;
int value4 = LOW;
boolean value5 = false;

WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);

  dht.begin();

  delay(10);

    // initialize the LCD
  lcd.begin(4,5);  // sda=0 | D3, scl=2 | D4

  // Turn on the blacklight and print a message.
  lcd.backlight();
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  pinMode(ledPin2, OUTPUT);
  digitalWrite(ledPin2, HIGH);
  pinMode(ledPin3, OUTPUT);
  digitalWrite(ledPin3, HIGH);
  pinMode(ledPin4, OUTPUT);
  digitalWrite(ledPin4, HIGH);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Creating AP");
  Serial.println(ssid);
  lcd.home();
  lcd.print("Creating AP - ");
  lcd.setCursor(0, 1);
  lcd.print(ssid);
  delay(2000);
  
 
  WiFi.softAP(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    lcd.print(".");
  }
  
  lcd.clear();
  lcd.home();
  lcd.print("Created OK");
  Serial.println("");
  Serial.println("Creating WiFi AP bathroom OK");
  delay(2000);
 
  // Start the server
  server.begin();
  lcd.setCursor(0, 1);
  lcd.print(WiFi.softAPIP());
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL : ");
  Serial.print("http://");
  Serial.print(WiFi.softAPIP());
  Serial.println("/");
  delay(2000);
  
}
 
void loop() {

  unsigned long currentMillis = millis();

   
   if (currentMillis - previousMillis >= interval) {
    // опросить датчик температуры и влажности и положить значение в массив
    Serial.println(previousMillis);
    // сохраняем время последнего опроса датчика
    previousMillis = currentMillis;
    Serial.println(currentMillis);
    float humm = dht.readHumidity();
    ave.push(humm); // получаем значение влажности
    Serial.println(ave.mean());
   }

   if (ave.mean() > hummCount && currentMillis - previousMillis2 >= interval3 && !value5) {
   previousMillis2 = currentMillis; 
   digitalWrite(ledPin4, LOW);
   value4 = HIGH;
   value5 = true;
   }
//   дописать условие ИЛИ время работы более 5 минут
// дописать присваивание значение value4 для отображение на веб статуса работы вытяжки
   if (currentMillis - previousMillis2 >= interval2 && value5) {
    digitalWrite(ledPin4, HIGH);
    previousMillis2 = currentMillis;
    value4 = LOW;
    value5 = false;
   }

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float hic = dht.computeHeatIndex(t, h, false);
  if (isnan(h) || isnan(t)) {
    lcd.clear();
    lcd.print("Sensor ERROR");
    delay (500);
    }

    
    lcd.home();
    lcd.print("TEMP:"); 
    lcd.print(round(t)); 
    lcd.print("*C "); 
    lcd.setCursor(10, 0);
    lcd.print("VT:");
    if (value5) {
    timeTostop = currentMillis - previousMillis2;
    timeTostop = timeTostop / 1000;
    timeTostop = 300 - timeTostop;
    // timeTostop = timeTostop / 60;
      lcd.print(timeTostop); }
    else {lcd.print("0FF");}
    lcd.setCursor(0, 1);
    lcd.print("HUMM:");
    lcd.print(round(ave.mean()));
    lcd.print("%  (");
    lcd.print(hummCount);
    lcd.print("%)"); 
   // lcd.setCursor(0, 1);

  
  // 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;
  }

     // Match the request для реле 3  
  
  if (request.indexOf("/LED3=ON") != -1) {
    digitalWrite(ledPin3, LOW);
    value3 = HIGH;
  } 
  if (request.indexOf("/LED3=OFF") != -1){
    digitalWrite(ledPin3, HIGH);
    value3 = LOW;
  }

       // Match the request для реле 4 (вытяжка  
  
  if (request.indexOf("/LED4=ON") != -1) {
    digitalWrite(ledPin4, LOW);
    value4 = HIGH;
    value5 = true;
    previousMillis2 = currentMillis; 
  } 
  if (request.indexOf("/LED4=OFF") != -1){
    digitalWrite(ledPin4, HIGH);
    value4 = LOW;
    value5 = false;
    previousMillis2 = currentMillis;
  }

       // Парсим заданное значение влажности для включения вытяжки 
       
  if (request.indexOf("/HUM=40") != -1) {
      hummCount = 40;
  }  
  if (request.indexOf("/HUM=50") != -1) {
      hummCount = 50; 
  } 
  if (request.indexOf("/HUM=60") != -1){
      hummCount = 60;
  }
  if (request.indexOf("/HUM=70") != -1){
      hummCount = 70;
  }

  
  
  // 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>");
  client.println("<head><meta charset=\"utf-8\"> <title>ЯСанузел</title></head>");

  if (isnan(h) || isnan(t)) {

  client.println("Не удается считать показания темпеатуры и влажности");
  client.println("<br><br>");
  }

  else {
   client.print("<center><font size=\"15\" color=\"blue\">Влажность "); client.print(h); client.println( "%</font></center>");
   client.print("<center><font size=\"15\" color=\"blue\">Средняя влажность:   "); client.println(ave.mean()); client.println(" %</font></center>");
   client.print("<center><font size=\"15\" color=\"green\">Температура "); client.print(t); client.println(" *C</font></center>");
   client.print("<center><font size=\"15\" color=\"green\">Ощущается как "); client.print(hic); client.println(" *C</font></center>");
   client.println("<br><br>");
   }
  
  client.print("<center><font size=\"15\">Свет у раковины чейчас: </font>");
 
  if(value == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");  
    client.println("<center><font size=\"15\"><a href=\"/LED=OFF\">Выключить</a></font></center><br>");  
  } else {
    client.print("<font size=\"15\" color=\"brown\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED=ON\">Включить</a></font></center><br>");
  }


  client.println("<br><br>");

  client.print("<center><font size=\"15\">Свет у туалета сейчас: </font>");
 
  if(value2 == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED2=OFF\">Выключить</a></font></center><br>");   
  } else {
    client.print("<font size=\"15\" color=\"brown\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED2=ON\">Включить</a></font></center><br>");
  }
 
  client.println("<br><br>");


  client.print("<center><font size=\"15\">Свет над ванной сейчас: </font>");
 
  if(value3 == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED3=OFF\">Выключить</a></font></center><br>");   
  } else {
    client.print("<font size=\"15\" color=\"brown\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED3=ON\">Включить</a></font></center><br>");
  }
 
  client.println("<br><br>");

    client.print("<center><font size=\"15\">Вытяжка сейчас: </font>");
 
  if(value4 == HIGH) {
    client.print("<font size=\"15\" color=\"green\">Вкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED4=OFF\">Выключить</a></font></center><br>");   
  } else {
    client.print("<font size=\"15\" color=\"brown\">Выкл / </font></center>");
    client.println("<center><font size=\"15\"><a href=\"/LED4=ON\">Включить</a></font></center><br>");
  }
 
  client.println("<br><br>");

  client.print("<center><font size=\"15\">Влажность для включения вытяжки: "); client.print(hummCount); client.println("</font></center>");
  client.print ("<center><br><font size=\"15\"><a href=\"/HUM=40\">40</a>"); client.print("  "); client.print("<a href=\"/HUM=50\">50</a>"); client.print("  "); client.print("<a href=\"/HUM=60\">60</a>"); client.print("  "); client.print("<a href=\"/HUM=70\">70</a></font></center><br><br>");
  client.print ("<center><br><font size=\"15\"><a href=\"http://"); client.print (WiFi.softAPIP());  client.print ("/\">ОБНОВИТЬ</a>");
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
 
}

 

 

Penumbra
Offline
Зарегистрирован: 06.08.2017

ну правильно, если у вас нет вайфая то вам модуль и не выдает статус подключения

079   while (WiFi.status() != WL_CONNECTED) {
080     delay(500);
081     lcd.print(".");
082   }

и тут вы тогда просто висите в вечном цикле пока не появится вайфай.

вынесите инициализацию вайфая в отдельную функцию, добавьте выход по таймауту - если ненайден вайфай 2 секунды то выходим и продолжаем работу основной программы

если нет соединения с вайфаем то в главном цикле void loop()    периодически  (раз в 5 минут или ..) вызывайте вашу функцию  инициализации вайфая

Penumbra
Offline
Зарегистрирован: 06.08.2017

или добавьте на крайняк 

unsigned long tmp;

tmp= millis();
timeout=20000;
while( (WiFi.status() != WL_CONNECTED) && (millis() - tmp) < timeout)) { // +выход по тайм ауту

 

 

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

В моем случае контроллер выступает как точка доступа

 WiFi.softAP(ssid, password);

И она реально видна как отдельная точка доступа, но когда нет рядом роутера, пароля и имя которго контроллер не знает, он висит высвечивая на дисплей точки из строки 81. В случае если закоментировать строки 79-82 и рядом нет роутера, контроллер виден как точка доступа, но подключиться к нему не получается.

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

Долго мучился, обнаружил в буржунете что необходимо было выбрать режим работы точки доступа, а не только дать комаду на создание.

Вот такая, рабочая контсрукция получилась:

 WiFi.mode(WIFI_AP); 
 while  (!WiFi.softAP(ssid, password)) { 
  lcd.print("."); 
  return;
  }

Тему можно считать закрытой.