ESP-Now: jak to funguje, k čemu se hodí a jak ho použít v praxi

Stručně: ESP-Now je protokol od Espressif pro přímou komunikaci mezi zařízeními ESP8266 a ESP32 bez Wi-Fi routeru. Spojení trvají jednotky millisekund, což ho dělá ideálním pro bateriové senzory s deep sleep. Zpráva může mít max 250 bytů, protokol podporuje peer-to-peer i broadcast a běží paralelně s normálním Wi-Fi připojením.


Zdroj obrázku: randomnerdtutorials.com

Popularita ESP8266 a ESP32 stále stoupá a není divu — díky čipu za pár korun dokážete své zařízení připojit do internetu během několika chvil. Ale co když router nemáte po ruce, nebo potřebujete, aby senzory komunikovaly přímo mezi sebou bez připojení ke střednímu bodu?

Pro takové situace je tu ESP-Now — protokol přímo od Espressif, který umožňuje rychlou a energeticky úspornou komunikaci mezi zařízeními ESP8266 a ESP32 bez Wi-Fi routeru.

Co ESP-Now umí

ESP-Now pracuje na úrovni vrstvy 2 (linková vrstva) — zařízení se naváží přímo podle MAC adres, bez DHCP, bez hesla, bez routeru. Spojení se nastaví jednou a pak už žádný handshake neprobíhá. Výsledek? Několik millisekund od probouzení z deep sleep po odeslání paketu a návrat zpět.

Hlavní vlastnosti:

  • Max 250 bytů na zprávu
  • Podporuje šifrovanou i nešifrovanou komunikaci
  • Jednosměrná i obousměrná komunikace
  • Režim peer-to-peer (jeden na jeden) nebo broadcast (jeden na všechny)
  • 20 šifrovaných peerů, 250 nešifrovaných
  • Funguje paralelně s běžným Wi-Fi připojením

Kdy se to hodí? Typicky pro baterijové senzory, které se probudejí z deep sleep, odměří hodnotu, odešlou jí na centrální ESP a jdou zpět spát. HTTP nebo MQTT spojení nad Wi-Fi na tohle není vhodné — trvají až několik sekund a samotné připojení k routeru spotřebuje zbytečně energii.

Jednoduchý příklad: sender a receiver

Potřebujete znát MAC adresu přijímajícího zařízení. Zjistíte ji jednoduchým programem:

#include <WiFi.h>
void setup() {
  Serial.begin(115200);
  Serial.println(WiFi.macAddress());
}
void loop() {}

Sender — odešle jednoduchou zprávu:

#include <esp_now.h>
#include <WiFi.h>

uint8_t receiverMac[] = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; // MAC přijímače

typedef struct Message {
  float teplota;
  float vlhkost;
} Message;

Message data;

void onSent(const uint8_t *mac, esp_now_send_status_t status) {
  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "OK" : "FAIL");
}

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  esp_now_init();
  esp_now_register_send_cb(onSent);

  esp_now_peer_info_t peer = {};
  memcpy(peer.peer_addr, receiverMac, 6);
  peer.channel = 0;
  peer.encrypt = false;
  esp_now_add_peer(&peer);

  data.teplota = 23.5;
  data.vlhkost = 61.2;
  esp_now_send(receiverMac, (uint8_t*)&data, sizeof(data));
}

void loop() {}

Receiver — přijme a vypíše data:

#include <esp_now.h>
#include <WiFi.h>

typedef struct Message {
  float teplota;
  float vlhkost;
} Message;

void onReceive(const uint8_t *mac, const uint8_t *data, int len) {
  Message msg;
  memcpy(&msg, data, sizeof(msg));
  Serial.printf("Teplota: %.1f, Vlhkost: %.1fn", msg.teplota, msg.vlhkost);
}

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  esp_now_init();
  esp_now_register_recv_cb(onReceive);
}

void loop() {}

Struktura zprávy musí být na obou stranách naprosto stejná. Pokud posíláte jiná data než přijímáte, dostanete nesmysly.

Broadcast: jeden odešle, všichni přijmou

Broadcast je jednoduchý — místo konkrétní MAC adresy použijete broadcastovou FF:FF:FF:FF:FF:FF:

uint8_t broadcastMac[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

Broadcast zprávy nejsou šifrovány a nepotvrzují se — sender neví, kdo zprávy přijal. Pro jednosměrný přenos senzorových dat to ale vadí málo.

Tipy a běžné chyby

  • Wi-Fi channel musí souhlasit — pokud je sender připojen k routeru a přijímač ne, kanály se mohou lišit. Receiver nastavíte na konkrétní kanál: WiFi.channel().
  • Nezapomeňte na WiFi.mode(WIFI_STA) před esp_now_init(). Bez toho inicializace selže.
  • Velikost struktury: max 250 bytů. Pro větší data použijte více zpráv nebo přenášejte index + chunk.
  • ESP8266 a ESP32 spolu komunikují, ale API se mírně liší — na ESP8266 používáte espnow.h z SDK, ne esp_now.h.

Kam dál

ESP-Now zvládně i složitější topologie — gateway režim, kde jeden ESP přijímá data ze všech sensorů a přepisuje je dál přes MQTT do Home Assistant nebo na TMEP.cz. To už je materiál na samostatný článek.

S těmito základy máte funkční obousměrnou komunikaci mezi dvěma ESP zařízeními do pěti minut.

Oficiální dokumentace Espressif: https://www.espressif.com/en/products/software/esp-now/overview
Praktický návod (EN): randomnerdtutorials.com/esp-now-esp32-arduino-ide

Sdílejte článek:
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku

Související články

Hotový projekt domácího měření kvality vzduchu s podporou Home Assistant

Projekt měření kvality vzduchu v domácnosti, kanceláři nebo škole založený kompletně na open-source produktech navíc s podporou domácí automatizace – Home Assistant. Komplexní rozbor kvality vzduchu na základě měření pevných částic, koncentrace CO2, teploty, vlhkosti, NOx a VOC indexu kvality…

Vytvořit informační displej pro ESPHome není úplně jednoduchá zábava. Každá změna znamená úpravu YAMLu, nahrání do zařízení a čekání, jestli to konečně vypadá tak, jak jste chtěli. Přesně tohle se snaží řešit nástroj ESPHome Designer.

3D tištěná krabička pro meteostanici se senzorem SEN55 a MeteoMini nebo AirBoard

Článek by se mohl jmenovat „Jak jsem vymazlil vymazlenou 3D tištěnou krabičku s radiačním štítem pro meteostanici pro senzor SEN5x a řídící desku Air Board“. A přesně to by vystihlo mé úsilí. Tuto krabičku jsem totiž vylepšil o prostor pro…

ESPHome 2025.8.0 přináší zásadní novinky v podpoře hardwaru a významná vylepšení výkonu i optimalizace paměti. Tato aktualizace, vydaná 20. srpna 2025, rozšiřuje možnosti platformy zejména díky podpoře nových zařízení, podpoře ESP-NOW, rychlejší práci s řetězci, redukcí duplicitního kódu a čekání.

Lukáš Beran (web, linkedin, google+, twitter, facebook) mi poslal svůj návod, jak zprovoznit Zigbee2MQTT do Domoticz a ovládat tak nejrůznější zařízení.

Trendy