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

Перестал работать BLYNK + ESP32 + DS

Moseich

Member
Освоил новый BLYNK. Тариф бесплатный с ограниченными функциями. Управление котлом работает надежно. Но случилась ЗАСАДА!
Добавил в скетч получение сигнала об открытии двери. Сигнал получаю, а вот виджет термометра регулятора ( temp) перестал работать, его показания " ритмично изменяются от мин до мах".
Остальные термометры работают исправно.
Убираю из скетча новую ф-ю void ledWidget() - исправляется. Менял сенсор, переставлял ф-ю после setup - не помогает.
Просьба к опытным товарищам посмотреть мой скетч, может найдете в чем причина. Заранее благодарю!

/ PROTO"
#define BLYNK_TEMPLATE_ID "TM...
#define BLYNK_DEVICE_NAME "Pr..
#define BLYNK_AUTH_TOKEN "Iz4RBwehw8"


#include <WiFi.h> //esp32
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

//include <BlynkSimpleEsp8266.h>

/* ----------------ПИНЫ------------
* 15- датчики температуры DS18B20
* 21 - "сухой контакт"
* 22,23- реле
* виртуальные:
* V1 - led1
* V2 - led2
* V10 - led10
* V3- seconds время работы
* V4 - slider
* V0 - temp
*. V5 - temp1
* V6- temp2 */

// Подключение DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 15 //WEMOS пины D3 и D4 притянуты к Vcc
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


#define RELE_1 22
#define RELE_2 23
int32_t ONkotel;

const int btnPin = 21; //контроль концевика двери

WidgetLED led1(V0); // temp
WidgetLED led3(V3); // время непрер работы
WidgetLED led(V10);

char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = «I.....»;
char pass[] = "....;

BlynkTimer timer;
void myTimerEvent()
{
Blynk.virtualWrite(V3, millis() / 1000);
}

BLYNK_WRITE(V4) //читаем слайдер - задаем регулятору температуру
{
ONkotel = param.asInt();
}

/*****************************************************
получаем данные о температуре и регулируем ее
*******************************************************/

void sendTemps(){
sensors.requestTemperatures();

int16_t temp = sensors.getTempCByIndex(0); -
int16_t temp1 = sensors.getTempCByIndex(1);
int16_t temp2 = sensors.getTempCByIndex(2);

Blynk.virtualWrite(V0, temp ); - ЭТОТ ГАД НЕ РАБОТАЕТ! КАК НАДО
Blynk.virtualWrite(V5, temp1 );
Blynk.virtualWrite(V6, temp2 );

if (temp1 <= ONkotel)
{
led1.on();
digitalWrite(RELE_1, LOW);
}
else if (temp1 >= ONkotel-1)
{
led1.off();
digitalWrite(RELE_1, HIGH);
}
}

void ledWidget()
{
if (digitalRead (btnPin ) == HIGH )
{
Blynk.virtualWrite(V10, HIGH);
}
else {
Blynk.virtualWrite(V10, LOW);
}
delay(500);
}

BLYNK_CONNECTED() // (синхронизация)
{
Blynk.syncVirtual(V2,V4,V10);
}

BLYNK_WRITE(V2) //Виртуальный контакт Реле_2
{
int value2 = param.asInt();
pinMode (RELE_2,OUTPUT);

if(param.asInt() == 1)
{
digitalWrite(RELE_2,LOW);
}
else
{
digitalWrite(RELE_2,HIGH);
}
}

void setup() /*************/
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
sensors.begin();//DS

pinMode (5,OUTPUT);
pinMode (21,INPUT);

pinMode (RELE_1,OUTPUT);
digitalWrite (RELE_1, HIGH);
pinMode (RELE_2,OUTPUT);
digitalWrite (RELE_2, HIGH);

timer.setInterval(3000L, myTimerEvent);
timer.setInterval( 1000L, ledWidget);
}

void loop()
{
Blynk.run();
sendTemps();
timer.run();

}
 

aZholtikov

Active member
Не работал с BLYNK и могу ошибаться, но...

Судя по коду ledWidget() это обработчик события таймера BlynkTimer timer... А в обработчиках крайне не рекомендуется делать всякие delay(500)...
Попробуйте в обработчике только ставить семафор, а обработку делать в loop.

И...
Вместо всего этого:

if (digitalRead (btnPin ) == HIGH )
{
Blynk.virtualWrite(V10, HIGH);
}
else {
Blynk.virtualWrite(V10, LOW);
}
Можно написать всего лишь: Blynk.virtualWrite(V10, digitalRead(btnPin) ? HIGH : LOW) или еще проще - Blynk.virtualWrite(V10, digitalRead(btnPin))
 
Сверху Снизу