Gdy chcę dodać do projektu czujnik, przycisk albo sterowanie oświetleniem bez prowadzenia przewodów i bez stałego połączenia z Wi-Fi, połączenie ESP32 z Zigbee jest bardzo rozsądnym kierunkiem. Trzeba jednak wybrać właściwy układ, ponieważ nie każdy moduł ESP32 ma radio potrzebne do obsługi tego standardu. Poniżej pokazuję, czym różnią się ESP32-H2 i ESP32-C6, jak uruchomić urządzenie, jakie role może pełnić w sieci oraz gdzie pojawiają się typowe problemy.
Najważniejsze decyzje przed rozpoczęciem projektu
- ESP32-H2 obsługuje Zigbee i Bluetooth LE, ale nie ma Wi-Fi.
- ESP32-C6 łączy Wi-Fi 6, Bluetooth LE oraz radio 802.15.4 używane przez Zigbee.
- Klasyczne moduły ESP32, ESP32-C3 i ESP32-S3 nie mają natywnego Zigbee.
- Do programowania najlepiej użyć ESP-IDF i ESP Zigbee SDK.
- Urządzenie musi działać jako koordynator, router albo energooszczędny end device.
- Najczęstsze błędy wynikają z braku koordynatora, złego targetu układu i zapisanej konfiguracji NVRAM.
Co naprawdę daje połączenie ESP32 z Zigbee
Zigbee to bezprzewodowy standard dla urządzeń o niewielkim poborze energii, działający w paśmie 2,4 GHz i wykorzystujący topologię kratową. W praktyce oznacza to, że czujnik temperatury, przycisk lub włącznik może komunikować się z innymi urządzeniami bez przesyłania każdej informacji przez domowy router Wi-Fi.
Największą różnicę widać przy urządzeniach bateryjnych. Moduł nie musi utrzymywać aktywnego połączenia z siecią Wi-Fi, dlatego może okresowo wybudzać mikrokontroler, wysłać pomiar i wrócić do uśpienia. Z kolei urządzenia zasilane stale mogą działać jako routery Zigbee, czyli przekazywać pakiety dalej i poprawiać zasięg całej sieci.
Trzeba też rozdzielić dwie rzeczy. ESP32 odpowiada za logikę aplikacji, obsługę czujnika, wyświetlacza czy przekaźnika, a Zigbee zapewnia warstwę komunikacji. Samo radio nie wystarczy, ponieważ urządzenie musi jeszcze korzystać z odpowiedniego profilu i klastrów ZCL. ZCL, czyli Zigbee Cluster Library, definiuje między innymi funkcje włącznika, lampy, czujnika temperatury i zamka.
W dokumentacji Espressif obecny SDK obsługuje Zigbee 3.0, profile Home Automation, role koordynatora, routera i end device oraz przykłady bramy sieciowej. To dobry punkt wyjścia, ale nie oznacza, że każda płytka z napisem ESP32 będzie gotowa do pracy z tym standardem.
ESP32-H2 czy ESP32-C6 do projektu Zigbee
Najważniejszy etap zaczyna się jeszcze przed instalacją środowiska programistycznego. Niewłaściwy wybór mikrokontrolera może sprawić, że projekt będzie wymagał dodatkowego układu radiowego albo dwóch osobnych modułów.
| Układ | Łączność | Najlepsze zastosowanie | Ograniczenie |
|---|---|---|---|
| ESP32-H2 | Zigbee, Thread, Bluetooth LE | Czujniki bateryjne, przyciski, proste urządzenia Zigbee | Brak Wi-Fi |
| ESP32-C6 | Wi-Fi 6, Zigbee, Thread, Bluetooth LE | Bramy, urządzenia hybrydowe i węzły wymagające Wi-Fi | Większa złożoność konfiguracji radiowej |
| ESP32, C3, S2, S3 | Głównie Wi-Fi i Bluetooth, zależnie od modelu | Logika aplikacji współpracująca z zewnętrznym radiem | Brak natywnego 802.15.4 |
ESP32-H2 wybrałbym do prostego czujnika otwarcia, przycisku lub termometru zasilanego bateryjnie. Jest skoncentrowany na komunikacji 802.15.4 i nie płaci się w nim za Wi-Fi, którego urządzenie może w ogóle nie potrzebować.
ESP32-C6 ma więcej możliwości, bo może łączyć urządzenia Zigbee z aplikacją działającą przez Wi-Fi. Trzeba jednak pamiętać, że Wi-Fi i Zigbee korzystają z tego samego pasma. Przy intensywnej komunikacji równoległej mogą pojawić się zakłócenia, dlatego w bardziej wymagających bramach często stosuje się osobny układ radiowy RCP.
Klasyczny ESP32 nadal może być częścią rozwiązania, ale nie jako samodzielny nadajnik Zigbee. Przykładowa brama może składać się z ESP32-S3 odpowiedzialnego za Wi-Fi i aplikację oraz ESP32-H2 pracującego jako Radio Co-Processor. Te układy wymieniają dane przez UART, a główny mikrokontroler zarządza logiką całego systemu.

Jak uruchomić urządzenie krok po kroku
Do pierwszych eksperymentów potrzebne są dwie płytki deweloperskie albo jedna płytka i działający koordynator Zigbee. Najprostszy układ testowy to ESP32-H2 lub ESP32-C6 z diodą LED oraz drugi węzeł, który będzie koordynatorem sieci.
Przygotowanie środowiska
Oficjalna ścieżka prowadzi przez ESP-IDF, czyli środowisko programistyczne Espressif dla układów ESP32. Do obsługi protokołu służy ESP Zigbee SDK. Aktualna dokumentacja SDK wskazuje wersję ESP-IDF 5.5.4 jako zalecaną dla bieżącej gałęzi, ale przed rozpoczęciem projektu produkcyjnego sprawdziłbym jeszcze plik zgodności dla wybranego układu.
Przydatne polecenia wyglądają następująco:
idf.py set-target esp32h2
idf.py build
idf.py -p PORT flash monitor
Dla ESP32-C6 zmienia się jedynie cel kompilacji na esp32c6. Nie kopiowałbym bezmyślnie przykładu dla innego układu, ponieważ różnią się dostępne peryferia, pamięć, ustawienia radia i sposób współdzielenia zasobów.
Konfiguracja aplikacji Zigbee
W kodzie trzeba określić między innymi rolę urządzenia, identyfikator endpointu, obsługiwane klastry oraz sposób reakcji na odebrane komendy. Dla lampy będzie to zwykle klaster On/Off, dla czujnika temperatury klaster Measurement and Sensing, a dla przycisku odpowiedni profil urządzenia sterującego.
W pierwszym projekcie polecam zacząć od przykładu włącznika i lampy. Taki układ szybko pokazuje cały przepływ danych: koordynator tworzy sieć, przycisk dołącza do niej, wysyła komendę, a drugi węzeł zmienia stan wyjścia. Najpierw warto uruchomić gotowy przykład, a dopiero potem wymieniać LED na przekaźnik, czujnik lub własny moduł wejściowy.
Tworzenie i dołączanie do sieci
Koordynator wybiera kanał, ustawia parametry sieci i zezwala innym urządzeniom na dołączenie. End device wyszukuje dostępną sieć, przechodzi proces parowania i zapisuje dane potrzebne do ponownego połączenia po restarcie.
Jeżeli płytka była wcześniej używana w innym projekcie, przed kolejną próbą często trzeba wyczyścić pamięć nieulotną:
idf.py -p PORT erase-flash
Kasowanie pamięci nie powinno być pierwszą reakcją na każdy problem, ponieważ usuwa także zapisane dane sieciowe. Przy zmianie koordynatora, kanału lub klucza bezpieczeństwa jest jednak bardzo często potrzebne. W przeciwnym razie urządzenie może próbować dołączyć do starej sieci, mimo że w kodzie ustawiono już nowe parametry.
Koordynator, router i end device
Te trzy role decydują o zachowaniu urządzenia w sieci. Początkujący często skupiają się na kodzie obsługi czujnika, a pomijają fakt, że ta sama płytka może wymagać zupełnie innej konfiguracji zależnie od wybranej roli.
| Rola | Co robi | Zasilanie | Przykład |
|---|---|---|---|
| Koordynator | Tworzy sieć i zarządza dołączaniem urządzeń | Zwykle stałe | Centralny adapter dla systemu automatyki |
| Router | Przekazuje pakiety i zwiększa zasięg sieci | Stałe | Gniazdko, lampa lub moduł przekaźnikowy |
| End device | Wysyła i odbiera dane, ale nie routuje ruchu | Bateryjne lub stałe | Czujnik temperatury, zalania albo otwarcia |
Koordynator nie musi być najmocniejszym urządzeniem, ale powinien mieć stabilne zasilanie i dobre warunki radiowe. Router powinien być stale dostępny, ponieważ urządzenia bateryjne mogą przez niego przekazywać dane. End device może zasypiać, dzięki czemu zużywa znacznie mniej energii.
W systemie z Home Assistant własny moduł ESP32 może działać jako urządzenie końcowe, natomiast do zarządzania siecią potrzebny jest kompatybilny koordynator. Zbudowanie pełnej bramy na ESP32-C6 jest możliwe, ale wymaga większej pracy niż zaprogramowanie pojedynczego czujnika. Oficjalny przykład bramy Espressif wykorzystuje często główny układ Wi-Fi oraz osobny ESP32-H2 jako radio 802.15.4.
To rozdzielenie ma sens praktyczny. Aplikacja może korzystać z Wi-Fi, aktualizacji OTA i interfejsu sieciowego, podczas gdy drugi układ zajmuje się przewidywalną obsługą Zigbee. W prostym urządzeniu domowym taki podział byłby przesadą, ale w bramie obsługującej wiele urządzeń daje większy margines bezpieczeństwa.
Zastosowania, które mają sens
Najlepsze projekty wykorzystują Zigbee tam, gdzie liczy się mały pobór energii, lokalne działanie i komunikacja z wieloma urządzeniami. Nie próbowałbym zastępować Wi-Fi Zigbee w kamerze, głośniku czy urządzeniu przesyłającym duże pliki. Ten standard został stworzony do krótkich komunikatów sterujących i pomiarowych.
Czujnik temperatury i wilgotności
ESP32-H2 może odczytywać dane z czujnika, wysyłać je co kilka minut i pozostawać w uśpieniu przez większość czasu. Największą pracę projektową stanowi tu nie samo mierzenie temperatury, lecz dobre ustawienie interwału raportowania i obsługi ponownego dołączenia do sieci.
Przycisk bezprzewodowy
Przycisk Zigbee wysyła krótką komendę po naciśnięciu, dlatego nie potrzebuje dużej przepustowości. Warto rozróżnić pojedyncze kliknięcie, podwójne kliknięcie i przytrzymanie, ale nie należy wysyłać zbyt wielu komunikatów podczas drgania styków. Debouncing, czyli programowe filtrowanie przypadkowych zmian stanu, ma tu bezpośredni wpływ na wygodę użytkowania.
Lampa lub moduł przekaźnikowy
Urządzenie zasilane z sieci może pełnić funkcję routera, a jednocześnie realizować sterowanie oświetleniem. Przy pracy z napięciem 230 V trzeba jednak oddzielić część niskonapięciową od sieciowej, zastosować odpowiednią obudowę i przekaźnik o parametrach dopasowanych do obciążenia. Radio Zigbee nie eliminuje wymagań bezpieczeństwa elektrycznego.
Przeczytaj również: Czujniki Arduino - Jak wybrać i podłączyć? Poradnik dla początkujących
Prosty most między Wi-Fi a Zigbee
ESP32-C6 może zbierać dane z sieci Zigbee i udostępniać je przez Wi-Fi. To ciekawy projekt edukacyjny, lecz warto od początku zdecydować, czy potrzebny jest własny most, czy wystarczy gotowy koordynator współpracujący z Home Assistant. Własne rozwiązanie daje kontrolę nad formatem danych, ale oznacza też samodzielną obsługę aktualizacji, parowania i błędów sieci.
Co najczęściej nie działa i dlaczego
Jeśli urządzenie nie pojawia się w sieci, najpierw sprawdziłbym rolę obu stron. Dwa end device nie utworzą samodzielnie sieci, a sama płytka z ESP32-H2 nie zastąpi koordynatora, jeżeli nie została tak skonfigurowana.
- Zły target kompilacji powoduje błędy budowania albo nieprawidłowe działanie radia.
- Stare dane NVRAM mogą kierować moduł do poprzedniej sieci.
- Niepasujący endpoint lub klaster sprawia, że urządzenie jest widoczne, ale nie reaguje na komendy.
- Zakłócenia Wi-Fi mogą pogarszać stabilność komunikacji w paśmie 2,4 GHz.
- Słabe zasilanie prowadzi do losowych restartów podczas nadawania.
- Zła antena lub metalowa obudowa potrafi ograniczyć zasięg bardziej niż sama moc nadajnika.
Nie zaczynałbym od zwiększania mocy nadajnika. Najpierw ustawiłbym urządzenia w rozsądnej odległości, sprawdził kanał sieci, jakość zasilania i logi portu szeregowego. W sieci kratowej stabilny router ustawiony w dobrym miejscu zwykle daje więcej niż agresywne ustawienia radiowe.
Trzeba również pamiętać, że zasięg Zigbee nie jest jedną stałą liczbą. Zależy od ścian, zbrojenia, obudowy, położenia anteny i liczby routerów. W mieszkaniu ważniejsze od deklarowanego zasięgu modułu bywa rozmieszczenie kilku urządzeń zasilanych stale.
Jak podejść do projektu, żeby nie utknąć
Ja zaczynam od minimalnego celu: jeden przycisk, jedna dioda i jedna komenda On/Off. Dopiero gdy parowanie, ponowne uruchomienie i zapis stanu działają poprawnie, dodaję czujniki, tryb uśpienia i aktualizację firmware.
Do prototypu najlepiej użyć oficjalnej płytki ESP32-H2 lub ESP32-C6 oraz przykładu z ESP Zigbee SDK. Pozwala to odsunąć na później problemy z własnym PCB, anteną i zasilaniem. W produkcji trzeba już sprawdzić certyfikację, bezpieczeństwo kluczy, zachowanie po utracie koordynatora i aktualizacje oprogramowania.
Najkrótsza droga wygląda tak: wybierz układ z 802.15.4, uruchom gotowy przykład, skonfiguruj właściwą rolę, wyczyść pamięć po zmianie sieci, a potem dodawaj własną logikę małymi krokami. ESP32-H2 będzie zwykle lepszy dla energooszczędnego węzła, a ESP32-C6 dla projektu łączącego Zigbee z Wi-Fi.
Dobry punkt startu dla własnego urządzenia
Jeżeli celem jest nauka, zacząłbym od dwóch płytek i prostego sterowania diodą. Jeżeli budujesz czujnik bateryjny, wybierz ESP32-H2, ogranicz częstotliwość raportowania i zaplanuj sen mikrokontrolera. Gdy potrzebujesz bramy lub lokalnego mostu z siecią IP, rozważ ESP32-C6 albo układ Wi-Fi współpracujący z osobnym radiem H2.
Najważniejsza decyzja nie dotyczy samego modelu ESP32, lecz roli urządzenia i sposobu zasilania. Dobrze dobrana topologia, poprawne klastry oraz stabilny koordynator sprawiają, że Zigbee działa cicho w tle, czyli dokładnie tak, jak powinno działać dobre rozwiązanie automatyki domowej.