Страница 4 из 21

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 25 фев 2021, 23:29
Qwert855
проверил доработанный блок по методе выше. работает.

Отправлено спустя 2 часа 9 минут 47 секунд:
Qwert855 писал(а): 25 фев 2021, 21:19 проверил доработанный блок по методе выше. работает.
обратил внимание что при компиляции на ESP-1S данный контроллер принимает переменные мгновенно но не спешит начинать передачу.
зачастую помогает длительное ожидание на другой стороне ESP D1mini или включение D1 mini после включения 1S.
суть в том что при связке 1S + D1 mini первым должен включаться 1S тогда двухсторонний обмен стартует сразу.
между двух D1 mini таких проблем нет.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 26 фев 2021, 08:51
Serg_Grn
Я только одного не понял: если применяем протокол ESP_NOW, клиент/точка доступа WiFi может работать или нет?
Т.е. может ESP32 одновременно работать в локальной сети с роутером и с другой платой по ESP_NOW?

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 26 фев 2021, 10:57
aidar_i
Qwert855 писал(а): 25 фев 2021, 01:22 struct_message _myData;
Эта строка здесь лишняя, проверю, попробуйте его просто убрать со скетча, если нормально , и с блока.
Serg_Grn писал(а): 26 фев 2021, 08:51 Я только одного не понял: если применяем протокол ESP_NOW, клиент/точка доступа WiFi может работать или нет?
Т.е. может ESP32 одновременно работать в локальной сети с роутером и с другой платой по ESP_NOW?
Внимательнее читайте тему! Там это решено.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 27 фев 2021, 16:47
Qwert855
[ref=#000080]aidar_i[/ref], добрый день.
Прошу помочь.

при использовании двух блоков проект не компилируется

[scroll]
pr15:96:6: error: redefinition of 'void OnDataRecv(uint8_t*, uint8_t*, uint8_t)'
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
^
pr15:88:6: error: 'void OnDataRecv(uint8_t*, uint8_t*, uint8_t)' previously defined here
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
^
exit status 1
redefinition of 'void OnDataRecv(uint8_t*, uint8_t*, uint8_t)'

[/scroll]

ошибка в строке
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)

сам пример ниже.

Отправлено спустя 45 минут 10 секунд:
Qwert855 писал(а): 27 фев 2021, 16:02 [ref=#000080]aidar_i[/ref], добрый день.
Прошу помочь.

при использовании двух блоков проект не компилируется

[scroll]
pr15:96:6: error: redefinition of 'void OnDataRecv(uint8_t*, uint8_t*, uint8_t)'
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
^
pr15:88:6: error: 'void OnDataRecv(uint8_t*, uint8_t*, uint8_t)' previously defined here
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
^
exit status 1
redefinition of 'void OnDataRecv(uint8_t*, uint8_t*, uint8_t)'

[/scroll]

ошибка в строке
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)

сам пример ниже.

так же обратил внимание.
если использовать два блока и на любом включить галочку использования какой либо переменной, то на втором блоке активируются те же настройки. вероятно в блоке что то надо подкрутить они читаются ФЛП как единый задвоенный.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 27 фев 2021, 16:55
aidar_i
Я посмотрю, скорее, блок не рассчитан на повторное использование. Тогда не стояла передо мной такая задача.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 27 фев 2021, 17:46
Qwert855
aidar_i писал(а): 27 фев 2021, 16:55 Я посмотрю, скорее, блок не рассчитан на повторное использование. Тогда не стояла передо мной такая задача.
я не спец в коде но возможно стоит обратить внимание
[scroll]
void loop()
{
if ((0))
{
esp_now_register_recv_cb(OnDataRecv);
}
if ((0))
{
str = (String(""));
str.toCharArray(char_array, str.length() + 1);
strcpy(myData.a, char_array);
esp_now_send(broadcastAddress0, (uint8_t *) &myData, sizeof(myData));
}
if ((0))
{
esp_now_register_recv_cb(OnDataRecv1);
[/scroll]
и соотв далее где ошибка

[scroll]
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)
{
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.println();
Out_153177633_245678552 = String (myData.a);
}
void OnDataRecv1(uint8_t * mac, uint8_t *incomingData, uint8_t len)
{
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.println();
Out_153177633_113783045 = String (myData.a);
[/scroll]
при этом компиляция проходит.
но работоспособность еще не проверял.

если блок заработает то вероятно стоит добавить нумерацию от номера блока в void loop

[scroll]
void loop()
{
if ((0))
{
esp_now_register_recv_cb(OnDataRecv0);
}
if ((0))
{
str = (String(""));
str.toCharArray(char_array, str.length() + 1);
strcpy(myData.a, char_array);
esp_now_send(broadcastAddress0, (uint8_t *) &myData, sizeof(myData));
}
if ((0))
{
esp_now_register_recv_cb(OnDataRecv1);
[/scroll]


[scroll]
void OnDataRecv0(uint8_t * mac, uint8_t *incomingData, uint8_t len)
{
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.println();
Out_153177633_245678552 = String (myData.a);
}
void OnDataRecv1(uint8_t * mac, uint8_t *incomingData, uint8_t len)
{
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.println();
Out_153177633_113783045 = String (myData.a);
[/scroll]

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 27 фев 2021, 20:06
aidar_i
Удалил

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 00:19
Qwert855
aidar_i писал(а): 27 фев 2021, 20:06 Блок рассчитан для использования в проекте несколько штук. Но была ошибка.
Подправил его, испытайте.пример двух блоков_1.flp
Входы выходы, чтобы не повторялись в разных блоках , постараюсь подправить.
блоки компилируются но не работают.
они так же зеркалится.

при построении данной схемы мак адрес настроен только на первом блоке, он настроен как "0",второй блок настроен как "1" с мак установленным случайно.
0000.png
остался момент, что при добавлении переменных в одном блоке они дублируются в других.
и как видно на скрине ниже при настройке первого блока, данные поступают от второго (последнего в коде) хотя второй блок имеет случайный мак и должен отправлять значения в никуда.
1111.png
почему то блоки читаются как один зеркальный а не каждый индивидуальный.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 09:47
aidar_i
Смотрю и вспоминаю свои эти блоки, в описании блока написано:
Блок передачи может использоваться в проекте много раз для передачи данных на несколько ESP.
Блок приема и приема-передачи использовать в проекте только один раз.
Зачем для двусторонней связи нужны 2 блока?

Отправлено спустя 8 минут 4 секунды:
Qwert855 писал(а): 28 фев 2021, 00:19 и как видно на скрине ниже при настройке первого блока, данные поступают от второго (последнего в коде) хотя второй блок имеет случайный мак и должен отправлять значения в никуда.
В блоках указывается мак адрес приемника!
Прочитайте описание блока и описание параметров!
[spoiler]
Описание блока.png
[/spoiler]
Описание параметра мак адреса
[spoiler]
Описание параметра.png
[/spoiler]
Отправлено спустя 10 минут 7 секунд:
Блок 2х сторонней связи работает так: Первый ЕСП передает данные(мак адрес в нем указывается принимающего ЕСП), этот блок (2х сторонний) их принимает , эти данные появляются на выходах блока Data..., они подаются на вход data. ... через переменную (можно что то добавить к ним) и передаются на следующий ЕСП (во втором блоке указывается мак адрес третьего ЕСП). Так до бесконечности можно передавать.

Ваши примеры некорректны. Сделайте теперь как я описал.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 12:13
Qwert855
настройка блока понятна.
именно поэтому подключение осуществлялось и данные отображались с обоих сторон .

вопрос в попытке организации данной сети.
010.png
на данный момент схему выше возможно организовать в кольце.
но при этом часть данных будет ходить транзитом нагружая контроллеры.
и тк центральный в этом кольце из за программы в нем самый "тормоз" он будет тормозить все кольцо данных.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 16:53
aidar_i
Для такого варианта нужно попробовать переделать блок, перенести все с общего на инстансы.

Отправлено спустя 25 минут 25 секунд:
Если так сделать?
[spoiler]
IMG_20210228_185145.jpg
[/spoiler]
Может тогда esp2 и не нужен

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 16:55
Qwert855
собрал данную схему, она не работает но обнаружил очередной прикол :smile14:
при указанной схеме центральный контроллер отображает значения поочередно
видимо надо переделывать структуру сети :moil:
0110.png
на esp 01s стоит блок для TM1637

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 17:59
aidar_i
Еще покопался, оказывается, у меня есть для 2х сторонней связи 2 вариант: там к блоку передачи добавляется добавочный блок Two-Way Communication. Вот там можно добавлять блок передачи , в Вашм случае 2 шт с мак адресами двух периферийных ESP. Two-Way Communication нужен только один. И все должно получиться.
Qwert855 писал(а): 28 фев 2021, 16:55 на esp 01s стоит блок для TM1637
этот вопросом пока не смогу помочь.


На втором блоке передачи номер блока 1 поставьте, упустил

Отправлено спустя 8 минут 42 секунды:
ESP_NOW 2х сторонняя связь с несколькими ESP.flp

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 19:24
Qwert855
aidar_i писал(а): 28 фев 2021, 17:51 Еще покопался, оказывается, у меня есть для 2х сторонней связи 2 вариант: там к блоку передачи добавляется добавочный блок Two-Way Communication. Вот там можно добавлять блок передачи , в Вашм случае 2 шт с мак адресами двух периферийных ESP. Two-Way Communication нужен только один. И все должно получиться.
Qwert855 писал(а): 28 фев 2021, 16:55 на esp 01s стоит блок для TM1637
этот вопросом пока не смогу помочь.

ESP_NOW 2х сторонняя связь с несколькими ESP.flp
можете пож та пример подключения выложить.
и подсказать где в дополнительном блоке добавлять переменные?

Отправлено спустя 1 час 20 минут 12 секунд:
aidar_i писал(а): 28 фев 2021, 17:59 Еще покопался, оказывается, у меня есть для 2х сторонней связи 2 вариант: там к блоку передачи добавляется добавочный блок Two-Way Communication. Вот там можно добавлять блок передачи , в Вашм случае 2 шт с мак адресами двух периферийных ESP. Two-Way Communication нужен только один. И все должно получиться.
Qwert855 писал(а): 28 фев 2021, 16:55 на esp 01s стоит блок для TM1637
этот вопросом пока не смогу помочь.


На втором блоке передачи номер блока 1 поставьте, упустил

Отправлено спустя 8 минут 42 секунды:
ESP_NOW 2х сторонняя связь с несколькими ESP.flp
в данном примере два блока с выбором на прием и передачу.
при изменении параметров в одном ВСЕ параметры зеркально меняются во втором.
т.е это один и тот же блок который зеркалится а не два независимых блока.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 19:30
aidar_i
Примерно так
ESP_NOW 2х сторонняя связь с несколькими ESP_1.rar
Настройки контроллера и espui не делал , сами донастройте.

Отправлено спустя 4 минуты 59 секунд:
Qwert855 писал(а): 28 фев 2021, 19:24 т.е это один и тот же блок который зеркалится а не два независимых блока.
Да, но можно обойтись ими, я думаю. А переделка на независимые занимает немалое время. Нужно с общего кода перенести на код каждого экземпляра.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 28 фев 2021, 21:03
Qwert855
Qwert855 писал(а): 28 фев 2021, 16:55
на esp 01s стоит блок для TM1637

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.
пришлось заменить контроллер на D1 mini, сменить пины дисплея. в такой связке оно заработало но только на прием.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 04 мар 2021, 22:37
Qwert855
Qwert855 писал(а): 28 фев 2021, 21:03
Qwert855 писал(а): 28 фев 2021, 16:55
на esp 01s стоит блок для TM1637

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.
пришлось заменить контроллер на D1 mini, сменить пины дисплея. в такой связке оно заработало но только на прием.
вопрос оказался в обращении блока связи в сериал порт (видимо осталось в коде что то для отладки). дисплей сидит на тех же пинах поэтому не стартовал.
удаление открытия сериал порта и обращение к нему на работу самого блока не повлияло ( но это не точно, тестится).

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 13 мар 2021, 10:40
Qwert855
[ref=#000080]aidar_i[/ref],
Добрый день.
Подскажите, планируются ли доработки блока?
Изучив немного тему ESP NOW можно увидеть, что потенциал для организации связи не мал.

Так же обратил внимание что если несколько ESP кидают пакеты через роутер, роутер ложится. (кинетик 4 III)
Особенно было очевидно заметно при попытке кидать данные с двух ESP на одну.

Думал приехал роутер, откатывал прошивку, ресетил, пока не отключил все ESP от питания он не ожил.
По итогу через роутер стабильно работают 2 ESP в паре .

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 13 мар 2021, 11:35
aidar_i
Qwert855 писал(а): 13 мар 2021, 10:40 Так же обратил внимание что если несколько ESP кидают пакеты через роутер, роутер ложится.
С роутером должен связываться только один ESP. Остальные с ним.

Отправлено спустя 3 минуты 31 секунду:
Qwert855 писал(а): 13 мар 2021, 10:40 Подскажите, планируются ли доработки блока?
Я не планирую пока.
Я здесь пользовался готовыми решениями, которые нашел в интернете.
Что накопал, здесь выложил.

ESP_NOW, передача данных между ESP8266 ( ESP32 )

Добавлено: 13 мар 2021, 15:31
Qwert855
у меня так не получилось их связать. либо все в сети роутера либо все без него.