Нужна помощь в обновлениии статуса включеного и отключеного реле

Всем привет залил простой скетч для управления двумя реле под выключатель. Плата NodeMCU. А аккаунте arduino cloud добавил плату, привязал Things далее привязал к Google Home, затем залил сгенерированный скетч на плату. Все заработало в Google Home появились два переключателя, реле переключают, голосовой google ассистент также переключает. Затем открыл скетч в IDE , добавил код для переключения реле в приложении Blynk, первой версии, сервер Blynk локальный, залил на плату, все работает параллельно. Включил реле в Google Home - выключил в приложении Blynk, и на оборот, все работает.
Суть вопроса: как сделать обновление статуса реле автоматически в приложении Blynk и Google Home. Сейчас при включении реле в Blynk и заходе в Google Home, статус не меняется нажал первый раз тогда меняется, второй раз нажал реле переключается и на оборот. спасибо…

отличный пример как можно сначала САМОМУ создать себе проблему, а потом спрашивать, как ее преодолеть…
Зачем вы подключили реле сразу к двум управляющим программам?

3 лайка

Одна управляет через интернет, а другая без интернета в локалке….

Что-то со зрением, видимо… не вижу ни схемы подключения, ни «простейшего скетча»… ((

Вероятно, скетч должен уметь не просто вкл. и выкл. реле, но и читать их состояние, и, отсылать статус упр. программе, которая, в свою очередь , должна уметь прочитать текущее состояние реле.
И, при каждом изменении состояния реле, ардуино-скетч, должен отсылать новый статус всем упр.программам

Вот вот согласен, а что добавить в скетч? Опыта не много у меня, поэтому и спросил тут…..


#include “arduino_secrets.h”
/*
Sketch generated by the Arduino IoT Cloud Thing “2-relay”

https://create.arduino.cc/cloud/things/1111111111111111111

Arduino IoT Cloud Variables description

The following variables are automatically generated and updated when changes are made to the Thing

CloudSwitch relay1;
CloudSwitch relay2;

Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/

#include “thingProperties.h”
#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define Switch1 D1
#define Switch2 D2
bool rele1;
bool rele2;
char auth = “12345678901234567890”;
void setup() {
WiFi.persistent(false); //disable saving wifi config into SDK flash area
// Initialize serial and wait for port to open:
Serial.begin(115200);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
pinMode(Switch1,OUTPUT);
pinMode(Switch2,OUTPUT);
// Defined in thingProperties.h
initProperties();

// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);

/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
Blynk.begin(auth, SECRET_SSID, SECRET_OPTIONAL_PASS, IPAddress(192,168,1,18), 8080);
}

BLYNK_WRITE(V1)
{
rele1 = param.asInt();
digitalWrite(Switch1, rele1);
}
BLYNK_WRITE(V2)
{
rele2 = param.asInt();
digitalWrite(Switch2, rele2);
}

void loop() {
ArduinoCloud.update();
// Your code here
Blynk.run();

}

/*
Since Relay1 is READ_WRITE variable, onRelay1Change() is
executed every time a new value is received from IoT Cloud.
/
void onRelay1Change() {
// Add your code here to act upon Relay1 change
if (relay1)
{
digitalWrite(Switch1, HIGH);
//digitalWrite(relay2Pin, HIGH);
Serial.println(“ON”);
}
else
{
digitalWrite(Switch1, LOW);
//digitalWrite(relay2Pin, LOW);
Serial.println(“OFF”);
}
}
/

Since Relay2 is READ_WRITE variable, onRelay2Change() is
executed every time a new value is received from IoT Cloud.
*/
void onRelay2Change() {
// Add your code here to act upon Relay2 change
if (relay2)
{
digitalWrite(Switch2, HIGH);
//digitalWrite(relay2Pin, HIGH);
Serial.println(“ON”);
}
else
{
digitalWrite(Switch2, LOW);
//digitalWrite(relay2Pin, LOW);
Serial.println(“OFF”);
}
}


Что, вообще читать разучился?

Ты бы лучше код научился вставлять, юморист…

Так подскажи, что добавить в сам код, по моему вопросу, а то одни замечания. Болтать я и сам умею……

И это все на одной кухне?

Это не вопрос, это - заказ на работу. Размещать такое следует в разделе “Ищу исполнителя”.

Купить и дурак может. У меня всё работает и меня устраивает, хотелось немного улучшить, если подскажут. Поэтому и написал сюда. На нет и суда нет.

Я тебе еще раз говорю - вставь код по правилам форума. Пока это не сделаешь никто ничего “подсказывать” тебе не будет. Это правило такое.

Я отредактировал давно вставил апострофа три в начале и в конце кода

Сравни что ты там наредактировал вот с этим:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Разницу замечаешь?

Не можешь апострофы поставить - используй тег ‘</>’ вверху окна ввода…

#include “arduino_secrets.h”
#include “thingProperties.h”
#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define Switch1 D1
#define Switch2 D2
bool rele1;
bool rele2;
char auth = “12345678901234567890”;

void setup() {
WiFi.persistent(false); //disable saving wifi config into SDK flash area
// Initialize serial and wait for port to open:
Serial.begin(115200);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
pinMode(Switch1,OUTPUT);
pinMode(Switch2,OUTPUT);
// Defined in thingProperties.h
initProperties();

setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
Blynk.begin(auth, SECRET_SSID, SECRET_OPTIONAL_PASS, IPAddress(192,168,1,18), 8080);
}

BLYNK_WRITE(V1)
{
rele1 = param.asInt();
digitalWrite(Switch1, rele1);
}
BLYNK_WRITE(V2)
{
rele2 = param.asInt();
digitalWrite(Switch2, rele2);
}

void loop() {
ArduinoCloud.update();
// Your code here
Blynk.run();

}


void onRelay1Change() {
// Add your code here to act upon Relay1 change
if (relay1)
{
digitalWrite(Switch1, HIGH);
//digitalWrite(relay1Pin, HIGH);
Serial.println(“ON”);
}
else
{
digitalWrite(Switch1, LOW);
//digitalWrite(relay1Pin, LOW);
Serial.println(“OFF”);
}
}

void onRelay2Change() {
// Add your code here to act upon Relay2 change
if (relay2)
{
digitalWrite(Switch2, HIGH);
//digitalWrite(relay2Pin, HIGH);
Serial.println(“ON”);
}
else
{
digitalWrite(Switch2, LOW);
//digitalWrite(relay2Pin, LOW);
Serial.println(“OFF”);
}
}

изменил, вроде так …

Вроде главный совет уже прозвучал - управляющая реле программа должна быть одна, локальная. Всё остальные должны общаться не напрямую с оборудованием, а опосредованно, через локальную программу.

1 лайк

Да это понятно, весь дом у меня управляется локально, выключатели, димеры, температура с датчиков отображается, все через Blynk. Недавно просматривал приложение Google home, решил попробывать,добавил код в скетч с реле. Работает, удобно, руки заняты телефон спит, сказал Ok Google - включи свет, реле сработало…

Попробуйте так:

void loop() {
ArduinoCloud.update();
rele1 = relay1;
rele2 = relay2;
// Your code here
Blynk.run();

}

Если не поможет - то надо будет серьёзно заниматься, а это уже будет