3.1 KiB
3.1 KiB
ESP32-C6 RTSP Audio Streamer für BirdNET-Go
Dieses Repository enthält die Firmware für einen autarken RTSP-Audiostreamer auf Basis des Seeed Studio XIAO ESP32-C6 und eines I2S-MEMS-Mikrofons (ICS-43434).
Der Streamer erfasst Audio mit 48 kHz / 16 Bit Mono und stellt es als standardkonformen RTSP/RTP-Stream bereit, der direkt von BirdNET-Go (z. B. im Docker-Container auf einem NAS) oder VLC verarbeitet werden kann.
Features
- Direktes I2S-DMA-Sampling: Nutzt den Treiber
driver/i2s_std.h(ESP-IDF 5.x) für unterbrechungsfreie Audioaufnahme ohne CPU-Spikes. - RFC 3550 L16 Standard: Skalierung von 32-Bit-I2S-Rohdaten auf 16-Bit-PCM inklusive Konvertierung in Big-Endian (Network Byte Order).
- TCP-Interleaved RTP: Erzwingt RTSP-Streaming über TCP (Port 8554), wodurch Verbindungsprobleme durch Docker-NAT-Bridges oder blockierte UDP-Ports umgangen werden.
- Low-Latency Wi-Fi: Deaktivierter Modem-Sleep (
WiFi.setSleep(false)) verhindert zyklische Ping-Latenzen und Pufferüberläufe.
Hardware & Pinbelegung
Komponenten
- MCU: Seeed Studio XIAO ESP32-C6 (mit externer 2,4-GHz-Stabantenne)
- Mikrofon: TDK InvenSense ICS-43434 (I2S MEMS, Bottom-Port)
Verdrahtung
| Mikrofon | XIAO ESP32-C6 Pin | GPIO | Beschreibung |
|---|---|---|---|
| VDD | 3V3 | – | Versorgungsspannung (3,3 V – niemals an 5 V!) |
| GND | GND | – | Masse |
| L/R | GND | – | Kanalwahl (GND = linker Slot / I2S_STD_SLOT_LEFT) |
| SCK / BCLK | D0 | GPIO 0 | I2S Bit Clock |
| WS / LRCLK | D1 | GPIO 1 | I2S Word Select (Sample-Takt 48 kHz) |
| SD / DOUT | D2 | GPIO 2 | I2S Serial Data Out -> DIN |
Wichtig: Die externe 2,4-GHz-Antenne am U.FL-Anschluss des XIAO ESP32-C6 muss zwingend aufgesteckt sein, um Paketverlust und Verbindungsabbrüche im WLAN zu vermeiden.
Konfiguration & Flashen
Voraussetzungen
- Arduino IDE (mit installiertem ESP32-Boardpaket >= 3.0.0) oder PlatformIO
- Boardauswahl:
Seeed Studio XIAO ESP32-C6(oderESP32C6 Dev Module) - USB-CDC On Boot: Aktiviert (
Enabled)
Anpassung
Passe vor dem Kompilieren in main.cpp die WLAN-Zugangsdaten an:
const char* ssid = "DEINE_SSID";
const char* password = "DEIN_WLAN_PASSWORT";
Nach dem erfolgreichen Flashen gibt der serielle Monitor (115200 Baud) die RTSP-URL aus:
RTSP URL: rtsp://<ESP32-IP>:8554/stream
Einbindung in BirdNET-Go
- Web-Dashboard von BirdNET-Go öffnen (
http://<NAS-IP>:5069). - Unter Settings -> Audio / Input einen neuen Stream anlegen:
- Stream-Name:
ESP32-C6 Mikrofon - Stream-URL:
rtsp://<ESP32-IP>:8554/stream - Stream-Typ:
RTSP - Protokoll:
TCP
- Stream-Name:
- Auf Stream testen klicken und speichern.
Lokaler Test (VLC Media Player)
Um den Stream unabhängig von BirdNET-Go zu verifizieren:
- VLC öffnen ->
Strg + N(Netzwerkstream öffnen). - URL eingeben:
rtsp://<ESP32-IP>:8554/stream. - Auf Wiedergabe klicken. Das Mikrofon überträgt die Umgebungsgeräusche in Echtzeit.