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

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

Создаем свой блок. Вопросы, помощь знатоков.
Nureke
Рядовой
Сообщения: 40
Зарегистрирован: 15.03.2017{, 05:57}
Репутация: 3
Откуда: Казахстан
Имя: Нурлан

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

#41

Сообщение Nureke » 09.12.2020{, 12:00}

Айдар, классный блок получился. Спасибо.
А можно в блоке передатчика настройки SSID и МАК-адреса вынести на вход блока?
ФЛПрог 6 версия.
Заранее спасибо.

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

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

#42

Сообщение aidar_i » 09.12.2020{, 13:55}

Я пока не могу, может кто сделает?
Последний раз редактировалось aidar_i 12.12.2020{, 01:05}, всего редактировалось 1 раз.

Nureke
Рядовой
Сообщения: 40
Зарегистрирован: 15.03.2017{, 05:57}
Репутация: 3
Откуда: Казахстан
Имя: Нурлан

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

#43

Сообщение Nureke » 09.12.2020{, 21:55}

aidar_i писал(а):
09.12.2020{, 13:55}
Я не могу, может кто сделает?
А хотя бы SSID только вынести наружу?

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

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

#44

Сообщение aidar_i » 11.12.2020{, 22:19}

Nureke писал(а):
09.12.2020{, 21:55}
aidar_i писал(а):
09.12.2020{, 13:55}
Я не могу, может кто сделает?
А хотя бы SSID только вынести наружу?
Пробуйте
Передача данных ESP8266 WiFi_1.flp
(148.41 КБ) 147 скачиваний
Отправлено спустя 2 часа 4 минуты 11 секунд:
Вывел MAC адрес, испытайте
Передача данных ESP8266 WiFi_2.flp
(191.18 КБ) 156 скачиваний
В блоке Перевод MAC адреса описание не делал, вставьте отсюда
Перевод MAC адреса строкой в массив byte.
MAC адрес писать слитно. Пример FFFFFFFFFFFF, 78ACC03090D3
Преобразует в массив типа:
byte byteArray[MaxByteArraySize] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
MaxByteArraySize = 6 (для мас адреса).
На вход подавать высокий уровень, в блоке встроен аналог R триггера.

Отпишитесь, я не проверял работоспособность, компилируется.

tornado
Рядовой
Сообщения: 30
Зарегистрирован: 14.04.2020{, 21:17}
Репутация: 1
Имя: Ivan

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

#45

Сообщение tornado » 12.12.2020{, 15:50}

Как будет работать ресивер, если его нужно подключить к роутеру вместе с блоки MQTT или MODBUS?

Nureke
Рядовой
Сообщения: 40
Зарегистрирован: 15.03.2017{, 05:57}
Репутация: 3
Откуда: Казахстан
Имя: Нурлан

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

#46

Сообщение Nureke » 13.12.2020{, 23:15}

aidar_i, Отписываюсь по результатам. При проверке выяснилось что не работает точка доступа, с помощью которой через веб-морду надо бы вносить мак-адрес и SSID. Также в проверке был использован датчик DHT22 который никак не хотел передавать свои данные.
Анатолий внес коррективы в ваш блок передатчика, за что ему большое спасибо. Также ему пришлось подкорректировать блок точки доступа wifi_ap.
Я как тестировщик произвел все проверки на ESP-01 с датчиком DHT22.
Выкладываю тестовый проверенный проект
ESP01 передатчик V11 успешно.flp
(266.17 КБ) 186 скачиваний
Проверки проводил в flprog 7.2.1 , но должно работать и в 6 версии.
Также выкладываю комплект блоков (приемник, передатчик, блок записи мак-адреса)
espnow.ubl
(148.16 КБ) 185 скачиваний
Также к нему выкладываю новый блок включения точки доступа
WIFI_AP_v2_(Code_-_Basic).ubi
(7.93 КБ) 162 скачивания
Айдар, Анатолий большущее вам спасибо за проделанную работу. :smile9:

DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01.12.2018{, 14:20}
Репутация: 1
Имя: danila

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

#47

Сообщение DanilaWERT » 19.01.2021{, 21:27}

aidar_i, Вконец с блоками запутался..Передавать с ESP32 на NodeMCU научился.
Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
Последний раз редактировалось DanilaWERT 19.01.2021{, 22:48}, всего редактировалось 1 раз.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

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

#48

Сообщение o615ye161 » 19.01.2021{, 22:38}

Если кому то интересно или может пригодиться ESP32 толерантна по UART к +5V т.е. не нужно делать преобразование логических уровней на +3.3V! :smile9: https://yadi.sk/i/Eo2Un7uCuPVwGA

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

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

#49

Сообщение aidar_i » 20.01.2021{, 01:05}

DanilaWERT писал(а):
19.01.2021{, 21:27}
Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
Посмотрите здесь. Почитайте там о каналах роутера.
и в старом редакторе здесь., модбас можете отключить

DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01.12.2018{, 14:20}
Репутация: 1
Имя: danila

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

#50

Сообщение DanilaWERT » 20.01.2021{, 13:06}

aidar_i, спасибо.Получилось :D Но я также все делал как и сейчас,но ничего не работало.А тут с первого раза.Чудеса..
Еще вопросик.А вот если мне например надо больше переменных отправлять,то надо входЫ(выходы) добавлять в редакторе блока?или как то по другому

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

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

#51

Сообщение aidar_i » 20.01.2021{, 15:10}

Переменные :

В 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;
Можете добавлять, удалять лишние. Соответственно и входы выходы тоже.

DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01.12.2018{, 14:20}
Репутация: 1
Имя: danila

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

#52

Сообщение DanilaWERT » 20.01.2021{, 16:02}

aidar_i, не,сложно.Не осилю.

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

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

#53

Сообщение aidar_i » 20.01.2021{, 21:34}

Тогда пишите , какие переменные Вам надо.
Попробую обьяснить, чтобы сами могли.

Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
Запись_2021_01_20_23_58_34_460.rar
(2.03 МБ) 118 скачиваний

DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01.12.2018{, 14:20}
Репутация: 1
Имя: danila

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

#54

Сообщение DanilaWERT » 20.01.2021{, 22:42}

aidar_i, Спасибо огромное.С горем пополам и матюками разобрался сам. Только в приемнике пропустил символ в названии выхода и сооьветственно он не работал.Пол дня пытался найти ошибку.Так эти контроллеры долго прошиваются!! Начал смотреть ваше видео и сверяться с собой..тут она и показалась. Чего делаю конечно же не понимаю :D просто копирую.. Одно не получается никак.В скетч не прописывается созданный мной новый выход.Если добавить в ручную,то все работает. Не посмотрите?

Отправлено спустя 56 минут 55 секунд:
Все,починил :D Как всегда невнимательность.Добавил для тренировки еще один int,все работает.

Отправлено спустя 5 минут 35 секунд:
Я может глупость спрошу.Про каналы вайфай..Раз передатчик определяет канал,он не может определить что канал,к которому он успешно подключился - пропал?и выполнить новый поиск.
Вложения
Передача данных ESP32 clientЯЯЯ.flp
(1.3 МБ) 60 скачиваний

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

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

#55

Сообщение aidar_i » 21.01.2021{, 00:25}

DanilaWERT писал(а):
20.01.2021{, 23:44}
Раз передатчик определяет канал,он не может определить что канал,к которому он успешно подключился - пропал?и выполнить новый поиск.
Код поиска канала стоит в сетап и выполняется при включении или перезагрузке ESP.

DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01.12.2018{, 14:20}
Репутация: 1
Имя: danila

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

#56

Сообщение DanilaWERT » 21.01.2021{, 00:35}

aidar_i,
aidar_i писал(а):
21.01.2021{, 00:25}
Код поиска канала стоит в сетап и выполняется при включении или перезагрузке ESP.
так он не может понять что канал утерян?

Отправлено спустя 13 минут 47 секунд:
Сейчас специально пробовал несколько раз перезагружал роутер.А ESPшки не трогал.Канал менялся,но все работает все равно.В роутере стоит АВТО.

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

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

#57

Сообщение aidar_i » 21.01.2021{, 08:41}

Вы попробуйте в роутере поставить канал не авто, а числом.

DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01.12.2018{, 14:20}
Репутация: 1
Имя: danila

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

#58

Сообщение DanilaWERT » 21.01.2021{, 22:41}

aidar_i,
aidar_i писал(а):
21.01.2021{, 08:41}
Вы попробуйте в роутере поставить канал не авто, а числом.
А зачем?У меня почему то и так все работает.
Подключаюсь к роутеру.Передача работает.Смотрю через браузер что приходит на приемник.Открываю в браузере терминал роутера.Смотрю канал.Перезагружаю.Вижу что канал сменился,но через несколько секунд передача вновь работает без перезагрузки контролеров.

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

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

#59

Сообщение Qwert855 » 24.02.2021{, 12:17}

Добрый день.
Огромное спасибо за блоки :smile9: .

на данный момент смотрю его двухстороннюю работу в тесте без нагрузки самого проекта, на 2х мак адресах через роутер - работает стабильно, легкость организации сети потрясающая.
планирую перевести существующий проект под обмен переменными через данный блок что бы уйти от штатных блоков коммуникации ФЛП, есть опасения что когда подцеплю проект и ряд переменных то ESP повиснет или будет сильно лагать.

подскажите по блоку двухстороннего обмена есть ли ограничения по ресурсу ESP8266 или самого блока?
а именно - как часто рекомендуется обновлять передачу и сколько примерно переменных типа флоат он пропускает не выводя контроллер из стабильного режима?
планируется объединить данным блоком 3 мак адреса.
Прошу поделиться опытом, есть ли трудности в работе с ESP8266, ошибки в передаче, срывы связи?
Спасибо.

Отправлено спустя 12 минут 18 секунд:
aidar_i,
aidar_i писал(а):
20.01.2021{, 22:08}
Тогда пишите , какие переменные Вам надо.
Попробую обьяснить, чтобы сами могли.

Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
Запись_2021_01_20_23_58_34_460.rar
можно попросить вас сделать еще один ролик добавления переменных по блоку ESP_NOW EXCHANGE DATA для 2х сторонней связи который идет в новом редакторе 7хх .
Спасибо.

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

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

#60

Сообщение Qwert855 » 25.02.2021{, 01:22}

попробовал расширить блок под свои нужды +4 флоат.
сделал напоминалку от редактора 7хх может кому пригодится.
заполнение форм в редакторе по образцу требуемой переменной
памятка.png
компиляция проходит успешно, в деле еще не тестил.

Код: Выделить всё

#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;
}

Ответить

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