BirdNet-goMikrofon/README.md
2026-09-26 16:41:45 +02:00

4.5 KiB
Raw Permalink Blame History

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 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:

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