Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Blynk - облачный сервис и мобильное приложение", создана пользователем Vladimir_G, 25 июл 2018.

  1. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    Привет друзья ! нужна помощь

    Собрал недавно себе «метеостанцию» состоящую из:
    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 секунд. Передернув питание, в логах одно подключение и так на несколько часов, потом снова описанный сбой.

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

    nikolz Гуру

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

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    все собрано. как отследить вот сейчас три часа и все в порядке, если в коде ошибка должно сразу глючить ???
     
  4. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    Это лишь кажется.
    Например, утечка памяти.
    Утекает утекает и потом бац кончилась память и возникло исключение.
     
  5. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    или еще так
    приняли что-то от датчика и сделали деление константы на это что-то А оно это что-то ноль и бац исключение.
    продолжать?
     
  6. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    ого я совсем новичок в этом деле, из-за ошибки в коде может быть утечка или это железные дела ??? могу код скинуть сюда...
     
  7. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    вы же в интернет передаете. при этом выделается буфер для передачи. Может быть связь разорвалась а буфер остался. Но вое соединение и новый буфер а старый затерялся.
    Вот и утечка пошла
    Но фокус в том, что, как правило, обычно проблема там, где ее мало всего ожидаешь.
     
  8. Peter1001

    Peter1001 Новичок

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

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

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

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

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    вот код - как писал ранее "чукча" читатель.... насобирал в инете.
     

    Вложения:

    Последнее редактирование: 26 июл 2018
  10. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.201
    Симпатии:
    228
    @Vladimir_G оформите, пожалуйста, код, как положено на форуме или приложите файлом.
     
  11. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    ок
     
  12. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    Рекомендации по ходу чтения кода.
    -------------
    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
    ==================
    далее при формировании пакетов Вы уже не анализируете ошибку данных? А надо бы.
     
  13. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    две рекомендации уже применил, а про формировании пакетов можно подробнее что и как анализировать на ошибки. спасибо
     
  14. Peter1001

    Peter1001 Новичок

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

    Далее рекомендую вынести
    Код (C):
    1.  
    2. WiFiClient client;
    3.  
    в верх. Ибо фиг оно знает как там внутри устроено. Хоть и на стеке создаётся.
     
    Последнее редактирование: 26 июл 2018
  15. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    данные с DHT22 я получаю каждые 5секунд это и в мониторе порта видно и в гафиках Блинка. если про 5 минут это интервал отправки данных на народный монитор, с датчика BME280. А куда вынести в верх WiFiClient client; в начало функции отправки ???
     
    Последнее редактирование: 26 июл 2018
  16. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    про оформление кода имелось ввиду использование вкладки "код" такой значок с Ф чтобы пост был компактный.
     
  17. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    в функции SendToNarodmon() Есть
    WiFiClient client;
    это объект типа класс и его желательно создать вне функции один раз глобально.
    иначе он будет создаваться при каждом вызове функции.
    ------------
    еще могу посоветовать не читать для отправки значения а использовать уже прочитанные для экрана.
    тогда будет идентично и в инете и на индикаторе да и работать будет быстрее так как не надо лишний раз читать с датчиков
     
    Последнее редактирование: 26 июл 2018
  18. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    то есть выношу выше до void setup() где все переменные...
     
  19. nikolz

    nikolz Гуру

    Сообщения:
    4.952
    Симпатии:
    454
    да.
    Можно еще посмотреть на предмет лишних повторных вычислений и формирования строк в буфере
     
  20. Vladimir_G

    Vladimir_G Новичок

    Сообщения:
    24
    Симпатии:
    0
    спасибо, перизалью скетч и по наблюдаю...
     

Поделиться этой страницей