• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Метеостанция и Blynk

Vladimir_G

New member
Привет друзья ! нужна помощь

Собрал недавно себе «метеостанцию» состоящую из:
  1. ESP-12(Wenos D1 mini)
  2. Датчика температуры и влажности (DHT22)
  3. Датчика температуры и влажности и давления (BME280)
  4. Дисплея на микросхеме (TM1637)
Все железо установлено в корпус, находящийся в помещении, датчик (BME280) вынесен наружу.

На просторах интернета для работы всех устройств был найден(чукча читатель, чукча не писатель) код и объединен в один скетч. После сборки и заливки кода устройство –почти- сразу заработало. На дисплей (TM1637) с периодичностью 5 секунд поочередно выводится температура , влажность и давление, с датчика (BME280). С этого же датчика данные каждые 5мин. отправляются на narodmon.ru (народный мониторинг).

А так же данные с датчиков BME280 и DHT22 передаются в приложение «Blynk» где строятся графики на смартфоне. ESP подключается к локальному серверу «Blynk», к нему же подключаются еще четыре ESP-12(переключатели, др. метеостанция итд ) одна локальная сеть.

СУТЬ ПРОБЛЕМЫ - после включения все работает данные передаются на дисплей, в приложение «Blynk» и народный мониторинг. Но с периодичностью 2, 5 иногда 12 часов прекращается передача данных в приложение «Blynk», а данные на дисплей и народный мониторинг продолжают успешно передаваться. Помогает только сброс по питанию.

Другие устройства(ESP-12) в сети в это время без сбоев передают данные в приложение «Blynk». На сервере «Blynk» в логах отмечается постоянное переподключение данной сборки каждые 30 секунд. Передернув питание, в логах одно подключение и так на несколько часов, потом снова описанный сбой.

Прошу совета в чем может быть проблема. Спасибо.
 

nikolz

Well-known member
Привет друзья ! нужна помощь

Собрал недавно себе «метеостанцию» состоящую из:
  1. ESP-12(Wenos D1 mini)
  2. Датчика температуры и влажности (DHT22)
  3. Датчика температуры и влажности и давления (BME280)
  4. Дисплея на микросхеме (TM1637)
Все железо установлено в корпус, находящийся в помещении, датчик (BME280) вынесен наружу.

На просторах интернета для работы всех устройств был найден(чукча читатель, чукча не писатель) код и объединен в один скетч. После сборки и заливки кода устройство –почти- сразу заработало. На дисплей (TM1637) с периодичностью 5 секунд поочередно выводится температура , влажность и давление, с датчика (BME280). С этого же датчика данные каждые 5мин. отправляются на narodmon.ru (народный мониторинг).

А так же данные с датчиков BME280 и DHT22 передаются в приложение «Blynk» где строятся графики на смартфоне. ESP подключается к локальному серверу «Blynk», к нему же подключаются еще четыре ESP-12(переключатели, др. метеостанция итд ) одна локальная сеть.

СУТЬ ПРОБЛЕМЫ - после включения все работает данные передаются на дисплей, в приложение «Blynk» и народный мониторинг. Но с периодичностью 2, 5 иногда 12 часов прекращается передача данных в приложение «Blynk», а данные на дисплей и народный мониторинг продолжают успешно передаваться. Помогает только сброс по питанию.

Другие устройства(ESP-12) в сети в это время без сбоев передают данные в приложение «Blynk». На сервере «Blynk» в логах отмечается постоянное переподключение данной сборки каждые 30 секунд. Передернув питание, в логах одно подключение и так на несколько часов, потом снова описанный сбой.

Прошу совета в чем может быть проблема. Спасибо.
Это круче чем угадать мелодию с трех нот.
Вы даже и одной не написали.
Типа, машин едет едет и потом бах встал. Что случилось? кто знает?
-------------
Если серьезно, то пока можно сказать лишь одно - ставьте контрольную печать в том что написали и ищите глюк.
 

Vladimir_G

New member
Это круче чем угадать мелодию с трех нот.
Вы даже и одной не написали.
Типа, машин едет едет и потом бах встал. Что случилось? кто знает?
-------------
Если серьезно, то пока можно сказать лишь одно - ставьте контрольную печать в том что написали и ищите глюк.
все собрано. как отследить вот сейчас три часа и все в порядке, если в коде ошибка должно сразу глючить ???
 

nikolz

Well-known member
все собрано. как отследить вот сейчас три часа и все в порядке, если в коде ошибка должно сразу глючить ???
Это лишь кажется.
Например, утечка памяти.
Утекает утекает и потом бац кончилась память и возникло исключение.
 

nikolz

Well-known member
или еще так
приняли что-то от датчика и сделали деление константы на это что-то А оно это что-то ноль и бац исключение.
продолжать?
 

Vladimir_G

New member
Это лишь кажется.
Например, утечка памяти.
Утекает утекает и потом бац кончилась память и возникло исключение.
ого я совсем новичок в этом деле, из-за ошибки в коде может быть утечка или это железные дела ??? могу код скинуть сюда...
 

nikolz

Well-known member
ого я совсем новичок в этом деле, из-за ошибки в коде может быть утечка или это железные дела ??? могу код скинуть сюда...
вы же в интернет передаете. при этом выделается буфер для передачи. Может быть связь разорвалась а буфер остался. Но вое соединение и новый буфер а старый затерялся.
Вот и утечка пошла
Но фокус в том, что, как правило, обычно проблема там, где ее мало всего ожидаешь.
 

Peter1001

New member
Утекает утекает и потом бац кончилась память и возникло исключение.
У меня в этом случае ESP ребутится. Я в одном месте объявлял массив потом юзаел его в объекте. А в деструкторе забыл сделать delete. И ESP'шка ровно с интервалом в 15 мин ребутилась.

@Vladimir_G, Без кода тут не скажешь в чём проблема.

из-за ошибки в коде может быть утечка или это железные дела ???
Вообще то утечка памяти это чисто софтовая проблема в 98% случаев. Так как скетчи пишутся на C/C++ то это языки низкого уровня, и оправление памятью ложится полностью на программиста.
Вот вы скачали скетчи, склеили их, но где гарантия что в процессе склейки вы не удалили случайно delete. Так же может у вас там динамически в цикле выделяется память, а указатель всего один, который потом удаляется, но вся память которая была выделена в предыдущих циклах, не удалится. Причин много.

В общем C++ это не тот язык, где можно безболезненно пользоваться копипастой и склейкой не проверяя что получилось.
 
Последнее редактирование:

nikolz

Well-known member
вот код - как писал ранее "чукча" читатель.... насобирал в инете.
Рекомендации по ходу чтения кода.
-------------
status = bme.begin(0x76);
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
----------------
Вы читаете статус и если не готово то выводите сообщение и зависаете в бесконечном цикле.
На мой взгляд лучше так:
while(! bme.begin(0x76)) {Serial.println("Could not find a valid BME280 sensor, check wiring!");}
т е будет проверять и сообщать о неготовности пока не настанет готовность.
==============
функция void sendSensor()
оператор проверки if (isnan(h) || isnan(t)) ... переместить из конца сразу после чтения h и t
==================
далее при формировании пакетов Вы уже не анализируете ошибку данных? А надо бы.
 

Peter1001

New member
Далее.
DHT22/DHT11 устроены хитрым образом. И те данные что вы получаете раз в 5 минут, это не текущие данные. А данные предыдущего измерения, то есть того измерения что было 5 минут назад. Для этого в либе DHT есть параметр force.

Далее рекомендую вынести
Код:
WiFiClient client;
в верх. Ибо фиг оно знает как там внутри устроено. Хоть и на стеке создаётся.
 
Последнее редактирование:

Vladimir_G

New member
Далее.
DHT22/DHT11 устроены хитрым образом. И те данные что вы получаете раз в 5 минут, это не текущие данные. А данные предыдущего измерения, то есть того измерения что было 5 минут назад. Для этого в либе DHT есть параметр force.

Далее рекомендую вынести
Код:
WiFiClient client;
в верх. Ибо фиг оно знает как там внутри устроено. Хоть и на стеке создаётся.
данные с DHT22 я получаю каждые 5секунд это и в мониторе порта видно и в гафиках Блинка. если про 5 минут это интервал отправки данных на народный монитор, с датчика BME280. А куда вынести в верх WiFiClient client; в начало функции отправки ???
 
Последнее редактирование:

nikolz

Well-known member
две рекомендации уже применил, а про формировании пакетов можно подробнее что и как анализировать на ошибки. спасибо
в функции SendToNarodmon() Есть
WiFiClient client;
это объект типа класс и его желательно создать вне функции один раз глобально.
иначе он будет создаваться при каждом вызове функции.
------------
еще могу посоветовать не читать для отправки значения а использовать уже прочитанные для экрана.
тогда будет идентично и в инете и на индикаторе да и работать будет быстрее так как не надо лишний раз читать с датчиков
 
Последнее редактирование:

Vladimir_G

New member
в функции SendToNarodmon() Есть
WiFiClient client;
это объект типа класс и его желательно создать вне функции один раз глобально.
иначе он будет создаваться при каждом вызове функции.
то есть выношу выше до void setup() где все переменные...
 
Сверху Снизу