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

Нужна помощь Проблемы с периодом отправки данных на Blynk

Тема в разделе "Раздел для начинающих", создана пользователем Cadil, 6 апр 2019.

Метки:
  1. Cadil

    Cadil Новичок

    Сообщения:
    156
    Симпатии:
    2
    Есть простая схема - NodeMCU ESP12E + DHT22.
    Инфа с датчика считывается с периодом 1 сек и отображается на мониторе Arduino IDE. Каждое 5-е, 15-е, 30-е или, допустим, 300-е значение (задается переменной bl, скетч под спойлером) отправляется на сервер Blynk.
    скетч (раскрыть)
    Код (C):
    1. #include "DHT.h"
    2. #define DHTPIN 2     // D4 (gpio2)
    3. #define DHTTYPE DHT22   // DHT 22
    4. DHT dht(DHTPIN, DHTTYPE);
    5. float t, h;
    6.  
    7. #include <ESP8266WiFi.h>
    8. #include <BlynkSimpleEsp8266.h>
    9. char auth[] = "b0bf3e0d02f648c6xxxxxxxxxx";
    10. char ssid[] = "xxxxxxxx";
    11. char pass[] = "xxxxxx";
    12. int bl;
    13.  
    14. void sendToBlynk(){
    15.   Blynk.run();
    16.   Blynk.virtualWrite(V1, t);
    17.   Blynk.virtualWrite(V2, h);
    18.   Serial.println("T: "+String(t));
    19.   Serial.println("H: "+String(h));
    20.   }
    21.  
    22. void setup() {
    23.   Serial.begin(115200);
    24.   dht.begin();
    25.    Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
    26. }
    27.  
    28. void loop() {
    29.   delay(1000);
    30.  
    31. h = dht.readHumidity();
    32. t = dht.readTemperature();
    33.  
    34. if (isnan(h) || isnan(t)) {
    35.     Serial.println("Failed to read from DHT sensor!");
    36.     return;
    37.   } else if (bl >= 30){
    38. sendToBlynk();
    39. bl = 0;
    40. }
    41.   Serial.println("t: "+String(t));
    42.   Serial.println("h: "+String(h));
    43.   bl++;
    44. }

    Проблема в том, что на Blynk поступают значения температуры и влажности, переданные с циклом до 15-и (15 сек), если цикл больше 15-ти, например, 30 - данные на Blynk не поступают.
    Что думаете?
     
  2. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.564
    Симпатии:
    178
    Blynk.run() в каждый цикл loop
     
  3. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Начиная с нескольких секунд паузы с отправкой данных, blynk отваливается по тайм-ауту вплоть до того, что приходит (если настроено) push "связь с платой потеряна" (ну или что-то в этом роде, дословно не помню, смысл именно такой). Поэтому именно так, как сказано выше - в loop вставить Blynk.Run() и почитать документацию, как это работает. Ибо есть тонкость с delay, что необходимо выкинуть и обрабатывать по таймеру. На сайте Blynk описано.
     
  4. svs2007m

    svs2007m Читатель

    Сообщения:
    100
    Симпатии:
    9
    delay(1000) в loop() не самое удачное решение ! Попробуйте через таймеры :

    BlynkTimer timer;
    .....
    setup()
    timer.setInterval(1000L, sendToBlynk); // каждую 1 сек ...
    ....
    loop()
    Blynk.run();
    timer.run();
    .....
    И опрос датчика перетащите из loop() в sendToBlynk()
     
    Moseich нравится это.
  5. Cadil

    Cadil Новичок

    Сообщения:
    156
    Симпатии:
    2
    Работает!
    Но теперь помогите решить другую проблему:
    Blynk.run() в цикле loop поддерживает постоянную связь с сервером и соответственно включенный Wi_Fi даже, если в этом нет необходимости. Я же затеял все это с целью уменьшения энергозатрат (включать все, что связано с Wi_Fi только тогда, когда нужно).
    Как быть? Подключаться к Wi-Fi , Blynk в loop и за очень короткое время затереть файловую систему (ключ Blynk у меня хранится в ФС)?
    Спасибо!
     
  6. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.564
    Симпатии:
    178
    Чтобы не затереть память есть WiFi.persistent, какие требования у Blynk (в плане подключения и поддержания связи) ищите у них.
     
    Cadil нравится это.
  7. Moseich

    Moseich Новичок

    Сообщения:
    40
    Симпатии:
    3
    а если так:

    BlynkTimer timer;
    void myTimerEvent()
    {
    Blynk.virtualWrite(V1 millis() / 2000);// частота отправлений в секунду!!
    Blynk.virtualWrite(V2 millis() / 2000);
    }
    setup()

    timer.setInterval(1000L, myTimerEvent);
     
  8. svs2007m

    svs2007m Читатель

    Сообщения:
    100
    Симпатии:
    9
    ESP в сон > Blynk.disconnect();
    ESP проснулся >Blynk.connect();

    Через таймеры
     
  9. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.564
    Симпатии:
    178
    Если устроит раз в минуту или реже, то поставьте часы на DS3231.
    Часы будят раз в минуту есп, она отправляет данные, переставляет будильник на следующею минуту и уходит в сон.
     
    Cadil нравится это.
  10. Cadil

    Cadil Новичок

    Сообщения:
    156
    Симпатии:
    2
    Уточняю свою проблему. NodeMCU ESP12E, DHT22 являются частью схемы термостата. ESP12E принимает информацию о температуре с датчика и если температура находится за пределами заданного окна, то ESP8266 вырабатывает сигнал включения/выключения обогревателю, который передается на обогреватель по радиоканалу. В промежутках идет отправка данных на Blynk. Поэтому мне важно, чтобы система постоянно следила за температурой - не спала.
    Сейчас я планирую перейти на питание термостата от батареек вместо адаптера 220В. Для этого надо уменьшить энергопотребление. А уменьшить его можно, если включать Wi-Fi и все, что с ним связано (у меня - Blynk) пореже.
    Вопрос как в этой ситуации подключаться и поддерживать связь с Blynk остается актуальным. Я посмотрел некоторые примеры к библиотеке Blynk, но ответа на нашел. Допускаю - не то смотрел.
     
  11. nikolz

    nikolz Гуру

    Сообщения:
    4.509
    Симпатии:
    444
    сначала вам надо определиться с максимальной скоростью изменения температуры и инертностью нагревателя.
    исходя из этого можно определить максимальную частоту измерения
    эта частота определит период на который надо включать deep-sleep у ESP.
    Далее можно рассмотреть возможность использования допустимого порога изменения температуры который можно устанавливать в датчиках типа ds1820 . В этом случае можно пробуждать ESP лишь при выходе температуры из допуска.
    ну и т д
     
  12. Cadil

    Cadil Новичок

    Сообщения:
    156
    Симпатии:
    2
    Все это у меня уже давно определено. Термостат успешно отработал отопительный сезон, управляя по радиоканалу 433 МГц газовым котлом, вместо неисправного серийного образца.
    Я бы с радостью поставил эту проблему на сайте Blynk'a, но не могу найти ихнего форума. Пусть даже англоязычного, хотя в английском не силен ...
     
  13. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Blynk Community
     

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