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

91 lines
No EOL
4.5 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-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://<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).