Обмен данными между двумя ESP8266, хоть как то

По железу два NODE MCU, один из которых подключён к Blynk. Можно и второй подключить (так и есть уже, но это для возможности организации обмена данными). Роутер,к которому собственно подключены оба обвиняемых.
Задача обмениваться иногда данными хоть как то. Информации в сети много, и действительно я много нашёл что информации много, но самой информации много не нашёл. Тут пересмотрел много, но тоже не много.

  • Пробовал на одном запустить сервер и он запускается, но не хочет подключаться к Blynk.
  • Пробовал запустить клон и он запускается, но клон обновляет данные только в облаке (вижу на WEP и АРР). До второго устройства не доходит. Нужно синхронизировать, а для этого нужно знать когда именно, а для этого нужно получить данные от другого устройства а они не доходят.
  • Пробовал подменивать токен (если это можно делать), но данные обновляются только на сервере и до второго устройства не доходят, от слова “совсем”.
char auth[] = BLYNK_AUTH_TOKEN;
char auth2[] = BLYNK_AUTH_TOKEN2;
void setup(){
 Blynk.begin(auth, ssid, pass);
}
void loop(){
// тут естественно Blynk.run();
//*********************
Blynk.begin(auth2, ssid, pass);
Blynk.virtualWrite(V16, data);   // send to device #2
Blynk.begin(auth, ssid, pass);
//*********************
}
  • Пытался разобраться как устроен Blynk local server, но тут я пас. К тому же ещё какой то девайс нужен. Не вариант.
  • Попробовал Blynk Bridge, но что то пошло не так и вообще ничего никуда не летит, даже на сервер. Может что с кодом не дописываю?
    Вообще по мосту, на сколько я понял, Slave устройство по коду не отличается. В виртуальный пин прилетают изменения, а откуда именно какая вообще разница. С сервера. Тем не мение код первого, принимающего (ну или второго короче Slave).
#define BLYNK_AUTH_TOKEN "Slave_TOKEN"
char auth[] = BLYNK_AUTH_TOKEN;
void setup(){
Blynk.begin(auth, ssid, pass);
}
void loop(){
Blynk.run();
BLYNK_WRITE(V16){ // Принимаем, обрабатываем, радуемся жизни, благодарим создателей Blynk
 bitWrite(valv, 0, param.asInt());
  }
}

Код отправляемого устройства:

char auth[] = BLYNK_AUTH_TOKEN;
char auth2[] = BLYNK_AUTH_TOKEN2;
WidgetBridge bridge1(V25); // первые 25 заняты. 25-й на сервере не трогаем больше
BLYNK_CONNECTED() {   
     bridge1.setAuthToken(auth2); // Устройство Slave
}
void setup(){
Blynk.begin(auth, ssid, pass);
}
void loop(){
Blynk.run();
if(val){
     bridge1.virtualWrite(V16, data); // Должно отправлять на Slave данные на V16
  }
}

Хотя если из браузера посылать GET запрос, всё отрабатывает (даже на обеих устройствах если клон или под одним токеном).
В общем нужна помощь.

  • В идеале хотелось бы чтоб через роутер у них это получалось чтоб не зависеть от интернет сбоев. (одно как минимум с Blynk)
  • Можно и с мостом, но что с ним не так.
  • Как работает клон и для чего он нужен вообще не совсем понятно.

You can’t do this, and you certainly can’t do it in your void loop.

If you’re not going to use a Legacy local server then you should switch to Blynk IoT because the Legacy cloud servers will be turned off in four and a half months.

In Blynk IoT you could probably use automations, or the HTTP(S) API to exchange the data.

Pete.

Так и знал что это код нельзя показывать…
Жаль что никакой on-line переводчик не сможет выразить тех эмоций, которые я сейчас испытываю. Нет, я всё сказанное понял, спасибо за ответ. Только теперь вообще ничего не понятно.
Вероятно это значит что если сейчас просто ничего не работает, то через 4,5 месяца вообще ничего работать не будет. Я конечно не уверен как у вас там всё устроено, но помогло это мало чем.

You could obviously put some time and effort into getting Bridge working correctly in Legacy, and there are many topics on this forum that explain how to do that.
However, this will stop working on 31st December, and as Bridge doesn’t work in Blynk IoT, so the time and effort you put into this would be wasted.

That’s why you either need to stick with Legacy and set-up a local Legacy server (which isn’t something I’d recommend) or move to Blynk IoT.

Pete.

1 Like

What is it Blynk IoT?

It’s the new version of Blynk…

Pete.

So I use that alredy long time. And what we tolking about?

Well, you talked about local server, which is Legacy not IoT, and Bridge, which is also Legacy and not IoT.

Posting code snippets, and not providing the information about which version of Blynk you are using - which is requested when you create a topic, means we have to make assumptions, and everything you’ve posted leads to the assumption that you are using Legacy not IoT.

If you want to transfer data from a salve device to a master in IoT the. You can use Automations in some situations.
If Automations don’t provide the functionality you’re looking for then the HTTP(S) API can be used to simulate the Bridge functionality of Legacy…

and…

Pete.

Ok. That is good. Now maybe U can call some one, who can expain me somesing?

I don’t understand.

Pete.

Что мне делать с этим?
Как заставить обмениваться данными между двумя ESP8266, одна из которых подключена к Blynk?

Both of the ESPs will communicate via the Blynk server.
They don’t talk to each other directly.

Pete.

That’s a good thing. Thank you so much for answering me. Can you show me a simple example? Which libraries need to be downloaded/updated? What should be declared and initialized in both controllers? I, at this point, have no idea where to start.

P.S. Looks like I get it. Is it equivalent to a GET request from the web browser’s address bar?

It’s all in the links I provided.

Correct.

Pete.

Could You just give me link with exammles?
I understand what you’re talking about. That’s what I need. But I can’t do anything practical… I don’t know what to write.
https://github.com there are no examples on the topic of blynk-server.

I’d suggest that you post your code and the actual full compiler error message, not just as partial screenshot.
You also need to clarify whether you’re trying to compile this for an ESP8266 or ESP32.

Pete.

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = BLYNK_AUTH_TOKEN;
void api_bridge(String token, int virtual_pin, float value_to_send) { 
  HTTPClient http; 
  String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
}
void setup() {
Blynk.begin(auth, ssid, pass);
}
void loop() {
  Blynk.run();
...
if(...) { api_bridge(auth, V16, valv); }
...
}

Both ESP8266.

Arduino: 1.8.9 (Windows 7), Плата:“NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200”

Boiler:195:38: error: extended character “ is not valid in an identifier
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
| ^
Boiler:195:54: error: extended character ” is not valid in an identifier
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
| ^
Boiler:195:68: error: extended character “ is not valid in an identifier
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
| ^
Boiler:195:76: error: extended character ” is not valid in an identifier
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
| ^
Boiler:195:105: error: extended character “ is not valid in an identifier
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
| ^
Boiler:195:115: error: extended character ” is not valid in an identifier
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send)
| ^
exit status 1
extended character “ is not valid in an identifier

Этот отчёт будет иметь больше информации с
включенной опцией Файл → Настройки →
“Показать подробный вывод во время компиляции”

Okay, that appears to be caused by using the wrong quotation mark symbols.

This … "

is the correct symbol. The compiler doesn’t recognise “ or ” as being valid quotation mark symbols.

Pete.

Yes you are right. I don’t know how I didn’t notice it.
Which library do I need to include?
Boiler:194:3: error: ‘HTTPClient’ was not declared in this scope
194 | HTTPClient http;
| ^~~~~~~~~~
Boiler:195:24: error: ‘server_name’ was not declared in this scope; did you mean ‘server_path’?
195 | String server_path = server_name + “update?token=” + token + “&pin=v” + String(virtual_pin) + “&value=” + float(value_to_send);
| ^~~~~~~~~~~
| server_path
exit status 1
‘HTTPClient’ was not declared in this scope

It’s all in the link I provided…

Pete.