RTSP I2S microphone streamer based on ESP32 XIAO boards for BirdNET-Go / BirdNET-Pi. Dual streams (/audio1, /audio2), Web UI, JSON API, OTA updates, and built-in auto-recovery for stable 24/7 operation.
177
stars
101
commits
C++
primary language
Aug 1, 2026
updated
Seeed XIAO ESP32 network microphone for BirdNET-Go and BirdNET-Pi. It reads an I2S MEMS microphone and serves mono 16-bit PCM/L16 audio over RTSP.
esp32-birdnet-micmanual-ota-firmware/firmware-app-<board>.bin (firmware-app.bin remains the C6 alias)esp32-birdnet-mic/README.mdesp32-birdnet-mic/CHANGELOG.mdLICENSE)http://192.168.4.1 if the captive portal does not appear, then enter your Wi-Fi details.http://<device-ip>/.rtsp://<device-ip>:8554/audio1 Stream 1
rtsp://<device-ip>:8554/audio2 Stream 2
If mDNS is enabled and works on your LAN, the same streams are available through the device hostname:
rtsp://<device-hostname>.local:8554/audio1
rtsp://<device-hostname>.local:8554/audio2
The default hostname is unique per device, for example esp32mic-a1b2c3.
Supported XIAO boards:
Default build notes:
manual-ota-firmware/.Tested build targets: Seeed Studio XIAO ESP32-C3/S3/C5/C6. Runtime hardware validation is still primarily on XIAO ESP32-C6 + ICS-43434 I2S microphone.
Use the same physical XIAO pin labels on every supported board. The underlying GPIO numbers differ by chip.
Firmware v1.11 or newer is required for the C3/S3/C5 GPIO mappings below. Versions 1.10.0 and
1.10.1 incorrectly used the C6 GPIO mapping (21/1/2) in every board build. C6 was not affected.
| Mic signal | XIAO pin label | C3 GPIO | S3 GPIO | C5 GPIO | C6 GPIO | Notes |
|---|---|---|---|---|---|---|
| BCLK / SCK | D3 | 5 | 4 | 7 | 21 | I2S bit clock |
| LRCLK / WS | D1 | 3 | 2 | 0 | 1 | I2S word select |
| SD / DOUT | D2 | 4 | 3 | 25 | 2 | I2S data from microphone |
| MCLK / SCKI | D7 | 20 | 44 | 12 | 17 | Optional clock for PCM1808 ADC |
| VDD | 3V3 | - | - | - | - | Power |
| GND | GND | - | - | - | - | Ground |
INMP441 has also been reported to work with the same I2S pins. If your board exposes L/R or
SEL, set it to the left channel, usually GND, because the firmware reads the left I2S channel.
See discussion #25: https://github.com/Sukecz/esp32-birdnet-mic/discussions/25
Firmware v1.21 also outputs a 256-fs MCLK on D7 for experimental PCM1808 ADC setups. Configure the PCM1808 for slave I2S mode and connect the microphone path to its left input; RTSP output remains mono. This path is ready for hardware testing but is not yet a tested reference setup. Existing ICS-43434 and INMP441 installations leave D7 unconnected and require no wiring change.
XIAO ESP32-C6 uses an RF switch path controlled by GPIO3/GPIO14. The firmware selects the external antenna path by default.
setup() for the C6 build.Use /audio1 for stream 1 unless you specifically need the old /audio URL.
ffplay -rtsp_transport tcp rtsp://<device-ip>:8554/audio1
ffprobe -rtsp_transport tcp rtsp://<device-ip>:8554/audio1
For VLC: Media -> Open Network Stream -> paste rtsp://<device-ip>:8554/audio1 or
rtsp://<device-ip>:8554/audio2.
If VLC/ffplay works, use the same RTSP URL in BirdNET-Go or BirdNET-Pi.
/audio1 and /audio2; /audio is an alias for /audio1.Default audio settings are 48 kHz, mono 16-bit PCM/L16, gain 1.5, and a 512-sample packet buffer. The 512-sample default is the balanced profile and avoids the BirdNET-Pi UDP stutter observed with 1024-sample packets, while still working well for BirdNET-Go TCP. Firmware v1.9.3 and later improves BirdNET-Pi UDP compatibility by handling RTCP and RTP metadata expected by ffmpeg-based clients.
| Part | Qty | Notes | Link |
|---|---|---|---|
| Seeed Studio XIAO ESP32-C3 | 1 | Supported XIAO target board | Seeed Studio |
| Seeed Studio XIAO ESP32-S3 | 1 | Supported XIAO target board | Seeed Studio |
| Seeed Studio XIAO ESP32-C5 | 1 | Supported XIAO target board | Seeed Studio |
| Seeed Studio XIAO ESP32-C6 | 1 | Supported XIAO target board | Seeed Studio |
| MEMS I2S microphone ICS-43434 | 1 | Tested reference microphone | AliExpress |
| MEMS I2S microphone INMP441 | 1 | Reported compatible with same wiring | - |
| Shielded cable, 5+ core | Optional | I2S mic needs 5 conductors: 3V3, GND, BCLK, LRCLK/WS, and SD/DOUT. A 6-core cable is a good practical choice for spare/shield handling. | AliExpress |
| 5 V power supply | 1 | At least 1 A recommended. The AliExpress page may default to 12 V; manually select the 5 V version. Never connect 12 V to the XIAO. | AliExpress |
| 2.4 GHz antenna, IPEX/U.FL | Recommended | Important for stable XIAO Wi-Fi streaming | AliExpress |
Links are examples only. Verify the exact part number before buying.
Power the XIAO either through USB-C with a normal USB power supply or through its 5V/VBUS input with a regulated 5 V supply. A higher-wattage USB-C supply is fine because the board draws only the current it needs. Do not connect USB-C and an external 5 V source at the same time.
If the stream is stable but the audio is noisy or distorted, try lowering Wi-Fi TX Power in the Web UI. When the access point is nearby, lower TX power can reduce RF coupling into the microphone, wiring, or power rails.
Suggested test:
A grounded metal enclosure can help shield microphone wiring, but keep the Wi-Fi antenna outside the metal enclosure.
The firmware includes a configurable high-pass filter to reduce low-frequency rumble.
High-pass and HPF Cutoff.POST /api/set with key=hp_enable&value=on|off or key=hp_cutoff&value=600.X-ESP32MIC-CSRF: 1.Firmware v1.9.2 and later includes esp32-birdnet-mic/build_opt.h, which the ESP32 Arduino core loads
automatically in Arduino IDE and arduino-cli. It disables unused C++ exception/unwind metadata and
keeps the tight XIAO ESP32-C3/C6 default 1.2 MB app partitions below the limit without removing
firmware features.
esp32-birdnet-mic/README.mdmanual-ota-firmware/README.mdweb-flasher/README.mdesp32-birdnet-mic/CHANGELOG.mdThis project is released under the MIT License. See LICENSE.
99 commits
2 commits
C++
51.5%
C
27.2%
HTML
20.4%
RTSP I2S microphone streamer based on ESP32 XIAO boards for BirdNET-Go / BirdNET-Pi. Dual streams (/audio1, /audio2), Web UI, JSON API, OTA updates, and built-in auto-recovery for stable 24/7 operation.
177
stars
101
commits
C++
primary language
Aug 1, 2026
updated
Seeed XIAO ESP32 network microphone for BirdNET-Go and BirdNET-Pi. It reads an I2S MEMS microphone and serves mono 16-bit PCM/L16 audio over RTSP.
esp32-birdnet-micmanual-ota-firmware/firmware-app-<board>.bin (firmware-app.bin remains the C6 alias)esp32-birdnet-mic/README.mdesp32-birdnet-mic/CHANGELOG.mdLICENSE)http://192.168.4.1 if the captive portal does not appear, then enter your Wi-Fi details.http://<device-ip>/.rtsp://<device-ip>:8554/audio1 Stream 1
rtsp://<device-ip>:8554/audio2 Stream 2
If mDNS is enabled and works on your LAN, the same streams are available through the device hostname:
rtsp://<device-hostname>.local:8554/audio1
rtsp://<device-hostname>.local:8554/audio2
The default hostname is unique per device, for example esp32mic-a1b2c3.
Supported XIAO boards:
Default build notes:
manual-ota-firmware/.Tested build targets: Seeed Studio XIAO ESP32-C3/S3/C5/C6. Runtime hardware validation is still primarily on XIAO ESP32-C6 + ICS-43434 I2S microphone.
Use the same physical XIAO pin labels on every supported board. The underlying GPIO numbers differ by chip.
Firmware v1.11 or newer is required for the C3/S3/C5 GPIO mappings below. Versions 1.10.0 and
1.10.1 incorrectly used the C6 GPIO mapping (21/1/2) in every board build. C6 was not affected.
| Mic signal | XIAO pin label | C3 GPIO | S3 GPIO | C5 GPIO | C6 GPIO | Notes |
|---|---|---|---|---|---|---|
| BCLK / SCK | D3 | 5 | 4 | 7 | 21 | I2S bit clock |
| LRCLK / WS | D1 | 3 | 2 | 0 | 1 | I2S word select |
| SD / DOUT | D2 | 4 | 3 | 25 | 2 | I2S data from microphone |
| MCLK / SCKI | D7 | 20 | 44 | 12 | 17 | Optional clock for PCM1808 ADC |
| VDD | 3V3 | - | - | - | - | Power |
| GND | GND | - | - | - | - | Ground |
INMP441 has also been reported to work with the same I2S pins. If your board exposes L/R or
SEL, set it to the left channel, usually GND, because the firmware reads the left I2S channel.
See discussion #25: https://github.com/Sukecz/esp32-birdnet-mic/discussions/25
Firmware v1.21 also outputs a 256-fs MCLK on D7 for experimental PCM1808 ADC setups. Configure the PCM1808 for slave I2S mode and connect the microphone path to its left input; RTSP output remains mono. This path is ready for hardware testing but is not yet a tested reference setup. Existing ICS-43434 and INMP441 installations leave D7 unconnected and require no wiring change.
XIAO ESP32-C6 uses an RF switch path controlled by GPIO3/GPIO14. The firmware selects the external antenna path by default.
setup() for the C6 build.Use /audio1 for stream 1 unless you specifically need the old /audio URL.
ffplay -rtsp_transport tcp rtsp://<device-ip>:8554/audio1
ffprobe -rtsp_transport tcp rtsp://<device-ip>:8554/audio1
For VLC: Media -> Open Network Stream -> paste rtsp://<device-ip>:8554/audio1 or
rtsp://<device-ip>:8554/audio2.
If VLC/ffplay works, use the same RTSP URL in BirdNET-Go or BirdNET-Pi.
/audio1 and /audio2; /audio is an alias for /audio1.Default audio settings are 48 kHz, mono 16-bit PCM/L16, gain 1.5, and a 512-sample packet buffer. The 512-sample default is the balanced profile and avoids the BirdNET-Pi UDP stutter observed with 1024-sample packets, while still working well for BirdNET-Go TCP. Firmware v1.9.3 and later improves BirdNET-Pi UDP compatibility by handling RTCP and RTP metadata expected by ffmpeg-based clients.
| Part | Qty | Notes | Link |
|---|---|---|---|
| Seeed Studio XIAO ESP32-C3 | 1 | Supported XIAO target board | Seeed Studio |
| Seeed Studio XIAO ESP32-S3 | 1 | Supported XIAO target board | Seeed Studio |
| Seeed Studio XIAO ESP32-C5 | 1 | Supported XIAO target board | Seeed Studio |
| Seeed Studio XIAO ESP32-C6 | 1 | Supported XIAO target board | Seeed Studio |
| MEMS I2S microphone ICS-43434 | 1 | Tested reference microphone | AliExpress |
| MEMS I2S microphone INMP441 | 1 | Reported compatible with same wiring | - |
| Shielded cable, 5+ core | Optional | I2S mic needs 5 conductors: 3V3, GND, BCLK, LRCLK/WS, and SD/DOUT. A 6-core cable is a good practical choice for spare/shield handling. | AliExpress |
| 5 V power supply | 1 | At least 1 A recommended. The AliExpress page may default to 12 V; manually select the 5 V version. Never connect 12 V to the XIAO. | AliExpress |
| 2.4 GHz antenna, IPEX/U.FL | Recommended | Important for stable XIAO Wi-Fi streaming | AliExpress |
Links are examples only. Verify the exact part number before buying.
Power the XIAO either through USB-C with a normal USB power supply or through its 5V/VBUS input with a regulated 5 V supply. A higher-wattage USB-C supply is fine because the board draws only the current it needs. Do not connect USB-C and an external 5 V source at the same time.
If the stream is stable but the audio is noisy or distorted, try lowering Wi-Fi TX Power in the Web UI. When the access point is nearby, lower TX power can reduce RF coupling into the microphone, wiring, or power rails.
Suggested test:
A grounded metal enclosure can help shield microphone wiring, but keep the Wi-Fi antenna outside the metal enclosure.
The firmware includes a configurable high-pass filter to reduce low-frequency rumble.
High-pass and HPF Cutoff.POST /api/set with key=hp_enable&value=on|off or key=hp_cutoff&value=600.X-ESP32MIC-CSRF: 1.Firmware v1.9.2 and later includes esp32-birdnet-mic/build_opt.h, which the ESP32 Arduino core loads
automatically in Arduino IDE and arduino-cli. It disables unused C++ exception/unwind metadata and
keeps the tight XIAO ESP32-C3/C6 default 1.2 MB app partitions below the limit without removing
firmware features.
esp32-birdnet-mic/README.mdmanual-ota-firmware/README.mdweb-flasher/README.mdesp32-birdnet-mic/CHANGELOG.mdThis project is released under the MIT License. See LICENSE.
99 commits
2 commits
C++
51.5%
C
27.2%
HTML
20.4%