Otevře se na nové kartě

ESP-NOW: komunikace ESP32 a ESP8266 bez Wi-Fi routeru

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.

Schéma přímé komunikace ESP-NOW mezi čtyřmi deskami ESP32 nebo ESP8266
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)
  • Až 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:
Tričko Chiptron s potiskem Trust me, I'm a maker
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku
Buy Me a Coffee

Související články

Různé vývojové desky s čipy ESP32 – srovnání variant

ESP32, S2, S3, C3, C6, H2, C5, P4 i chystaný S31 – který čip vybrat pro váš projekt? Srovnávací tabulka periferií, rozhodovací strom podle use-case, přehled softwarových platforem a tipy, kde koupit vývojové desky v Česku.

Ruka drží modul ESP32-C3F před obrazovkou s prostředím Arduino IDE

Plánujete vylepšit zařízení novějším Wi-Fi modulem s ESP32-C3 namísto staršího a slabšího modulu s ESP8266? Ač je ESP32-C3F (s ESP32-C3) rozměrově kompatibilní s ESP12F (s ESP8266), záměna není tak jednoduchá – prostá výměna modulů.

Vývojový kit ESP32-C3-DevKitM-1 stojící na tmavém podkladu

Přišel mi engineering sample vývojového kitu ESP32-C3-DevKitM-1.

Vývojové desky ESP32 na stole před monitorem s otevřeným zdrojovým kódem

S čipy ESP32 lze zažít spoustu legrace a vymyslet/vytvořit spoustu zajímavých projektů.

Logo CHIPTRON s grafickým motivem elektronické desky

Narazil jsem na dva zajímavé návody, oba se zabývají ESP8266. První článek je o ESP8266 WiFi repeater/extender a druhý návod, jak rozchodit čidlo teploty/vlhkosti DHT11 s NodeMCU (ESP12E). První návod, jak vytvořit WiFi expander/repeater, je popsán velmi podrobně a zprovoznění…

Logo ESPHome s nápisem ESPHome 2025.8.0 – 20. srpna 2025

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í.

Trendy