Your Dht11 went offline
- Войдите на сайт для отправки комментариев
Втр, 28/04/2020 - 19:18
Здравствуйте, я новичок с помощью инструкций в интернете написал код и при работе через минуту после включения на телефоне выбивает Your Dht11 test went offline.Буду очень благодарен кто поможет решить эту проблему.
#include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #define BLYNK_PRINT Serial #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей char auth[] = "cvqv1m6B1BQVRple1Vx-TO4ZnuCvd1hM"; //ID blynk /* WiFi credentials */ const char* ssid2 = "InetHome 35"; //Имя точки доступа WIFI const char* password2 = "123321123321"; //пароль точки доступа WIFI char ssid[] = "InetHome 35"; //підключення до wifi char pass[] = "123321123321"; /* TIMER */ SimpleTimer timer; /* DS18B20 Temperature Sensor */ #include <OneWire.h> #include<DallasTemperature.h> #define ONE_WIRE_BUS 2 // DS18B20 подключаем на D4 на плате OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); int temp_0; int temp_1; const int girc = 13; //гірконг пін(d7) const int girc_2 = 12; //гірконг пін(d6) int gircstate = 0; // статус гірконгу int gircstate_2 = 0; // статус гірконгу int maxtemp = 26 ; //Максимальна температура; int mintemp = 20; //мінімальна температура; int buzer = 14; //Підключення бузера(D5) int val = 0; int val_3 = 0; void setup() { lcd.begin(); lcd.setCursor(5, 0); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("I start"); lcd.setCursor(3, 1); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print(""); // Выводим текст , начиная с установленной позиции курсора pinMode(buzer, OUTPUT); //Ініцилізація бузера pinMode(girc, INPUT); //Ініцалізація гірконгу pinMode(girc_2, INPUT); //Ініцалізація гірконгу Serial.begin(115200); Blynk.begin(auth, ssid, pass); //Підключення до wifi DS18B20.begin(); timer.setInterval(1000L, getSendData); Serial.println(" "); Serial.println("Testing Dual Sensor data"); Blynk.notify("Пристрій запустився"); //Пристрій запустився (push) Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Пристрій запустився"); lcd.backlight(); // Включаем подсветку LCD дисплея lcd.setCursor(5, 0); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("I work!"); // Выводим текст "LCD", начиная с установленной позиции курсора delay(2000); lcd.clear(); // Чистим дисплей (надпись безвозвратно исчезнет с дисплея) } void loop() { lcdinfo(); gircstate = digitalRead(girc); //Зчитування статусу гірконга gircstate_2 = digitalRead(girc_2); //Зчитування статусу гірконга //----------------------Двері1---------------------- if (digitalRead(girc) == 1) //Якщо двері відкриті ... { val++;// прибавляем к переменной 1 при каждой смене цикла. delay(5000);//Час на скільки відкриті двері } else { val = 0; lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("Door close"); // Выводим текст , начиная с установленной позиции курсора } if (val >= 5) //Якщо двері відкриті більше ніж на вказаний час { digitalWrite(10, !digitalRead(10)); //инвертируем состояние пина val = 0; Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Двері 2 відкриті"); Blynk.notify("Двері 1 відкриті"); digitalWrite(buzer, HIGH); delay(20000); } //----------------------Двері1---------------------- //----------------------Двері2---------------------- if (digitalRead(girc_2) == 1) //Якщо двері відкриті ... { val_3++;// прибавляем к переменной 1 при каждой смене цикла. delay(5000);//Час на скільки відкриті двері } else { val_3 = 0; lcd.setCursor(11, 1); // Устанавливаем курсор в позицию (3 столбец, 0 строка) lcd.print("close"); // Выводим текст , начиная с установленной позиции курсора } if (val_3 >= 5) //Якщо двері відкриті більше ніж на вказаний час { digitalWrite(10, !digitalRead(10)); //инвертируем состояние пина val_3 = 0; Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Двері 2 відкриті"); Blynk.notify("Двері 2 відкриті"); digitalWrite(buzer, HIGH); delay(20000); } //----------------------Двері2---------------------- if (temp_1 == -127) { //Помилка датчика температури холодильник 1 Blynk.notify("Помилка датчика температури Холодильник 1"); Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Помилка датчика температури Холодильник 1"); buz(); delay(20000); } if (temp_0 == -127) { //Помилка датчика температури холодильник 2 Blynk.notify("Помилка датчика температури Холодильник 2"); Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Помилка датчика температури Холодильник 2"); buz(); delay(20000); } if (temp_1 > maxtemp) { //Якщо температура більша за вказану Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура більша максимальної холодильник 1"); Blynk.notify("Температура більша максимальної (холодильник 1)"); buz(); delay(15000); } if (temp_0 > maxtemp) { //Якщо температура більша за вказану Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура більша максимальної холодильник 2"); Blynk.notify("Температура більша максимальної (холодильник 2)"); buz(); delay(15000); } if (temp_0 < mintemp) //Якщо температура менша за вказану { Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура менша мінімальної (холодильник 2)"); Blynk.notify("Температура менша мінімальної (холодильник 2)"); buz(); delay(15000); } if (temp_1 < mintemp) //Якщо температура менша за вказану { Blynk.email("www.romanvd.com@gmail.com", "Холодильник", "Температура менша мінімальної (холодильник 1)"); Blynk.notify("Температура менша мінімальної (холодильник 1)"); buz(); delay(15000); } timer.run(); // Initiates SimpleTimer Blynk.run(); } /*************************************************** Send Sensor data to Blynk **************************************************/ void yield() //Start blynk { Blynk.run(); timer.run(); } void lcdinfo() //Start blynk { getSendData(); int val_2 = 0; lcd.setCursor(0, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print("Temp:"); // Выводим показания температуры lcd.setCursor(6, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(temp_1); // Выводим показания температуры lcd.setCursor(8, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print("C"); // Выводим показания температуры lcd.setCursor(12, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(temp_0); // Выводим показания температуры lcd.setCursor(14, 0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print("C"); // Выводим показания температуры if (temp_1 == -127 or temp_0 == -127) { //Якщо помилка датчика температури то почистити екран lcd.clear(); } //----------------------Двері1---------------------- if (digitalRead(girc) == 1) //Якщо двері відкриті ... { lcd.setCursor(0, 1); lcd.print("Door open!"); //Вивести двері відкриті } else { //По іншому lcd.setCursor(0, 1); lcd.print("Door close"); //Вивести двері закриті } //----------------------Двері1---------------------- //----------------------Двері2---------------------- if (digitalRead(girc_2) == 1) //Якщо двері відкриті ... { lcd.setCursor(11, 1); lcd.print("open!"); //Вивести двері відкриті } else { //По іншому lcd.setCursor(11, 1); lcd.print("close"); //Вивести двері закриті } //----------------------Двері2---------------------- if (temp_1 < -10 and temp_1 < 10 or temp_0 < -10 and temp_0 < 10) { val_2++; } if (val_2 == 1) { lcd.clear(); } else { val_2 = 0; } if(temp_1 < maxtemp and temp_1 != -127 and temp_1 > mintemp and temp_0 < maxtemp and temp_0 != -127 and temp_0 > mintemp) //Якщо все нормально виключити бузер { buz(); digitalWrite(buzer, LOW); } } void buz() //Функція бузера { if (temp_1 > maxtemp or temp_1 == -127 or temp_1 < mintemp or temp_0 > maxtemp or temp_0 == -127 or temp_0 < mintemp) { //Якщо темпреатура більша або менша або помилка датчика включити бузер digitalWrite(buzer, LOW); delay(100); digitalWrite(buzer, HIGH); delay(5000); } else if(temp_1 < maxtemp and temp_1 != -127 and temp_1 > mintemp and temp_0 < maxtemp and temp_0 != -127 and temp_0 > mintemp) //Якщо все нормально виключити бузер { digitalWrite(buzer, LOW); } if (val >= 5 or val_3 >= 5) { digitalWrite(buzer, HIGH); delay(1000); digitalWrite(buzer, LOW); delay(1000); } } void getSendData() { yield(); DS18B20.requestTemperatures(); temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях temp_1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях Serial.print("Temp_0: "); Serial.print(temp_0); Serial.print(" oC . Temp_1: "); Serial.print(temp_1); Serial.println(" oC"); Blynk.virtualWrite(12, temp_0); //выврд данных на виртуальный пин V10 Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11 }
В прошлый раз у Вас уходил в офлайн ds18b20, теперь dht11 ровно по той же причине, которую Вам тогда объяснили. Вы с каждым датчиком будете приходить по отдельности?
Я поставил таймер
У меня отправляется данные каждые 3 сек. и тайм аут не может быть
Не знаю, что Вы поставили, когда у Вас делеи один на другом сидят. Нельзя так должго не обращаться к серверу, он считает, что Вы давно ушли. Перечитайте вот эту тему ещё раз.
У меня отправляется данные каждые 3 сек. и тайм аут не может быть
Да, неужели?
А четыре delay(15000) и ещё четыре delay(20000) в Вашем коде мне примерещились? Я уж не говорю про такую мелочёвку, как
delay(5000).
Знаете, я конечно принимаю иногда, но меру знаю, потому черти пока не мерещатся.И с какого тут боку три секунды?
Да, но я хочу чтобы мне сообщение раз в 15 сек
Ну вот Вы сказали, что отправляете сообщения каждые три секунды, хотя это и неправда. Чтобы убедиться в этом, поставьте вывод времени (millis()) в монитор порта в том месте, где отправляете, и посмотрите через какие интервалы оно у Вас реально отправка идёт. Обязательно это сделайте и не убирайте пока полностью всё не закончите. Тогда. если при каких-то изменениях у Вас это время сломается, Вы тут же заметите.
А то, что Вы там чего-то "хотите", так и делайте как хотите, только сервер должен получать Вашу активность с разумными интервалами, иначе он Вас выбросит, что он и делает. А в остальном, делайте, как Вам надо.
Для начала, ещё раз, добейтесь того, чтобы Ваша программа в любом случае контактировала с сервером через какие-то разумные интервалы (не мифические три секунды, а реально, чтобы Вы это видели в своей печати). Потом уже делайте что хотите, не ломая этого.
Спасибо, извините просто я школьник мне 13 лет и я пытаюсь изучать arduino
Молодец, что пытаетесь. Вот, поставьте печать о которой я говорил, убедитесь, что не через три секунды Вы отправляете, потом добейтесь, чтобы таки отправлялось правильно.
Молодец, что пытаетесь. Вот, поставьте печать о которой я говорил, убедитесь, что не через три секунды Вы отправляете, потом добейтесь, чтобы таки отправлялось правильно.
ок,Спасибо