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

Без создания WiFi сети.

Создаем свой блок. Вопросы, помощь знатоков.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#61

Сообщение Qwert855 » 25.02.2021{, 21:19}

проверил доработанный блок по методе выше. работает.

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

Serg_Grn
Лейтенант
Сообщения: 333
Зарегистрирован: 11.02.2018{, 13:07}
Репутация: 36
Имя: Сергей

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

#62

Сообщение Serg_Grn » 26.02.2021{, 08:51}

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

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#63

Сообщение aidar_i » 26.02.2021{, 10:57}

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

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#64

Сообщение Qwert855 » 27.02.2021{, 16:02}

aidar_i, добрый день.
Прошу помочь.

при использовании двух блоков проект не компилируется
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)'
ошибка в строке
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)

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

Отправлено спустя 45 минут 10 секунд:
Qwert855 писал(а):
27.02.2021{, 16:02}
aidar_i, добрый день.
Прошу помочь.

при использовании двух блоков проект не компилируется
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)'
ошибка в строке
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len)

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

так же обратил внимание.
если использовать два блока и на любом включить галочку использования какой либо переменной, то на втором блоке активируются те же настройки. вероятно в блоке что то надо подкрутить они читаются ФЛП как единый задвоенный.
Вложения
пример двух блоков.flp
(1.35 МБ) 119 скачиваний

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#65

Сообщение aidar_i » 27.02.2021{, 16:55}

Я посмотрю, скорее, блок не рассчитан на повторное использование. Тогда не стояла передо мной такая задача.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#66

Сообщение Qwert855 » 27.02.2021{, 17:46}

aidar_i писал(а):
27.02.2021{, 16:55}
Я посмотрю, скорее, блок не рассчитан на повторное использование. Тогда не стояла передо мной такая задача.
я не спец в коде но возможно стоит обратить внимание
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);
и соотв далее где ошибка
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);
при этом компиляция проходит.
но работоспособность еще не проверял.

если блок заработает то вероятно стоит добавить нумерацию от номера блока в void loop
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);
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);

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#67

Сообщение aidar_i » 27.02.2021{, 20:06}

Удалил
Последний раз редактировалось aidar_i 28.02.2021{, 09:39}, всего редактировалось 2 раза.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#68

Сообщение Qwert855 » 28.02.2021{, 00:19}

aidar_i писал(а):
27.02.2021{, 20:06}
Блок рассчитан для использования в проекте несколько штук. Но была ошибка.
Подправил его, испытайте.пример двух блоков_1.flp
Входы выходы, чтобы не повторялись в разных блоках , постараюсь подправить.
блоки компилируются но не работают.
они так же зеркалится.

при построении данной схемы мак адрес настроен только на первом блоке, он настроен как "0",второй блок настроен как "1" с мак установленным случайно.
0000.png
0000.png (6.62 КБ) 1264 просмотра
остался момент, что при добавлении переменных в одном блоке они дублируются в других.
и как видно на скрине ниже при настройке первого блока, данные поступают от второго (последнего в коде) хотя второй блок имеет случайный мак и должен отправлять значения в никуда.
1111.png
1111.png (2.84 КБ) 1264 просмотра
почему то блоки читаются как один зеркальный а не каждый индивидуальный.
Вложения
пример.7z
(1.31 МБ) 100 скачиваний

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#69

Сообщение aidar_i » 28.02.2021{, 09:29}

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

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

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

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#70

Сообщение Qwert855 » 28.02.2021{, 12:13}

настройка блока понятна.
именно поэтому подключение осуществлялось и данные отображались с обоих сторон .

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

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#71

Сообщение aidar_i » 28.02.2021{, 16:27}

Для такого варианта нужно попробовать переделать блок, перенести все с общего на инстансы.

Отправлено спустя 25 минут 25 секунд:
Если так сделать?
СпойлерПоказать
IMG_20210228_185145.jpg
Может тогда esp2 и не нужен

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#72

Сообщение Qwert855 » 28.02.2021{, 16:55}

собрал данную схему, она не работает но обнаружил очередной прикол :smile14:
при указанной схеме центральный контроллер отображает значения поочередно
видимо надо переделывать структуру сети :moil:
0110.png
0110.png (6.07 КБ) 1177 просмотров
на esp 01s стоит блок для TM1637

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.
Последний раз редактировалось Qwert855 28.02.2021{, 17:58}, всего редактировалось 1 раз.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#73

Сообщение aidar_i » 28.02.2021{, 17:51}

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


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

Отправлено спустя 8 минут 42 секунды:

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#74

Сообщение Qwert855 » 28.02.2021{, 18:04}

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

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

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


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

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

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#75

Сообщение aidar_i » 28.02.2021{, 19:25}

Примерно так Настройки контроллера и espui не делал , сами донастройте.

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

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#76

Сообщение Qwert855 » 28.02.2021{, 21:03}

Qwert855 писал(а):
28.02.2021{, 16:55}

на esp 01s стоит блок для TM1637

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

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#77

Сообщение Qwert855 » 04.03.2021{, 22:37}

Qwert855 писал(а):
28.02.2021{, 21:03}
Qwert855 писал(а):
28.02.2021{, 16:55}

на esp 01s стоит блок для TM1637

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

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#78

Сообщение Qwert855 » 13.03.2021{, 10:40}

aidar_i,
Добрый день.
Подскажите, планируются ли доработки блока?
Изучив немного тему ESP NOW можно увидеть, что потенциал для организации связи не мал.

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

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

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#79

Сообщение aidar_i » 13.03.2021{, 11:31}

Qwert855 писал(а):
13.03.2021{, 10:40}
Так же обратил внимание что если несколько ESP кидают пакеты через роутер, роутер ложится.
С роутером должен связываться только один ESP. Остальные с ним.

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

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

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

#80

Сообщение Qwert855 » 13.03.2021{, 15:31}

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

Ответить

Вернуться в «Разработка пользовательских блоков»