Хотелось бы предложить перечитать мой первый пост.
Я точно знаю, что люди делают и все работает на 8266 , и ничего писать для этого не надо.
Предлагать варианты из разряда полностью абсурдных, вряд ли имеет смысл.
Прошивка ниже и в приложенном файле (написана в VSCode и проверена на "железе" - фсё работает ;-) ).
Так как точно не известны протоколы, скорости и размеры - нет защиты от переполнения буфера. Но возможно и не понадобится...
Дальность связи примерно 10-15 метров "в поле". Надеюсь хватит.
Постарался максимально откомментировать.
#include "arduino.h"
#include "espnow.h"
#include "user_interface.h"
byte targetMAC[6]{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // Лучше изменить на MAC второго ESP, но можно оставить и так.
char buffer[128]{0}; // Буфер данных из UART. 128 байт ограничение "железного" буфера ESP.
int counter{0}; // Счетчик принятых по UART байт в каждой сессии.
void IRAM_ATTR onDataReceive(byte *mac, byte *data, byte len) // При поступлении пакета через ESP-NOW:
{
Serial.write(data, len); // Загоняем его без обработки в UART.
}
void setup()
{
Serial.begin(115200); // Выставить необходимую скорость.
wifi_set_opmode(STATION_MODE); // Настройки ESP-NOW. Менять не требуется.
esp_now_init(); // Настройки ESP-NOW. Менять не требуется.
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); // Настройки ESP-NOW. Менять не требуется.
esp_now_register_recv_cb(onDataReceive); // Настройки ESP-NOW. Менять не требуется.
}
void loop()
{
while (Serial.available() > 0) // Если и пока поступают данные по UART крутим этот цикл:
{
char temp[1]; // Временная переменная для принятого байта.
Serial.readBytes(temp, 1); // Читаем байт из UART.
buffer[counter++] = temp[0]; // Добавляем его в буфер.
}
if (!counter) // Если нет принятых данных:
return; // Начинаем loop с начала.
esp_now_send(targetMAC, (byte *)&buffer, counter); // Отправляем пакет через ESP-NOW.
os_memset(&buffer, 0, sizeof(buffer)); // Обнуляем буфер.
counter = 0; // Обнуляем счетчик.
}