• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP-NOW test 2025

nikolz

Well-known member
Добрый день, Всем!!!
Написал такой тест.
Две ESP8266 (ESP1 и ESP2) обмениваются сообщениями по протоколу ESP-NOW следующим образом:
ESP1 ждет сообщение от ESP2.
ESP2 посылает широковещательное сообщение номер счетчика.
ESP1 принимает его и возвращает номер счетчика
ESP2 принимает ответ сравнивает с посланным номером и считает ошибки
При первом приеме ответа заменяет широковещательный адрес на адрес ESP1 и далее общается с ESP1
и так в цикле
-------------------------
И вот результат :
1745674949190.png

T - время обмена одним сообщением с подтверждением в мкс. Т е в среднем менее 1 ms.
В данный момент число сообщений (count) 794 тысячи. ошибок нет.
Сейчас число сообщений составляет более 1 млн. ошибок нет
 

aZholtikov

Active member
Не пробовали ESP-NOW V2 (ESP32 ESP-IDF v5.4 и выше) с максимальным пакетом 1490 байт?
Версия вышла относительно недавно, руки не доходят посмотреть... ;-)
 

pvvx

Активный участник сообщества
В данный момент число сообщений (count) 794 тысячи. ошибок нет.
Сейчас число сообщений составляет более 1 млн. ошибок нет
Разнесите устройства хотя-бы на 500 метров.
Тогда, или при других помехах, ESP-NOW должен перейти на другую модуляцию и алгоритмы. И никаких 1 мс не будет.

Ваши тесты двух устройств на одном столе не говорят ни о чем и в практике такое не используется.
Для ближней связи есть другие устройства и там задержки практически нет = время преодоления 1 метра светом туда-сюда :)
Есть и чипы для меж-платной коммуникации...
 

pvvx

Активный участник сообщества
Добрый день, Всем!!!
T - время обмена одним сообщением с подтверждением в мкс. Т е в среднем менее 1 ms.
Зачем так обманывать всех?
У вас строка в TerraTerm равна 40 символам UART. Это 40*10/115200=0.00347222 секунды. Т.е. от 3.5 мс только вывод в UART при 115200 Baud. :ROFLMAO: :p
А где "send to:" - там в три раза больше...
Т.е. вы перепутали счетчик времени - там миллисекунды - millis().
 

pvvx

Активный участник сообщества
DeepSeek: Какова длительность минимальной транзакции в ESP-NOW?

Длительность минимальной транзакции в **ESP-NOW** зависит от нескольких факторов, включая размер пакета, скорость передачи и условия среды. Вот ключевые аспекты:

### 1. **Скорость передачи данных**
- По умолчанию ESP-NOW использует скорость **1 Мбит/с** (для ESP32 и ESP8266) .
- В идеальных условиях (например, в экранированной среде) скорость может достигать **555 Кбит/с**, а в открытой среде — около **214 Кбит/с** .
- Скорость можно увеличить через API, например, до **2 Мбит/с** с помощью `esp_wifi_config_espnow_rate()` .

### 2. **Размер пакета**
- Минимальный полезный объём данных — **250 байт** (для ESP-NOW v1.0) или до **1532 байт** (для v2.0) .
- Заголовки MAC и служебные данные добавляют **24 байта** (MAC-заголовок) + **7–255 байт** (вендор-специфичные поля) .

### 3. **Расчёт длительности**
Для минимального пакета (например, 28 байт полезной нагрузки + заголовки):
- **При 1 Мбит/с**:
- Общий размер: ~60 байт (28 + 24 + 8 служебных).
- Время передачи: \( \frac{60 \times 8 \text{ бит}}{1 \times 10^6 \text{ бит/с}} = 0.48 \text{ мс} \).
- С учётом служебных задержек (ACK, обработка) общая длительность составит **1–2 мс** .

### 4. **Факторы, влияющие на задержку**
- **Помехи**: В условиях помех (например, через стены) время может увеличиваться из-за повторных передач .
- **Режим работы**: При одновременной работе Wi-Fi и ESP-NOW требуется совпадение каналов, что может добавлять задержки .
- **Шифрование**: Использование AES-CCM (для зашифрованных пакетов) увеличивает время обработки .

### 5. **Примеры из практики**
- В тестах передача структуры данных размером **60 байт** занимала **~1 мс** на расстоянии до 5–6 метров, но при увеличении расстояния до 7 метров возникали потери и задержки .
- Для аудиопотоков (85 КБ/с) задержки могут достигать **10–20 мс** из-за необходимости буферизации .

### Вывод
Минимальная длительность транзакции ESP-NOW в идеальных условиях составляет **около 1–2 мс** для небольших пакетов. Однако реальное время зависит от среды, расстояния и настроек скорости. Для критичных к задержкам приложений рекомендуется тестирование в целевых условиях .
 

pvvx

Активный участник сообщества
DeepSeek не умеет считать длительность передачи кадра WiFi :) Делит байты на битовую скорость, забывая про преамбулу и прочие синхросигналы...
Но фиг с ними.
Минимальная длительность кадра 802.11n составляет около 64 микросекунд. Там 20 мкс preamble.
Но ESP-NOW использует другую версию 802.11...

В итоге без всяких тупых ардуино либ можно получить транзакцию (туда-сюда) в 200 мкс. Но не в ESP-NOW.
 

pvvx

Активный участник сообщества
И не в ESP-IDF. Но тут ещё неизвестно время переключения RF между прем-передача. Для BLE чипов время переключения или включения с выбором канала типично менее 20 мкс (вместе с исполнением кода).
У ESP это наверно много больше... Тут ещё надо добавить время срабатывания АРУ, а у ESP оно ужасно.
 

pvvx

Активный участник сообщества
Какова длительность передачи минимального пакета BLE при PHY 2M?



Длительность передачи минимального пакета в Bluetooth Low Energy (BLE) при использовании PHY 2M (скорость 2 Мбит/с) зависит от структуры пакета и служебных заголовков. Рассмотрим расчёт по шагам:
1. Структура BLE-пакета (PHY 2M)
Минимальный пакет BLE включает:
  • Преамбула (Preamble)– 2 байта (16 бит)
    • Для PHY 2M используется 1-байтная преамбула, но из-за особенностей радиомодуля часто учитывается 2 байта.
  • Заголовок доступа (Access Address)– 4 байта (32 бита)
    • Фиксированное значение для соединения (например, 0x8E89BED6).
  • PDU (Protocol Data Unit)– минимум 6 байт (2 байта заголовка + 4 байта данных)
    • Заголовок PDU: 2 байта (тип пакета, длина и др.).
    • Полезная нагрузка: минимум 0 байт, но в реальных пакетах (например, LL_EMPTY_PDU) – 4 байта (CRC включается отдельно).
  • CRC (Cyclic Redundancy Check) – 3 байта (24 бита).
Итого размер пакета:
2 (Preamble)+4 (AA)+6 (PDU)+3 (CRC)=15 байт=120 бит2 (Preamble)+4 (AA)+6 (PDU)+3 (CRC)=15 байт=120 бит
2. Расчёт длительности передачи
При PHY 2M скорость передачи – 2 Мбит/с (1 бит = 0.5 мкс).
Длительность пакета:
120 бит2×106 бит/с=60 мкс2×106 бит/с120 бит=60 мкс
Но это только время передачи битов!
На практике добавляются:
  • Радиозадержки (~50–100 мкс на переключение Tx/Rx).
  • Inter-Frame Space (IFS) – 150 мкс (минимальный интервал между пакетами).
3. Реальная длительность транзакции
Для односторонней передачи (без ACK):
  • ~60 мкс (передача) + ~100 мкс (радиозадержки) ≈ 160 мкс.
Для двустороннего обмена (например, запрос-ответ):
  • Пакет 1: 60 мкс
  • IFS: 150 мкс
  • Пакет 2: 60 мкс
  • Радиозадержки: ~100 мкс
    Итого: ~370 мкс.
4. Сравнение с другими PHY
PHYСкоростьДлительность мин. пакета
1M1 Мбит/с~120 мкс
2M2 Мбит/с~60 мкс
Coded125 Кбит/с~1200 мкс
PHY 2M сокращает время передачи в 2 раза по сравнению с 1M, но требует более стабильного канала.
5. Ограничения
  • Минимальная полезная нагрузка – 0 байт (но в реальных пакетах обычно 4 байта).
  • Реальная пропускная способность ниже из-за IFS и служебных заголовков. Например, для пакетов 27 байт:
    Пропускная способность≈27 байт60 мкс+150 мкс≈1.28 Мбит/с.Пропускная способность≈60 мкс+150 мкс27 байт≈1.28 Мбит/с.
Вывод
Длительность передачи минимального BLE-пакета при PHY 2M составляет ~60 мкс (чистое время передачи битов) или ~160–370 мкс с учётом служебных задержек. Это самый быстрый режим BLE, но его устойчивость к помехам ниже, чем у PHY 1M.

---

Т.е. ESP-NOW нафиг не сдался, т.к. тормоз или малая дистанция. И при этом жуткое потребление..
 

pvvx

Активный участник сообщества
Каково время передачи события от конечного устройства в сети Zigbee с одним роутером?


Время передачи события от конечного устройства до координатора в сети Zigbee с одним роутером зависит от нескольких факторов, включая тип устройства, задержки маршрутизации и параметры сети. Вот основные аспекты:
1. Структура передачи данных
В сети Zigbee с одним роутером путь передачи выглядит так:
Конечное устройство → Роутер → Координатор
  • Конечное устройство (например, датчик) обычно находится в спящем режиме и активируется только для отправки данных.
  • Роутер (например, умная розетка) ретранслирует данные дальше.
  • Координатор (хаб) принимает и обрабатывает информацию.
2. Время передачи
Общее время складывается из:
  • Активация конечного устройства (пробуждение из сна): ~15 мс 4.
  • Передача данных от устройства к роутеру:
    • Скорость Zigbee (2.4 ГГц): 250 Кбит/с.
    • Минимальный пакет (например, датчика) — около 20 байт (заголовки + полезная нагрузка).
    • Время передачи: ~0.64 мс (20 байт × 8 бит / 250 000 бит/с).
  • Обработка и ретрансляция роутером: ~1–5 мс (зависит от загрузки сети).
  • Передача от роутера к координатору: аналогично, ~0.64 мс.
Итого:
  • Без учета задержек радиоэфира: ~2–10 мс (чистое время передачи).
  • С учетом реальных условий (помехи, очередь передачи): 10–100 мс 26.
3. Факторы, влияющие на задержку
  • Тип устройства: Датчики с батарейным питанием могут добавлять задержку из-за режима энергосбережения.
  • Помехи в эфире: Конкуренция с Wi-Fi/Bluetooth (2.4 ГГц) увеличивает время 7.
  • Нагрузка на роутер: Если он обслуживает много устройств, возможны очереди.
  • Дальность связи: При слабом сигнале возможны повторные передачи.
4. Пример из практики
Для датчика движения:
  • Пробуждение: 15 мс.
  • Передача на роутер: 1–5 мс.
  • Ретрансляция на хаб: 1–5 мс.
  • Общее время: 20–50 мс в идеальных условиях 48.
Вывод
В сети с одним роутером типичное время передачи события — 10–100 мс. Для критичных к задержкам систем (например, аварийных датчиков) рекомендуется минимизировать число роутеров и оптимизировать размещение устройств 36.

---

У альтернативной прошивки BLE время передачи события контакта через стандартный BLE маяк (с учетом времени пробуждения SoC) с приемом на другой модуль по 3-м каналам и коммутации вывода составило 5..7..9 мс. Измерено осциллографом - указан джиттер и основное среднее. Т.е. лампочка включается через 7..20 мс от нажатия кнопки. Тут учитывается питание лампы в 50Гц :)
 

pvvx

Активный участник сообщества
Аналогичная коммутация лампочки через HomeAssistant путем приема события по BLE и отправкой в WiFi "умную розетку" (без всяких Cloud) составляет от 120 мс минимально и до более 2.5 секунд.
Большие задержки всегда присущи WiFi, когда там всё занято - идет скачивание Смартом или другие нагрузки...
 

pvvx

Активный участник сообщества
Опять DeepSeek не учел некоторые нюансы.
Для датчика движения: Пробуждение: 15 мс.

Типовые IR чипы устанавливаемые в Zigbee/BLE/Wifi датчики имеют задержку в 1 секунду от начала появления изменений в приеме для фильтрации от 50Гц. Часто на них есть выводы для переключения этой задержки фильтрации или путем изменения сопротивления. Но добиться менее 50 мс не получается и не получится - будет срабатывать постоянно...
Так же вскользь упомянуто, что в Zigbee существует период опроса (общения с устройством) в 1 qt, равный 1/4 секунды. Меньше незя. А этот интервал уже превышает комфортные нормы времени действие-ответ/реакция для человека (статистическая норма до 250 мс, для Шумахера или игрунчика в комп.игры на порядки меньше :)).
 

nikolz

Well-known member
Опять DeepSeek не учел некоторые нюансы.
Для датчика движения: Пробуждение: 15 мс.

Типовые IR чипы устанавливаемые в Zigbee/BLE/Wifi датчики имеют задержку в 1 секунду от начала появления изменений в приеме для фильтрации от 50Гц. Часто на них есть выводы для переключения этой задержки фильтрации или путем изменения сопротивления. Но добиться менее 50 мс не получается и не получится - будет срабатывать постоянно...
Так же вскользь упомянуто, что в Zigbee существует период опроса (общения с устройством) в 1 qt, равный 1/4 секунды. Меньше незя. А этот интервал уже превышает комфортные нормы времени действие-ответ/реакция для человека (статистическая норма до 250 мс, для Шумахера или игрунчика в комп.игры на порядки меньше :)).
Пытался написать PDU кодер/декодер с помощью DeepSeek. Пишет , проверяет, и говорит что ошибок нет. Проверяю получаю ошибки. Но программы написаны красиво с комментарием. С каждым разом все больше и больше. но работающий вариант так и не получился. Причем каждый раз Deepseek улучшает и расширяет.
 

aZholtikov

Active member
Не пробовали ESP-NOW V2 (ESP32 ESP-IDF v5.4 и выше) с максимальным пакетом 1490 байт?
Версия вышла относительно недавно, руки не доходят посмотреть... ;-)
Сам отвечу на свой вопрос. 2 ESP32. Настройка на LR. Канал 6. Пакет 1490 байт. Расстояние около 600 метров (по линейке в Яндекс картах). Чистое поле. Прямая видимость. Модули расположены горизонтально, направление антенны к "оппоненту". Усиление по умолчанию. Время от передачи пакета до получения подтверждения от 35 до 50 мс.
 

pvvx

Активный участник сообщества
Сам отвечу на свой вопрос. 2 ESP32. Настройка на LR. Канал 6. Пакет 1490 байт. Расстояние около 600 метров (по линейке в Яндекс картах). Чистое поле. Прямая видимость. Модули расположены горизонтально, направление антенны к "оппоненту". Усиление по умолчанию. Время от передачи пакета до получения подтверждения от 35 до 50 мс.
50 мс на 1490 байт?
29800 байт в секунду всего?
---
Беспроводная мышка на 2.4ГГц (что-то из серии RF24 - ESB или FSK) лепит транзакции по 490 мкс.
1746966389823.png
(прием на СВЧ диод и щуп осла)
 

pvvx

Активный участник сообщества
Недавно лепил ESB протокол (в простонародии это RF24) на TLSR825x. Но отличие - размер пакета до полукилобайта..
И к сравнению выходит:

Для ESB установлены параметры по умолчанию:
• Number of retransmit: 5
• Retransmit delay: 150 us
• RxTimeout: 500 us
• RxSettle: 80 us
• TxSettle: 149 us

На графике показаны тестовые сигналы вывода в GPIO подготовки к передаче одного модуля и обработки приема другого модуля, плюс прием на СВЧ диод между модулями.
TX-RX 7 bytes
1746966772892.png
1852 транзакции (TX-ACK:RX) в секунду
12963 байта в секунду в одну сторону и 12963 байт (ACK) в секунду в другую.

При TX-RX 32 bytes
1746966787712.png
1250 транзакции (TX-ACK:RX) в секунду
40000 байт в секунду в одну сторону и 40000 байт (ACK) в секунду в другую.

Больший объем в одном пакете мне пока не был нужен. Требовалось уложиться в 1 mc на связь между модулями в обе стороны и соответствовать стандарту ESB/nRF24.
 

nikolz

Well-known member
Недавно лепил ESB протокол (в простонародии это RF24) на TLSR825x. Но отличие - размер пакета до полукилобайта..
И к сравнению выходит:

Для ESB установлены параметры по умолчанию:
• Number of retransmit: 5
• Retransmit delay: 150 us
• RxTimeout: 500 us
• RxSettle: 80 us
• TxSettle: 149 us
В устройствах серий nRF51 и nRF24L реализована аппаратная задержка в 130 мкс. Если соединение ESB устанавливается только между устройствами серий nRF52 и/или nRF53, эту задержку можно сократить до 40 мкс.
 
Сверху Снизу