ESP_NOW, передача данных между ESP8266 ( ESP32 )
-
- Рядовой
- Сообщения: 41
- Зарегистрирован: 15 мар 2017, 05:57
- Откуда: Казахстан
- Имя: Нурлан
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Айдар, классный блок получился. Спасибо.
А можно в блоке передатчика настройки SSID и МАК-адреса вынести на вход блока?
ФЛПрог 6 версия.
Заранее спасибо.
А можно в блоке передатчика настройки SSID и МАК-адреса вынести на вход блока?
ФЛПрог 6 версия.
Заранее спасибо.
-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Я пока не могу, может кто сделает?
Последний раз редактировалось aidar_i 12 дек 2020, 01:05, всего редактировалось 1 раз.
-
- Рядовой
- Сообщения: 41
- Зарегистрирован: 15 мар 2017, 05:57
- Откуда: Казахстан
- Имя: Нурлан
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Пробуйте Отправлено спустя 2 часа 4 минуты 11 секунд:
Вывел MAC адрес, испытайте В блоке Перевод MAC адреса описание не делал, вставьте отсюда
Перевод MAC адреса строкой в массив byte.
MAC адрес писать слитно. Пример FFFFFFFFFFFF, 78ACC03090D3
Преобразует в массив типа:
byte byteArray[MaxByteArraySize] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
MaxByteArraySize = 6 (для мас адреса).
На вход подавать высокий уровень, в блоке встроен аналог R триггера.
Отпишитесь, я не проверял работоспособность, компилируется.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Как будет работать ресивер, если его нужно подключить к роутеру вместе с блоки MQTT или MODBUS?
-
- Рядовой
- Сообщения: 41
- Зарегистрирован: 15 мар 2017, 05:57
- Откуда: Казахстан
- Имя: Нурлан
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
ESP_NOW, передача данных между ESP8266 ( ESP32 )
[ref=#000080]aidar_i[/ref], Отписываюсь по результатам. При проверке выяснилось что не работает точка доступа, с помощью которой через веб-морду надо бы вносить мак-адрес и SSID. Также в проверке был использован датчик DHT22 который никак не хотел передавать свои данные.
Анатолий внес коррективы в ваш блок передатчика, за что ему большое спасибо. Также ему пришлось подкорректировать блок точки доступа wifi_ap.
Я как тестировщик произвел все проверки на ESP-01 с датчиком DHT22.
Выкладываю тестовый проверенный проект Проверки проводил в flprog 7.2.1 , но должно работать и в 6 версии.
Также выкладываю комплект блоков (приемник, передатчик, блок записи мак-адреса) Также к нему выкладываю новый блок включения точки доступа Айдар, Анатолий большущее вам спасибо за проделанную работу.
Анатолий внес коррективы в ваш блок передатчика, за что ему большое спасибо. Также ему пришлось подкорректировать блок точки доступа wifi_ap.
Я как тестировщик произвел все проверки на ESP-01 с датчиком DHT22.
Выкладываю тестовый проверенный проект Проверки проводил в flprog 7.2.1 , но должно работать и в 6 версии.
Также выкладываю комплект блоков (приемник, передатчик, блок записи мак-адреса) Также к нему выкладываю новый блок включения точки доступа Айдар, Анатолий большущее вам спасибо за проделанную работу.

У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 147
- Зарегистрирован: 01 дек 2018, 14:20
- Имя: danila
ESP_NOW, передача данных между ESP8266 ( ESP32 )
[ref=#000080]aidar_i[/ref], Вконец с блоками запутался..Передавать с ESP32 на NodeMCU научился.
Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
Последний раз редактировалось DanilaWERT 19 янв 2021, 22:48, всего редактировалось 1 раз.
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Если кому то интересно или может пригодиться ESP32 толерантна по UART к +5V т.е. не нужно делать преобразование логических уровней на +3.3V!
https://yadi.sk/i/Eo2Un7uCuPVwGA

-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Посмотрите здесь. Почитайте там о каналах роутера.DanilaWERT писал(а): 19 янв 2021, 21:27 Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
и в старом редакторе здесь., модбас можете отключить
-
- Сержант
- Сообщения: 147
- Зарегистрирован: 01 дек 2018, 14:20
- Имя: danila
ESP_NOW, передача данных между ESP8266 ( ESP32 )
[ref=#000080]aidar_i[/ref], спасибо.Получилось
Но я также все делал как и сейчас,но ничего не работало.А тут с первого раза.Чудеса..
Еще вопросик.А вот если мне например надо больше переменных отправлять,то надо входЫ(выходы) добавлять в редакторе блока?или как то по другому

Еще вопросик.А вот если мне например надо больше переменных отправлять,то надо входЫ(выходы) добавлять в редакторе блока?или как то по другому
-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Переменные :
В declare:
typedef struct struct_message
{
char a[ buffer ];
int b;
float c;
bool e;
}
В передатчике в loop:
str = (String( data_string ));
str.toCharArray(char_array, str.length() + 1);
strcpy(myData.a, char_array); //string занимает 3 строки кода.
myData.b = data_int ;
myData.c = data_float ;
myData.e = data_bool ;
В приемнике в declare аналогично,
в функциях:
Data_str = String (myData.a);
Data_int = myData.b;
Data_float = myData.c;
Data_bool = myData.e;
Можете добавлять, удалять лишние. Соответственно и входы выходы тоже.
В declare:
typedef struct struct_message
{
char a[ buffer ];
int b;
float c;
bool e;
}
В передатчике в loop:
str = (String( data_string ));
str.toCharArray(char_array, str.length() + 1);
strcpy(myData.a, char_array); //string занимает 3 строки кода.
myData.b = data_int ;
myData.c = data_float ;
myData.e = data_bool ;
В приемнике в declare аналогично,
в функциях:
Data_str = String (myData.a);
Data_int = myData.b;
Data_float = myData.c;
Data_bool = myData.e;
Можете добавлять, удалять лишние. Соответственно и входы выходы тоже.
-
- Сержант
- Сообщения: 147
- Зарегистрирован: 01 дек 2018, 14:20
- Имя: danila
-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Тогда пишите , какие переменные Вам надо.
Попробую обьяснить, чтобы сами могли.
Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
Попробую обьяснить, чтобы сами могли.
Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 147
- Зарегистрирован: 01 дек 2018, 14:20
- Имя: danila
ESP_NOW, передача данных между ESP8266 ( ESP32 )
[ref=#000080]aidar_i[/ref], Спасибо огромное.С горем пополам и матюками разобрался сам. Только в приемнике пропустил символ в названии выхода и сооьветственно он не работал.Пол дня пытался найти ошибку.Так эти контроллеры долго прошиваются!! Начал смотреть ваше видео и сверяться с собой..тут она и показалась. Чего делаю конечно же не понимаю
просто копирую.. Одно не получается никак.В скетч не прописывается созданный мной новый выход.Если добавить в ручную,то все работает. Не посмотрите?
Отправлено спустя 56 минут 55 секунд:
Все,починил
Как всегда невнимательность.Добавил для тренировки еще один int,все работает.
Отправлено спустя 5 минут 35 секунд:
Я может глупость спрошу.Про каналы вайфай..Раз передатчик определяет канал,он не может определить что канал,к которому он успешно подключился - пропал?и выполнить новый поиск.

Отправлено спустя 56 минут 55 секунд:
Все,починил

Отправлено спустя 5 минут 35 секунд:
Я может глупость спрошу.Про каналы вайфай..Раз передатчик определяет канал,он не может определить что канал,к которому он успешно подключился - пропал?и выполнить новый поиск.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Код поиска канала стоит в сетап и выполняется при включении или перезагрузке ESP.DanilaWERT писал(а): 20 янв 2021, 23:44 Раз передатчик определяет канал,он не может определить что канал,к которому он успешно подключился - пропал?и выполнить новый поиск.
-
- Сержант
- Сообщения: 147
- Зарегистрирован: 01 дек 2018, 14:20
- Имя: danila
ESP_NOW, передача данных между ESP8266 ( ESP32 )
[ref=#000080]aidar_i[/ref],
Отправлено спустя 13 минут 47 секунд:
Сейчас специально пробовал несколько раз перезагружал роутер.А ESPшки не трогал.Канал менялся,но все работает все равно.В роутере стоит АВТО.
так он не может понять что канал утерян?aidar_i писал(а): 21 янв 2021, 00:25 Код поиска канала стоит в сетап и выполняется при включении или перезагрузке ESP.
Отправлено спустя 13 минут 47 секунд:
Сейчас специально пробовал несколько раз перезагружал роутер.А ESPшки не трогал.Канал менялся,но все работает все равно.В роутере стоит АВТО.
-
- Полковник
- Сообщения: 3360
- Зарегистрирован: 24 дек 2016, 16:55
- Откуда: Уфа
- Имя: Айдар
- Благодарил (а): 14 раз
- Поблагодарили: 100 раз
- Контактная информация:
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Вы попробуйте в роутере поставить канал не авто, а числом.
-
- Сержант
- Сообщения: 147
- Зарегистрирован: 01 дек 2018, 14:20
- Имя: danila
ESP_NOW, передача данных между ESP8266 ( ESP32 )
[ref=#000080]aidar_i[/ref],
Подключаюсь к роутеру.Передача работает.Смотрю через браузер что приходит на приемник.Открываю в браузере терминал роутера.Смотрю канал.Перезагружаю.Вижу что канал сменился,но через несколько секунд передача вновь работает без перезагрузки контролеров.
А зачем?У меня почему то и так все работает.
Подключаюсь к роутеру.Передача работает.Смотрю через браузер что приходит на приемник.Открываю в браузере терминал роутера.Смотрю канал.Перезагружаю.Вижу что канал сменился,но через несколько секунд передача вновь работает без перезагрузки контролеров.
ESP_NOW, передача данных между ESP8266 ( ESP32 )
Добрый день.
Огромное спасибо за блоки
.
на данный момент смотрю его двухстороннюю работу в тесте без нагрузки самого проекта, на 2х мак адресах через роутер - работает стабильно, легкость организации сети потрясающая.
планирую перевести существующий проект под обмен переменными через данный блок что бы уйти от штатных блоков коммуникации ФЛП, есть опасения что когда подцеплю проект и ряд переменных то ESP повиснет или будет сильно лагать.
подскажите по блоку двухстороннего обмена есть ли ограничения по ресурсу ESP8266 или самого блока?
а именно - как часто рекомендуется обновлять передачу и сколько примерно переменных типа флоат он пропускает не выводя контроллер из стабильного режима?
планируется объединить данным блоком 3 мак адреса.
Прошу поделиться опытом, есть ли трудности в работе с ESP8266, ошибки в передаче, срывы связи?
Спасибо.
Отправлено спустя 12 минут 18 секунд:
[ref=#000080]aidar_i[/ref],
Спасибо.
Огромное спасибо за блоки

на данный момент смотрю его двухстороннюю работу в тесте без нагрузки самого проекта, на 2х мак адресах через роутер - работает стабильно, легкость организации сети потрясающая.
планирую перевести существующий проект под обмен переменными через данный блок что бы уйти от штатных блоков коммуникации ФЛП, есть опасения что когда подцеплю проект и ряд переменных то ESP повиснет или будет сильно лагать.
подскажите по блоку двухстороннего обмена есть ли ограничения по ресурсу ESP8266 или самого блока?
а именно - как часто рекомендуется обновлять передачу и сколько примерно переменных типа флоат он пропускает не выводя контроллер из стабильного режима?
планируется объединить данным блоком 3 мак адреса.
Прошу поделиться опытом, есть ли трудности в работе с ESP8266, ошибки в передаче, срывы связи?
Спасибо.
Отправлено спустя 12 минут 18 секунд:
[ref=#000080]aidar_i[/ref],
можно попросить вас сделать еще один ролик добавления переменных по блоку ESP_NOW EXCHANGE DATA для 2х сторонней связи который идет в новом редакторе 7хх .aidar_i писал(а): 20 янв 2021, 22:08 Тогда пишите , какие переменные Вам надо.
Попробую обьяснить, чтобы сами могли.
Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
Запись_2021_01_20_23_58_34_460.rar
Спасибо.
ESP_NOW, передача данных между ESP8266 ( ESP32 )
попробовал расширить блок под свои нужды +4 флоат.
сделал напоминалку от редактора 7хх может кому пригодится.
заполнение форм в редакторе по образцу требуемой переменной компиляция проходит успешно, в деле еще не тестил.
сделал напоминалку от редактора 7хх может кому пригодится.
заполнение форм в редакторе по образцу требуемой переменной компиляция проходит успешно, в деле еще не тестил.
Код: Выделить всё
#include <ESP8266WiFi.h>
#include <espnow.h>
uint8_t broadcastAddress1[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
extern "C"
{
#include "user_interface.h"
}
int Out_99814437_83074444;
float Out_16324584_83074444;
float Out_92004136_83074444;
float Out_127911194_83074444;
float Out_262202820_83074444;
float Out_266907993_83074444;
String Out_153177633_83074444;
bool Out_241095515_83074444;
String str;
char char_array[32];
typedef struct struct_message
{
char a[32];
int b;
float c;
float f;
float g;
float o;
float p;
bool e;
}
struct_message;
struct_message myData;
struct_message _myData;
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect ();
if (esp_now_init() != 0)
{
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(OnDataSent);
esp_now_add_peer(broadcastAddress1, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
}
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);
myData.b =(0);
myData.c =(0);
myData.f =(0);
myData.g =(0);
myData.o =(0);
myData.p =(0);
myData.e =(0);
esp_now_send(broadcastAddress1, (uint8_t *) &myData, sizeof(myData));
}
//Плата:1
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus)
{
Serial.print("Last Packet Send Status: ");
if (sendStatus == 0)
{
Serial.println("Delivery success");
}
else
{
Serial.println("Delivery fail");
}
}
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_83074444 = String (myData.a);
Out_99814437_83074444 = myData.b;
Out_16324584_83074444 = myData.c;
Out_92004136_83074444 = myData.f;
Out_127911194_83074444 = myData.g;
Out_262202820_83074444 = myData.o;
Out_266907993_83074444 = myData.p;
Out_241095515_83074444 = myData.e;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя