📌 Co je ESP‑NOW
ESP‑NOW je:
✔️ protokol pro krátké pakety dat (bez Wi‑Fi handshake)
✔️ peer‑to‑peer spojení mezi dvěma či více ESP32
✔️ lze používat bez routeru nebo přístupového bodu
✔️ podporuje šifrovanou i nešifrovanou komunikaci
✔️ až 250 bajtů dat na packet
Omezení:
❌ maximálně 10 šifrovaných peerů (v režimu Station)
❌ celkem méně než 20 peerů (šifrovaných i nešifrovaných)
❌ limit 250 B dat na jeden packet 👆
🔄 Typy komunikace s ESP‑NOW
🟡 Jednosměrná komunikace
- Jeden vysílač → jeden přijímač – nejjednodušší forma

- Master (vysílač) → více slave (přijímačů) – např. ovládání více zařízení

- Více vysílačů → jeden přijímač – sběr dat z různých senzorů

🔁 Dvousměrná komunikace
ESP‑NOW také umožňuje, aby každé zařízení bylo současně vysílač i přijímač. To znamená, že dvě (nebo více) ESP32 si mohou navzájem posílat data zároveň.

🧠 Jak ESP‑NOW funguje
ESP‑NOW používá MAC adresy každého ESP32 k identifikaci peerů (zařízení) a odesílání dat právě jim. Každé ESP32 má unikátní MAC adresu, kterou si musíš vypsat, aby sis věděl, kam data posílat.
🧾 Jak získat MAC adresu ESP32
V kódu si můžeš přečíst MAC adresu takto:
1#include <WiFi.h>
2#include <esp_wifi.h>
3
4void setup(){
5 Serial.begin(115200);
6 WiFi.mode(WIFI_STA);
7 uint8_t baseMac[6];
8 esp_wifi_get_mac(WIFI_IF_STA, baseMac);
9 Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
10 baseMac[0], baseMac[1], baseMac[2],
11 baseMac[3], baseMac[4], baseMac[5]);
12}
13
14void loop(){}Toto ti vypíše 6‑bytovou adresu, kterou pak použiješ při párování zařízení pro ESP‑NOW.
🛠️ Kroky v programu (ESP‑NOW)
✨ 1. Inicializace ESP‑NOW
Musíš nejprve zapnout Wi‑Fi (např. jako STA) a pak ESP‑NOW:
1WiFi.mode(WIFI_STA);
2esp_now_init();✨ 2. Přidání peeru
Peer (jiné ESP32) se musí “přidat”… tedy spárovat:
1esp_now_peer_info_t peerInfo = {};
2memcpy(peerInfo.peer_addr, broadcastAddress, 6);
3peerInfo.channel = 0;
4peerInfo.encrypt = false;
5esp_now_add_peer(&peerInfo);✨ 3. Odesílání dat
Data se posílají pomocí funkce:
1esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));✨ 4. Příjem dat
Na přijímači registruješ callback:
1esp_now_register_recv_cb(OnDataRecv);A callback vypadá třeba takto:
1void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
2 memcpy(&myData, incomingData, sizeof(myData));
3 Serial.println(myData.a);
4}To znamená, že když přijde packet, tato funkce se zavolá automaticky.
📌 Seznam nejčastěji používaných ESP‑NOW funkcí
➡️ esp_now_init() – inicializace protokolu
➡️ esp_now_add_peer() – párování s jiným zařízením
➡️ esp_now_send() – odeslání dat
➡️ esp_now_register_send_cb() – callback po odeslání
➡️ esp_now_register_recv_cb() – callback po přijetí dat
🧪 Praktický příklad: Point‑to‑Point
Vysílač (Sender):
✔ nastaví ESP‑NOW
✔ uloží MAC adresu
✔ vytvoří strukturu dat s proměnnými
✔ odešle tuto strukturu každých 2 s
Přijímač (Receiver):
✔ nastaví ESP‑NOW
✔ registruje callback pro příjem
✔ zobrazí přijatá data přes Serial Monitor
📡 Další info & experimenty
- Podle některých testů může ESP‑NOW udržet spojení až cca 220 m ve volném prostoru (bez překážek).
- Existují i pokročilejší implementace s automatickým párováním (bez ruční znalosti MAC adres).
- ESP‑NOW lze kombinovat s Wi‑Fi web‑serverem (např. dashboard pro data z více senzorů).
🏁 Shrnutí (overview)
ESP‑NOW je rychlý bezdrátový protokol pro komunikaci mezi ESP32 bez Wi‑Fi routeru. Ideální pro:
✅ IoT projekty
✅ dálkové ovládání
✅ sběr dat z více zařízení
✅ nízká latence
ESP‑NOW používá MAC adresy, má jednoduché API a je dostupný přímo v Arduino IDE prostředí.
