• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Cadil

New member
Есть простая схема - NodeMCU ESP12E + DHT22.
Инфа с датчика считывается с периодом 1 сек и отображается на мониторе Arduino IDE. Каждое 5-е, 15-е, 30-е или, допустим, 300-е значение (задается переменной bl, скетч под спойлером) отправляется на сервер Blynk.
Код:
#include "DHT.h"
#define DHTPIN 2     // D4 (gpio2)
#define DHTTYPE DHT22   // DHT 22
DHT dht(DHTPIN, DHTTYPE);
float t, h;

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = "b0bf3e0d02f648c6xxxxxxxxxx";
char ssid[] = "xxxxxxxx";
char pass[] = "xxxxxx";
int bl;

void sendToBlynk(){
  Blynk.run();
  Blynk.virtualWrite(V1, t);
  Blynk.virtualWrite(V2, h);
  Serial.println("T: "+String(t));
  Serial.println("H: "+String(h));
  }
 
void setup() {
  Serial.begin(115200);
  dht.begin();
   Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
}

void loop() {
  delay(1000);
 
h = dht.readHumidity();
t = dht.readTemperature();

if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  } else if (bl >= 30){
sendToBlynk();
bl = 0;
}
  Serial.println("t: "+String(t));
  Serial.println("h: "+String(h));
  bl++;
}
Проблема в том, что на Blynk поступают значения температуры и влажности, переданные с циклом до 15-и (15 сек), если цикл больше 15-ти, например, 30 - данные на Blynk не поступают.
Что думаете?
 

Alegz

New member
если цикл больше 15-ти, например, 30 - данные на Blynk не поступают.
Что думаете?
Начиная с нескольких секунд паузы с отправкой данных, blynk отваливается по тайм-ауту вплоть до того, что приходит (если настроено) push "связь с платой потеряна" (ну или что-то в этом роде, дословно не помню, смысл именно такой). Поэтому именно так, как сказано выше - в loop вставить Blynk.Run() и почитать документацию, как это работает. Ибо есть тонкость с delay, что необходимо выкинуть и обрабатывать по таймеру. На сайте Blynk описано.
 

svs2007m

Active member
delay(1000) в loop() не самое удачное решение ! Попробуйте через таймеры :

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

Cadil

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

CodeNameHawk

Moderator
Команда форума
Чтобы не затереть память есть WiFi.persistent, какие требования у Blynk (в плане подключения и поддержания связи) ищите у них.
 

Moseich

Member
а если так:

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

timer.setInterval(1000L, myTimerEvent);
 

CodeNameHawk

Moderator
Команда форума
Если устроит раз в минуту или реже, то поставьте часы на DS3231.
Часы будят раз в минуту есп, она отправляет данные, переставляет будильник на следующею минуту и уходит в сон.
 

Cadil

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

nikolz

Well-known member
Уточняю свою проблему. NodeMCU ESP12E, DHT22 являются частью схемы термостата. ESP12E принимает информацию о температуре с датчика и если температура находится за пределами заданного окна, то ESP8266 вырабатывает сигнал включения/выключения обогревателю, который передается на обогреватель по радиоканалу. В промежутках идет отправка данных на Blynk. Поэтому мне важно, чтобы система постоянно следила за температурой - не спала.
Сейчас я планирую перейти на питание термостата от батареек вместо адаптера 220В. Для этого надо уменьшить энергопотребление. А уменьшить его можно, если включать Wi-Fi и все, что с ним связано (у меня - Blynk) пореже.
Вопрос как в этой ситуации подключаться и поддерживать связь с Blynk остается актуальным. Я посмотрел некоторые примеры к библиотеке Blynk, но ответа на нашел. Допускаю - не то смотрел.
сначала вам надо определиться с максимальной скоростью изменения температуры и инертностью нагревателя.
исходя из этого можно определить максимальную частоту измерения
эта частота определит период на который надо включать deep-sleep у ESP.
Далее можно рассмотреть возможность использования допустимого порога изменения температуры который можно устанавливать в датчиках типа ds1820 . В этом случае можно пробуждать ESP лишь при выходе температуры из допуска.
ну и т д
 

Cadil

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