• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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, но не могу найти ихнего форума. Пусть даже англоязычного, хотя в английском не силен ...
 
Сверху Снизу