BirdNet-goMikrofon/README.md

91 lines
4.5 KiB
Markdown
Raw Normal View History

2026-09-26 01:20:55 +02:00
# ESP32-WROOM-32U HTTP Audio Streamer für BirdNET-Go
2026-09-22 19:27:32 +02:00
2026-09-26 01:20:55 +02:00
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).
2026-09-22 19:27:32 +02:00
2026-09-26 01:20:55 +02:00
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.
2026-09-22 19:27:32 +02:00
2026-09-26 16:41:45 +02:00
## Mein Code
In der meinBirdNEtMic.ino ist mein eigener code für das Mikrofon ohne aussetzer!
2026-09-22 19:27:32 +02:00
---
## Features
2026-09-26 01:20:55 +02:00
* **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.
2026-09-22 19:27:32 +02:00
---
## Hardware & Pinbelegung
### Komponenten
2026-09-26 01:20:55 +02:00
* **MCU:** ESP32-WROOM-32U DevKit (ESP32 Dev Module)
* **Mikrofon:** I2S MEMS (z. B. INMP441, ICS-43434)
* **Zusatz:** Stützkondensator (470 µF oder 1000 µF)
2026-09-22 19:27:32 +02:00
### Verdrahtung
2026-09-26 01:20:55 +02:00
| 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) |
2026-09-22 19:27:32 +02:00
2026-09-26 01:20:55 +02:00
> **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.
2026-09-22 19:27:32 +02:00
---
## Konfiguration & Flashen
### Voraussetzungen
2026-09-26 01:20:55 +02:00
* **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).
2026-09-22 19:27:32 +02:00
2026-09-26 01:20:55 +02:00
### 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:
2026-09-22 19:27:32 +02:00
```cpp
2026-09-26 01:20:55 +02:00
const char *ssid = "DEINE_SSID";
const char *password = "DEIN_WLAN_PASSWORT";
2026-09-22 19:27:32 +02:00
```
2026-09-26 01:20:55 +02:00
**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.
2026-09-22 19:27:32 +02:00
2026-09-26 01:20:55 +02:00
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>/`
2026-09-22 19:27:32 +02:00
---
## Einbindung in BirdNET-Go
2026-09-26 01:20:55 +02:00
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.
2026-09-22 19:27:32 +02:00
---
2026-09-26 01:20:55 +02:00
## Lokaler Test
2026-09-22 19:27:32 +02:00
Um den Stream unabhängig von BirdNET-Go zu verifizieren:
2026-09-26 01:20:55 +02:00
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).