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

Создаем свой блок. Вопросы, помощь знатоков.
Nureke
Рядовой
Сообщения: 41
Зарегистрирован: 15 мар 2017, 05:57
Откуда: Казахстан
Имя: Нурлан
Благодарил (а): 1 раз
Поблагодарили: 3 раза

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

Сообщение Nureke »

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

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

Сообщение aidar_i »

Я пока не могу, может кто сделает?
Последний раз редактировалось aidar_i 12 дек 2020, 01:05, всего редактировалось 1 раз.
Nureke
Рядовой
Сообщения: 41
Зарегистрирован: 15 мар 2017, 05:57
Откуда: Казахстан
Имя: Нурлан
Благодарил (а): 1 раз
Поблагодарили: 3 раза

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

Сообщение Nureke »

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

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

Сообщение aidar_i »

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

Отпишитесь, я не проверял работоспособность, компилируется.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
tornado
Рядовой
Сообщения: 33
Зарегистрирован: 14 апр 2020, 21:17
Имя: Ivan
Благодарил (а): 1 раз

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

Сообщение tornado »

Как будет работать ресивер, если его нужно подключить к роутеру вместе с блоки MQTT или MODBUS?
Nureke
Рядовой
Сообщения: 41
Зарегистрирован: 15 мар 2017, 05:57
Откуда: Казахстан
Имя: Нурлан
Благодарил (а): 1 раз
Поблагодарили: 3 раза

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

Сообщение Nureke »

[ref=#000080]aidar_i[/ref], Отписываюсь по результатам. При проверке выяснилось что не работает точка доступа, с помощью которой через веб-морду надо бы вносить мак-адрес и SSID. Также в проверке был использован датчик DHT22 который никак не хотел передавать свои данные.
Анатолий внес коррективы в ваш блок передатчика, за что ему большое спасибо. Также ему пришлось подкорректировать блок точки доступа wifi_ap.
Я как тестировщик произвел все проверки на ESP-01 с датчиком DHT22.
Выкладываю тестовый проверенный проект
ESP01 передатчик V11 успешно.flp
Проверки проводил в flprog 7.2.1 , но должно работать и в 6 версии.
Также выкладываю комплект блоков (приемник, передатчик, блок записи мак-адреса)
espnow.ubl
Также к нему выкладываю новый блок включения точки доступа
WIFI_AP_v2_(Code_-_Basic).ubi
Айдар, Анатолий большущее вам спасибо за проделанную работу. :smile9:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01 дек 2018, 14:20
Имя: danila

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

Сообщение DanilaWERT »

[ref=#000080]aidar_i[/ref], Вконец с блоками запутался..Передавать с ESP32 на NodeMCU научился.
Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
Последний раз редактировалось DanilaWERT 19 янв 2021, 22:48, всего редактировалось 1 раз.
o615ye161
Сержант
Сообщения: 226
Зарегистрирован: 19 дек 2019, 14:47
Имя: Сергей

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

Сообщение o615ye161 »

Если кому то интересно или может пригодиться ESP32 толерантна по UART к +5V т.е. не нужно делать преобразование логических уровней на +3.3V! :smile9: https://yadi.sk/i/Eo2Un7uCuPVwGA
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

DanilaWERT писал(а): 19 янв 2021, 21:27 Но мне надо чтоб ESP32 передавал данные NodeMCU, NodeMCU передавал дальше через домашний роутер в браузер.
Подскажите какие блоки использовать правильно?
Посмотрите здесь. Почитайте там о каналах роутера.
и в старом редакторе здесь., модбас можете отключить
DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01 дек 2018, 14:20
Имя: danila

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

Сообщение DanilaWERT »

[ref=#000080]aidar_i[/ref], спасибо.Получилось :D Но я также все делал как и сейчас,но ничего не работало.А тут с первого раза.Чудеса..
Еще вопросик.А вот если мне например надо больше переменных отправлять,то надо входЫ(выходы) добавлять в редакторе блока?или как то по другому
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Переменные :

В 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 дек 2018, 14:20
Имя: danila

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

Сообщение DanilaWERT »

[ref=#000080]aidar_i[/ref], не,сложно.Не осилю.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

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

Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
Запись_2021_01_20_23_58_34_460.rar
У вас нет необходимых прав для просмотра вложений в этом сообщении.
DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01 дек 2018, 14:20
Имя: danila

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

Сообщение DanilaWERT »

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

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

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

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

Сообщение aidar_i »

DanilaWERT писал(а): 20 янв 2021, 23:44 Раз передатчик определяет канал,он не может определить что канал,к которому он успешно подключился - пропал?и выполнить новый поиск.
Код поиска канала стоит в сетап и выполняется при включении или перезагрузке ESP.
DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01 дек 2018, 14:20
Имя: danila

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

Сообщение DanilaWERT »

[ref=#000080]aidar_i[/ref],
aidar_i писал(а): 21 янв 2021, 00:25 Код поиска канала стоит в сетап и выполняется при включении или перезагрузке ESP.
так он не может понять что канал утерян?

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

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

Сообщение aidar_i »

Вы попробуйте в роутере поставить канал не авто, а числом.
DanilaWERT
Сержант
Сообщения: 147
Зарегистрирован: 01 дек 2018, 14:20
Имя: danila

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

Сообщение DanilaWERT »

[ref=#000080]aidar_i[/ref],
aidar_i писал(а): 21 янв 2021, 08:41 Вы попробуйте в роутере поставить канал не авто, а числом.
А зачем?У меня почему то и так все работает.
Подключаюсь к роутеру.Передача работает.Смотрю через браузер что приходит на приемник.Открываю в браузере терминал роутера.Смотрю канал.Перезагружаю.Вижу что канал сменился,но через несколько секунд передача вновь работает без перезагрузки контролеров.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

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

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

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

Отправлено спустя 12 минут 18 секунд:
[ref=#000080]aidar_i[/ref],
aidar_i писал(а): 20 янв 2021, 22:08 Тогда пишите , какие переменные Вам надо.
Попробую обьяснить, чтобы сами могли.

Отправлено спустя 34 минуты 18 секунд:
Снял видео о добавлении еще одной переменной integer.
Запись_2021_01_20_23_58_34_460.rar
можно попросить вас сделать еще один ролик добавления переменных по блоку ESP_NOW EXCHANGE DATA для 2х сторонней связи который идет в новом редакторе 7хх .
Спасибо.
Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19 дек 2020, 23:57
Имя: Alex

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

Сообщение Qwert855 »

попробовал расширить блок под свои нужды +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;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

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

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

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