Use a Sonocotta Esparagus HiFi MediaLink as a standalone Bluetooth audio receiver, controlled from Venue Commander over the network. An alternative (or complement) to the built-in audio board when you want the audio path on a separate, network-connected box.
Venue Commander has two ways to get Bluetooth audio into a rig:
The two are not mutually exclusive: you can have a built-in audio board and one or more Esparagus receivers, all controlled from the same touchscreen.
| Power | 5 V USB-C |
| Audio output | 3.5 mm line out or header pins |
| Network | WiFi (2.4 GHz) |
The Esparagus board needs its own custom firmware loaded the first time. Follow the BT Esparagus project's setup instructions to build and load it — it's a separate, developer-oriented process that requires a computer with the ESP-IDF development environment.
Once the firmware is loaded and the board is on your WiFi network, you don't need to touch any of that again. All subsequent updates can be applied wirelessly through the Esparagus board's own web UI.
On first power-up (or after a factory reset), the device has no WiFi credentials and starts in Access Point mode.
| Network (SSID) | BT-Esparagus-XXXX — the last 4 characters are from the device's MAC address |
| Password | esparagus |
| Setup URL | http://192.168.4.1 |
BT-Esparagus-XXXX WiFi network using password esparagus.http://192.168.4.1.On first boot, the device automatically generates two credentials:
| API Key | 32-character key required for all REST API calls. Visible in the Config tab. Used by HTTP integrations — not needed for Venue Commander (which uses OSC). |
| OSC PIN | 4-digit numeric code used by Venue Commander for OSC authentication. Visible in the Config tab. You'll need this when setting up the endpoint in Venue Commander. |
After rebooting, find the device's new IP address from your router's DHCP table or the serial monitor output. The device also registers via mDNS as <device-name>.local for ~60 seconds after boot, then stops to reduce radio contention with BT audio.
Once connected to your WiFi, navigate to the device's IP in a browser and open the Config tab.
| Device Name | Friendly name shown in the web UI header, mDNS hostname, and pushed via OSC /device_name. |
| BT Exclusive | When enabled, the device hides from new Bluetooth devices while streaming audio. Existing connections are unaffected. |
A 32-character key auto-generated on first boot. Required as an X-API-Key header for all REST API calls. You can regenerate it if compromised — existing integrations will need the new key.
| Port | UDP port for the OSC server. Default: 9000. Changing this requires a reboot. |
| PIN | 4-digit authentication code for OSC clients. Auto-generated on first boot. Note this value — you'll enter it in Venue Commander's endpoint configuration. |
Optional HTTP Basic Auth password for the web UI. Leave blank to allow access without login. Username is always admin.
Once your BT Esparagus is on the network and you've noted the OSC PIN from the Config tab, set it up as an endpoint in Venue Commander.
/thump at 5 s, value feedback enabled, PIN address /auth, and a 4-digit PIN entered.
| Transport | OSC |
| Port | 9000 |
| Heartbeat Probe | /thump |
| Heartbeat Interval | 5 seconds |
| Value Feedback | Enabled |
| PIN Address | /auth |
Switch to the Layout tab and add widgets for the BT Esparagus endpoint. Use the BT Esparagus widget presets for quick setup. Available presets:
| Preset | Type | Description |
|---|---|---|
| Volume | Fader | Bluetooth volume control (0–100), syncs with the phone in both directions |
| Now Playing | Info | Shows current track title, artist, and album |
| Device Name | Info | Shows the connected Bluetooth device's friendly name |
| Play/Pause | Toggle Button | Stateful play/pause |
| Kick | Button | Disconnect the current Bluetooth device |
The BT Esparagus web UI has 5 tabs. All status updates push in real time — you never need to refresh. This is the Esparagus board's own web UI, separate from Venue Commander's; you only need it for initial setup, firmware updates, and device-side management.
| Playback | Prev / Play-Pause / Next buttons. Track title, artist, and album from the connected device. Only visible when a Bluetooth device is connected. |
| Device | Device name, Bluetooth connection status, connected device name, audio state (playing / paused / stopped), and signal strength. |
| Show Mode | Lock to the current Bluetooth device for a configurable duration (default 5 hours). While active, all other connections are rejected and kick/unpair controls are disabled. Only visible when a Bluetooth device is connected. |
| Volume | Bluetooth volume slider (0–100). Syncs with the phone in both directions. |
| Output Level | Master output level slider (0–100, default 70). Local to the Esparagus board only — doesn't affect the phone. Reduce if audio is distorted or clipping. |
| Allow checkbox | Enable or disable a paired device. Denied devices cannot connect. |
| Friendly name | User-assigned label for each device (e.g. “Stage Manager iPhone”). |
| Connect | Initiate an outbound connection to a previously paired device. |
| Kick | Disconnect the currently connected device immediately. |
| Kick 10min | Disconnect and temporarily block reconnection for 10 minutes. The block clears on reboot. |
| Unpair | Remove the device from the paired list. Both sides need to re-pair from scratch. |
| Unpair All | Remove all paired devices. Requires confirmation. |
See WiFi Setup above.
See Configuration above.
Upload a .bin firmware file to update the Esparagus board wirelessly. The device reboots automatically after a successful upload. If the new firmware fails to boot, the device falls back to the previous version automatically.
The Esparagus OSC server listens on UDP port 9000 (configurable). All commands require authentication via the 4-digit PIN.
Send /auth <PIN> (string argument) to authenticate. The device replies /auth 1 on success or /auth 0 on failure. Sessions expire after 60 seconds of inactivity. Up to 4 concurrent clients.
If any message arrives from an unauthenticated client, the device replies /auth 0. Venue Commander uses this signal to automatically re-authenticate when a session expires (common during BT audio streaming due to WiFi/BT radio coexistence).
| Address | Args | Description |
|---|---|---|
| /auth | string: PIN | Authenticate with 4-digit PIN |
| /thump | none | Heartbeat — device echoes back |
| /volume | int: 0–100 | Set Bluetooth volume (syncs to phone) |
| /kick | none | Disconnect current Bluetooth device (blocked while in show mode) |
| /kick_temp | int: seconds | Kick + block reconnection for N seconds (default 600) |
| /unpair_all | none | Unpair all paired devices |
| /playback | string: play, pause, next, prev | Playback control |
| /show_mode | int: minutes (0 = off) | Lock to current device for a show |
On any state change, the device pushes updates to all authenticated clients:
| Address | Type | Value |
|---|---|---|
| /volume | int | Current volume (0–100) |
| /bt_connected | string | Connected or Not connected |
| /audio_state | string | playing, paused, or stopped |
| /device_name | string | Connected device friendly name (or BT name) |
| /now_playing | string | Title\nArtist\nAlbum (newline-separated) |
| /show_mode | int | 1 (active) or 0 (off) |
Send any state address with no arguments to query the current value (e.g. send bare /volume to get the current volume back). This matches the Wing/XM32 convention.
/kick and /unpair_all are bare commands, not queries — sending them without args executes them.