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

Создаем свой блок. Вопросы, помощь знатоков.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

Отправлено спустя 2 часа 9 минут 47 секунд:
Qwert855 писал(а): 25 фев 2021, 21:19 проверил доработанный блок по методе выше. работает.
обратил внимание что при компиляции на ESP-1S данный контроллер принимает переменные мгновенно но не спешит начинать передачу.
зачастую помогает длительное ожидание на другой стороне ESP D1mini или включение D1 mini после включения 1S.
суть в том что при связке 1S + D1 mini первым должен включаться 1S тогда двухсторонний обмен стартует сразу.
между двух D1 mini таких проблем нет.
Serg_Grn
Лейтенант
Сообщения: 338
Зарегистрирован: 11 фев 2018, 13:07
Имя: Сергей
Благодарил (а): 5 раз
Поблагодарили: 1 раз

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

Сообщение Serg_Grn »

Я только одного не понял: если применяем протокол ESP_NOW, клиент/точка доступа WiFi может работать или нет?
Т.е. может ESP32 одновременно работать в локальной сети с роутером и с другой платой по ESP_NOW?
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

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

Сообщение 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)

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

так же обратил внимание.
если использовать два блока и на любом включить галочку использования какой либо переменной, то на втором блоке активируются те же настройки. вероятно в блоке что то надо подкрутить они читаются ФЛП как единый задвоенный.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Я посмотрю, скорее, блок не рассчитан на повторное использование. Тогда не стояла передо мной такая задача.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение 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]
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Удалил
Последний раз редактировалось aidar_i 28 фев 2021, 09:39, всего редактировалось 2 раза.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

при построении данной схемы мак адрес настроен только на первом блоке, он настроен как "0",второй блок настроен как "1" с мак установленным случайно.
0000.png
остался момент, что при добавлении переменных в одном блоке они дублируются в других.
и как видно на скрине ниже при настройке первого блока, данные поступают от второго (последнего в коде) хотя второй блок имеет случайный мак и должен отправлять значения в никуда.
1111.png
почему то блоки читаются как один зеркальный а не каждый индивидуальный.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

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

Ваши примеры некорректны. Сделайте теперь как я описал.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

вопрос в попытке организации данной сети.
010.png
на данный момент схему выше возможно организовать в кольце.
но при этом часть данных будет ходить транзитом нагружая контроллеры.
и тк центральный в этом кольце из за программы в нем самый "тормоз" он будет тормозить все кольцо данных.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

Отправлено спустя 25 минут 25 секунд:
Если так сделать?
[spoiler]
IMG_20210228_185145.jpg
[/spoiler]
Может тогда esp2 и не нужен
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Qwert855 28 фев 2021, 17:58, всего редактировалось 1 раз.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение 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
в данном примере два блока с выбором на прием и передачу.
при изменении параметров в одном ВСЕ параметры зеркально меняются во втором.
т.е это один и тот же блок который зеркалится а не два независимых блока.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Примерно так
ESP_NOW 2х сторонняя связь с несколькими ESP_1.rar
Настройки контроллера и espui не делал , сами донастройте.

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

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

Сообщение Qwert855 »

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

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.
пришлось заменить контроллер на D1 mini, сменить пины дисплея. в такой связке оно заработало но только на прием.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

при добавлении данного блока дисплей "молчит".
удаляю блок дисплей оживает.
пришлось заменить контроллер на D1 mini, сменить пины дисплея. в такой связке оно заработало но только на прием.
вопрос оказался в обращении блока связи в сериал порт (видимо осталось в коде что то для отладки). дисплей сидит на тех же пинах поэтому не стартовал.
удаление открытия сериал порта и обращение к нему на работу самого блока не повлияло ( но это не точно, тестится).
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

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

Думал приехал роутер, откатывал прошивку, ресетил, пока не отключил все ESP от питания он не ожил.
По итогу через роутер стабильно работают 2 ESP в паре .
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

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

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

Сообщение Qwert855 »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя