BirdNet-goMikrofon/README.md
2026-09-22 19:27:32 +02:00

80 lines
No EOL
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.