80 lines
3.1 KiB
Markdown
80 lines
3.1 KiB
Markdown
|
|
# 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.
|