# 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` (oder `ESP32C6 Dev Module`) * **USB-CDC On Boot:** Aktiviert (`Enabled`) ### Anpassung Passe vor dem Kompilieren in `main.cpp` die WLAN-Zugangsdaten an: ```cpp 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: ```text RTSP URL: rtsp://:8554/stream ``` --- ## Einbindung in BirdNET-Go 1. Web-Dashboard von **BirdNET-Go** öffnen (`http://:5069`). 2. Unter **Settings** -> **Audio / Input** einen neuen Stream anlegen: * **Stream-Name:** `ESP32-C6 Mikrofon` * **Stream-URL:** `rtsp://:8554/stream` * **Stream-Typ:** `RTSP` * **Protokoll:** `TCP` 3. Auf **Stream testen** klicken und speichern. --- ## Lokaler Test (VLC Media Player) Um den Stream unabhängig von BirdNET-Go zu verifizieren: 1. VLC öffnen -> `Strg + N` (Netzwerkstream öffnen). 2. URL eingeben: `rtsp://:8554/stream`. 3. Auf **Wiedergabe** klicken. Das Mikrofon überträgt die Umgebungsgeräusche in Echtzeit.