This commit is contained in:
Jannis 2026-09-22 19:27:32 +02:00
parent 21c6884873
commit cb97174697

80
README.md Normal file
View file

@ -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://<ESP32-IP>:8554/stream
```
---
## Einbindung in BirdNET-Go
1. Web-Dashboard von **BirdNET-Go** öffnen (`http://<NAS-IP>:5069`).
2. 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`
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://<ESP32-IP>:8554/stream`.
3. Auf **Wiedergabe** klicken. Das Mikrofon überträgt die Umgebungsgeräusche in Echtzeit.