87 lines
No EOL
4.4 KiB
Markdown
87 lines
No EOL
4.4 KiB
Markdown
# ESP32-WROOM-32U HTTP Audio Streamer für BirdNET-Go
|
||
|
||
Dieses Repository enthält die Firmware für einen autarken HTTP-WAV-Audiostreamer auf Basis eines **ESP32-WROOM-32U DevKits** (mit externer Antenne) und eines I2S-MEMS-Mikrofons (z. B. INMP441 oder ICS-43434).
|
||
|
||
Der Streamer erfasst Audio mit 48 kHz / 16 Bit Mono und stellt es über einen unterbrechungsfreien HTTP-Webserver direkt im Netzwerk bereit. Dieser Stream kann nativ von **BirdNET-Go** (z. B. im Docker-Container auf einem NAS) oder im Browser/VLC verarbeitet werden.
|
||
|
||
---
|
||
|
||
## Features
|
||
|
||
* **HTTP WAV Streaming:** Direkte, standardkonforme Bereitstellung der Rohdaten über HTTP (Port 80) ohne Overhead durch komplexe RTSP-Protokolle.
|
||
* **Asynchrones Dual-Core Processing:** Nutzt die mächtige [arduino-audio-tools](https://github.com/pschatzmann/arduino-audio-tools) Bibliothek. Das Auslesen des Mikrofons und das Senden über WLAN laufen asynchron. Das verhindert TCP-Fragmentierung und eliminiert Audio-Aussetzer ("schwarze vertikale Balken") im BirdNET-Spektrogramm vollständig.
|
||
* **Hohe WLAN-Reichweite:** Ausgelegt auf das ESP32-WROOM-32U Modul mit U.FL-Anschluss und externer Stabantenne für den stabilen Langzeiteinsatz im Garten.
|
||
|
||
---
|
||
|
||
## Hardware & Pinbelegung
|
||
|
||
### Komponenten
|
||
* **MCU:** ESP32-WROOM-32U DevKit (ESP32 Dev Module)
|
||
* **Mikrofon:** I2S MEMS (z. B. INMP441, ICS-43434)
|
||
* **Zusatz:** Stützkondensator (470 µF oder 1000 µF)
|
||
|
||
### Verdrahtung
|
||
|
||
| Mikrofon Pin | ESP32-WROOM-32U Pin | Beschreibung |
|
||
| :--- | :--- | :--- |
|
||
| **VDD** | **3V3** | Versorgungsspannung (3,3 V – **niemals an 5 V / VIN!**) |
|
||
| **GND** | **GND** | Masse |
|
||
| **L/R (SEL)**| **GND** | Kanalwahl (GND erzwingt den linken Mono-Kanal) |
|
||
| **SCK / BCLK**| **GPIO 27** | I2S Bit Clock (Sample-Takt 48 kHz) |
|
||
| **WS / LRCL** | **GPIO 26** | I2S Word Select |
|
||
| **SD / Dout** | **GPIO 25** | I2S Serial Data Out (Audio-Datenleitung) |
|
||
|
||
> **Hardware-Tipp für den Außeneinsatz:**
|
||
> 1. Löte einen Elektrolytkondensator (470 µF oder 1000 µF) nah am ESP32 zwischen **3V3** und **GND**. Das fängt Stromspitzen der WLAN-Antenne beim Senden ab und verhindert interne Spannungsabfälle sowie Rauschen im Audiosignal.
|
||
> 2. Die externe Antenne muss auf dem U.FL-Port aufgesteckt sein, bevor das Board mit Strom versorgt wird.
|
||
|
||
---
|
||
|
||
## Konfiguration & Flashen
|
||
|
||
### Voraussetzungen
|
||
* **Arduino IDE** (mit ESP32-Boardpaket) oder **PlatformIO**.
|
||
* **Zusatzbibliothek:** `arduino-audio-tools` von Phil Schatzmann (Installation via ZIP in Arduino IDE oder über `lib_deps` in PlatformIO).
|
||
|
||
### Wichtige IDE-Einstellungen
|
||
Da die Audio-Bibliothek sehr umfangreich ist und einige ESP32-Boards spezielle Speichereinstellungen benötigen, müssen folgende Parameter unter **Werkzeuge** in der Arduino IDE gesetzt werden:
|
||
* **Board:** `ESP32 Dev Module`
|
||
* **Partition Scheme:** `Huge APP (3MB No OTA/1MB SPIFFS)` *(Zwingend erforderlich für die Audio-Bibliothek!)*
|
||
* **Flash Mode:** `DIO` *(Verhindert Speicher-Lesefehler)*
|
||
* **Flash Frequency:** `40MHz` *(Verhindert Crash-Loops / Boot-Schleifen bei günstigen Flash-Bausteinen)*
|
||
* **Erase All Flash Before Sketch Upload:** `Enabled` *(Empfohlen beim allerersten Flashen, um alten Datenmüll zu bereinigen)*
|
||
|
||
### Anpassung & Upload
|
||
Passe vor dem Kompilieren im Code die WLAN-Zugangsdaten an:
|
||
|
||
```cpp
|
||
const char *ssid = "DEINE_SSID";
|
||
const char *password = "DEIN_WLAN_PASSWORT";
|
||
```
|
||
|
||
**Upload-Hinweis für das DevKit:**
|
||
Wenn während des Uploads in der Konsole `Connecting........` erscheint, muss die winzige **"BOOT"**-Taste auf dem ESP32-Board für 1-2 Sekunden gedrückt gehalten werden, um den Flash-Vorgang manuell zu starten.
|
||
|
||
Nach dem Neustart (Druck auf die "EN"-Taste) gibt der Serielle Monitor (115200 Baud) die IP-Adresse aus. Die Stream-URL lautet:
|
||
`http://<ESP32-IP>/`
|
||
|
||
---
|
||
|
||
## Einbindung in BirdNET-Go
|
||
|
||
1. Web-Dashboard von **BirdNET-Go** öffnen.
|
||
2. In die **Einstellungen** (Settings) wechseln und zum Bereich **Audio-Schnittstelle** (Audio / Input) scrollen.
|
||
3. Den Stream eintragen:
|
||
* **Stream-URL:** `http://<ESP32-IP>/` (ohne Port-Angabe am Ende)
|
||
4. Änderungen speichern. Das Spektrogramm im Dashboard sollte nun einen durchgängigen, lückenlosen Audio-Feed zeigen.
|
||
|
||
---
|
||
|
||
## Lokaler Test
|
||
|
||
Um den Stream unabhängig von BirdNET-Go zu verifizieren:
|
||
|
||
1. Einen Webbrowser oder **VLC Media Player** öffnen (`Strg + N` -> Netzwerkstream öffnen).
|
||
2. URL eingeben: `http://<ESP32-IP>/`.
|
||
3. Die Wiedergabe startet sofort. (Achtung: Browser haben meist ein paar Sekunden Puffer-Verzögerung). |