# 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. ## Mein Code In der meinBirdNEtMic.ino ist mein eigener code für das Mikrofon ohne aussetzer! --- ## 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:///` --- ## 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:///` (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:///`. 3. Die Wiedergabe startet sofort. (Achtung: Browser haben meist ein paar Sekunden Puffer-Verzögerung).