diff --git a/README.md b/README.md new file mode 100644 index 0000000..a408da1 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +# 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. \ No newline at end of file