ESP32-C6 Tutorial: WiFi 6, Zigbee & Matter – Dein Einstieg ins Smart-Home-Board
WiFi, Bluetooth, Zigbee, Thread und Matter – bisher brauchtest du dafür mehrere Boards oder teure Gateways. Der ESP32-C6 packt alle diese Funkstandards auf einen einzigen RISC-V-Mikrocontroller mit USB-C. Damit baust du Sensoren, die direkt mit deiner Zigbee-Zentrale sprechen, oder Lampen, die sich per Matter in Apple Home, Google Home und Alexa einbinden lassen – ganz ohne Cloud und ohne Bastel-Bridge. In diesem Tutorial richtest du den C6 in der Arduino IDE ein und setzt vier Projekte um: WiFi-6-Verbindung, Zigbee-Temperatursensor, Matter-Lampe und Deep-Sleep für Batteriebetrieb.
Warum der ESP32-C6 ein besonderes Board ist
Der C6 ist Espressifs erster Chip mit WiFi 6 (802.11ax) und gleichzeitig einer der ersten Mikrocontroller überhaupt, der das 802.15.4-Funkprotokoll für Zigbee und Thread direkt an Bord hat. Statt der Xtensa-Kerne des klassischen ESP32 arbeitet hier ein 32-Bit-RISC-V-Kern mit 160 MHz – plus ein zweiter Low-Power-Kern für stromsparende Hintergrundaufgaben.
| Merkmal | ESP32 (Classic) | ESP32-C3 | ESP32-C6 |
|---|---|---|---|
| CPU | 2x Xtensa LX6, 240 MHz | 1x RISC-V, 160 MHz | 1x RISC-V 160 MHz + LP-Core |
| WiFi | WiFi 4 (802.11n) | WiFi 4 (802.11n) | WiFi 6 (802.11ax) |
| Bluetooth | BLE 4.2 + Classic | BLE 5.0 | BLE 5.3 |
| Zigbee / Thread (802.15.4) | – | – | ✔ integriert |
| Matter-fähig | über WiFi | über WiFi | über WiFi und Thread |
| USB | über USB-Seriell-Chip | nativ (USB-C) | nativ (USB-C) |
| Logikpegel | 3,3V | 3,3V | 3,3V |
ℹ️ Was bringt WiFi 6 am Mikrocontroller? Nicht mehr Speed für deinen Sketch, sondern Effizienz: Mit Target Wake Time (TWT) vereinbart der C6 mit dem Router feste Aufwachzeiten und schläft dazwischen – das senkt den Stromverbrauch batteriebetriebener IoT-Sensoren drastisch. Außerdem bleibt die Verbindung in vollen Funknetzen (viele Smart-Home-Geräte!) deutlich stabiler.
Was du brauchst
Arduino IDE einrichten
-
1Installiere über den Boardverwalter das Paket
esp32 by Espressif Systemsin Version 3.x oder neuer – erst ab 3.0 werden C6, Zigbee und Matter unterstützt. -
2Wähle unter Werkzeuge → Board den Eintrag
ESP32C6 Dev Module. - 3Aktiviere USB CDC On Boot: Enabled, damit der serielle Monitor über den USB-C-Port funktioniert.
- 4Für die Zigbee-Beispiele: Stelle Zigbee Mode: Zigbee ED (end device) und das Partition Scheme Zigbee 4MB with spiffs ein.
Verkabelung
| Modul-Pin | ESP32-C6 | Hinweis |
|---|---|---|
| DHT22 VCC | 3V3 | 3,3V reicht völlig |
| DHT22 DATA | GPIO 4 | 10 kΩ Pull-Up nach 3V3 |
| DHT22 GND | GND | |
| Relais IN | GPIO 10 | High-Level-Trigger |
| Relais VCC / GND | 5V / GND | 5V vom USB-Pin des Boards |
| Status-LED (+ 220 Ω) | GPIO 8 | Anode über Vorwiderstand |
Code 1: WiFi 6 verbinden und Netzwerke scannen
Der Einstieg fühlt sich an wie bei jedem ESP32 – die WiFi.h-API ist identisch. Der Unterschied passiert unter der Haube: Hängt der C6 an einem WiFi-6-Router, nutzt er automatisch OFDMA und TWT.
#include <WiFi.h>
const char* ssid = "DEIN_WLAN";
const char* passwort = "DEIN_PASSWORT";
void setup() {
Serial.begin(115200);
delay(1000);
// Umgebung scannen: welche Netze sind da?
Serial.println("Scanne Netzwerke...");
int n = WiFi.scanNetworks();
for (int i = 0; i < n; i++) {
Serial.printf("%2d: %-24s %4d dBm Kanal %2d\n",
i + 1, WiFi.SSID(i).c_str(),
WiFi.RSSI(i), WiFi.channel(i));
}
// Verbinden
WiFi.begin(ssid, passwort);
Serial.print("Verbinde");
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println();
Serial.print("Verbunden! IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
Serial.printf("Signalstaerke: %d dBm\n", WiFi.RSSI());
delay(5000);
}
Code 2: Zigbee-Temperatursensor mit DHT22
Jetzt wird es spannend: Der C6 meldet sich als echtes Zigbee-Endgerät an deiner Zentrale an (Home Assistant mit ZHA/Zigbee2MQTT, Hue Bridge & Co.) – so, als hättest du einen fertigen Funksensor gekauft. Installiere vorher die Bibliothek DHT sensor library von Adafruit. Denk an die Board-Einstellungen: Zigbee Mode: Zigbee ED und Partition Scheme Zigbee 4MB.
#include "Zigbee.h"
#include "DHT.h"
#define DHT_PIN 4
#define DHT_TYP DHT22
#define ENDPOINT_ID 10
#define BOOT_TASTE 9 // BOOT-Taste: gedrueckt halten = Reset der Kopplung
DHT dht(DHT_PIN, DHT_TYP);
ZigbeeTempSensor zbTempSensor = ZigbeeTempSensor(ENDPOINT_ID);
void setup() {
Serial.begin(115200);
pinMode(BOOT_TASTE, INPUT_PULLUP);
dht.begin();
zbTempSensor.setManufacturerAndModel("MAKEROO", "DHT22-Sensor");
zbTempSensor.setMinMaxValue(-40, 80); // Messbereich des DHT22
zbTempSensor.setTolerance(0.5);
Zigbee.addEndpoint(&zbTempSensor);
Serial.println("Starte Zigbee als End Device...");
if (!Zigbee.begin()) {
Serial.println("Zigbee-Start fehlgeschlagen! Neustart...");
ESP.restart();
}
while (!Zigbee.connected()) {
Serial.print(".");
delay(200);
}
Serial.println("\nMit Zigbee-Netzwerk verbunden!");
// Alle 30 s berichten, sofort bei Aenderung um 1 Grad
zbTempSensor.setReporting(1, 30, 1);
}
void loop() {
float temperatur = dht.readTemperature();
if (!isnan(temperatur)) {
zbTempSensor.setTemperature(temperatur);
Serial.printf("Temperatur: %.1f Grad C\n", temperatur);
}
// BOOT-Taste 3 s halten: Zigbee-Kopplung zuruecksetzen
if (digitalRead(BOOT_TASTE) == LOW) {
delay(3000);
if (digitalRead(BOOT_TASTE) == LOW) {
Serial.println("Factory Reset der Zigbee-Kopplung!");
Zigbee.factoryReset();
}
}
delay(10000);
}
ℹ️ Anlernen: Setze deine Zigbee-Zentrale in den Pairing-Modus (z. B. in Home Assistant: „Gerät hinzufügen") und starte dann den C6. Er taucht als Temperatursensor „MAKEROO DHT22-Sensor" auf – inklusive automatischer Messwert-Updates.
Code 3: Matter-Lampe – steuerbar mit Alexa, Google & Apple Home
Matter ist der herstellerübergreifende Smart-Home-Standard – und der C6 spricht ihn direkt aus der Arduino IDE. Dieses Beispiel macht aus dem Relais eine Matter-Lampe, die du per Sprachassistent oder Smartphone-App schaltest. Beim ersten Start gibt der Sketch einen Pairing-Code und eine QR-Code-URL im seriellen Monitor aus.
#include <Matter.h>
#include <MatterOnOffLight.h>
#include <WiFi.h>
const char* ssid = "DEIN_WLAN";
const char* passwort = "DEIN_PASSWORT";
#define RELAIS_PIN 10
MatterOnOffLight lampe;
bool lampeSchalten(bool an) {
digitalWrite(RELAIS_PIN, an ? HIGH : LOW);
Serial.printf("Lampe ist jetzt %s\n", an ? "AN" : "AUS");
return true; // Zustand erfolgreich uebernommen
}
void setup() {
Serial.begin(115200);
pinMode(RELAIS_PIN, OUTPUT);
WiFi.begin(ssid, passwort);
while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
Serial.println("\nWLAN verbunden.");
lampe.begin(false); // Startzustand: aus
lampe.onChange(lampeSchalten); // Callback bei Schaltbefehlen
Matter.begin();
if (!Matter.isDeviceCommissioned()) {
Serial.println("Geraet noch nicht gekoppelt. Kopplungsdaten:");
Serial.printf("Manueller Pairing-Code: %s\n",
Matter.getManualPairingCode().c_str());
Serial.printf("QR-Code-URL: %s\n",
Matter.getOnboardingQRCodeUrl().c_str());
}
}
void loop() {
// Matter laeuft im Hintergrund - hier ist nichts weiter noetig.
delay(500);
}
Öffne die QR-Code-URL am PC, scanne den Code mit Apple Home, Google Home oder der Alexa-App – fertig. Die Lampe lässt sich danach von allen Ökosystemen gleichzeitig steuern, komplett lokal und ohne Herstellercloud.
Code 4: Deep Sleep – der C6 im Batteriebetrieb
Für Batteriesensoren zählt jedes Milliampere. Im Deep Sleep zieht der C6 nur wenige Mikroampere – kombiniert mit kurzen Wachphasen laufen Sensoren so monatelang mit einem Akku-Pack.
#include <WiFi.h>
#include "DHT.h"
#define DHT_PIN 4
#define SCHLAF_SEKUNDEN 300 // alle 5 Minuten messen
DHT dht(DHT_PIN, DHT22);
void setup() {
Serial.begin(115200);
dht.begin();
delay(2000); // DHT22 braucht kurz nach dem Aufwachen
float t = dht.readTemperature();
float h = dht.readHumidity();
Serial.printf("Messung: %.1f Grad C, %.1f %% rF\n", t, h);
// Hier: Wert per WiFi/Zigbee senden, dann schlafen legen
Serial.println("Gehe in Deep Sleep...");
esp_sleep_enable_timer_wakeup((uint64_t)SCHLAF_SEKUNDEN * 1000000ULL);
esp_deep_sleep_start();
}
void loop() {
// wird nie erreicht - nach dem Aufwachen startet setup() neu
}
Praxistipps
📡 Zigbee oder Matter – was nehmen? Hast du bereits eine Zigbee-Zentrale (Home Assistant, Hue), ist der Zigbee-Weg am unkompliziertesten. Willst du dein Gerät ohne Zentrale direkt in Apple/Google/Alexa einbinden, nimm Matter über WiFi.
🔋 TWT nutzen: An einem WiFi-6-Router hält der C6 die Verbindung mit Target Wake Time auch zwischen Deep-Sleep-Phasen effizient – ideal in Kombination mit Code 4.
⚡ Stromversorgung: Funk-Peaks beim Senden erreichen kurzzeitig mehrere hundert Milliampere. Am Breadboard hilft ein Elko (470 µF) zwischen 3V3 und GND gegen sporadische Resets.
Troubleshooting
⚠️ „Zigbee.begin() failed": Fast immer falsche Board-Einstellungen. Prüfe Zigbee Mode: Zigbee ED und das Partition Scheme Zigbee 4MB with spiffs – ohne beides startet der Zigbee-Stack nicht.
⚠️ Serieller Monitor bleibt leer: USB CDC On Boot auf „Enabled" stellen und den Monitor nach dem Flashen neu öffnen.
⚠️ Sensor taucht in der Zigbee-Zentrale nicht auf: Pairing-Fenster der Zentrale öffnen, dann den C6 neu starten. Hilft das nicht: BOOT-Taste 3 Sekunden halten (Factory Reset im Code 2) und neu anlernen.
⚠️ Upload schlägt fehl: BOOT-Taste gedrückt halten, RESET kurz drücken, BOOT loslassen – dann ist der C6 im Download-Modus und der Upload läuft durch.
⚠️ Matter-Kopplung bricht ab: Der C6 funkt nur im 2,4-GHz-Band. Stelle sicher, dass dein Smartphone beim Koppeln im selben WLAN (2,4 GHz) hängt und nicht im reinen 5-GHz-Netz.
🚀 Bereit für dein Smart-Home-Projekt?
Alle Bauteile für dieses Tutorial findest du bei MAKEROO.
Fazit
Der ESP32-C6 ist das aktuell spannendste Board für Smart-Home-Bastler: WiFi 6 für effiziente, stabile Verbindungen, Zigbee für die nahtlose Integration in bestehende Zentralen und Matter für den direkten Draht zu Apple, Google und Alexa – alles auf einem Chip für wenige Euro. Mit den vier Beispielen aus diesem Tutorial hast du die komplette Bandbreite einmal durchgespielt: vom WLAN-Scan über den anlernbaren Zigbee-Sensor bis zur sprachgesteuerten Matter-Lampe und dem batteriefreundlichen Deep Sleep. Dein Smart Home gehört damit wieder dir – lokal, offen und selbst gebaut.