Embedded audio & remote interfaces

One audio system.
Several ways to control it.

The BM83 project coordinates an audio module, a serial touchscreen, and wireless remotes around an ESP32-S3 controller.

Conceptual system diagram showing an ESP32-S3 controller communicating with BM83 audio, a Nextion touchscreen, and a CrowPanel remote.
Conceptual system view; connections represent software interfaces.
ControllerESP32-S3 / CircuitPython
InterfacesUART, BLE HID, ESP-NOW
DisplaysNextion & CrowPanel

The engineering problem

Keep commands and feedback coherent.

Playback, track metadata, and display updates cross several interfaces. A command may begin at a touchscreen or a wireless remote, while the response comes back through the audio module or a metadata helper.

The work is in coordinating those paths: parsing messages, scheduling updates, handling disconnects, and keeping the controls responsive while background work continues.

Implementation

Follow each interface.

Audio controller

CircuitPython on the ESP32-S3 handles BM83 UART messages, playback controls, and metadata. Deferred work keeps incoming events separate from longer operations.

Local and wireless displays

The Nextion provides a serial touchscreen interface. The CrowPanel remote uses a separate C++ / LVGL application and ESP-NOW messages for controls and state updates.

Badge remote

A GitHub Universe 2026 badge app adds another control interface. Its BMW1 protocol has a receiver in the current controller source.

Press and release behavior

Volume control includes the end of a press, as well as its beginning. The project also addresses connection recovery, bounded work, and consistent display state.

From the Universe workshop

Try the BM83 badge remote.

Explore the actual HYB26 badge model with its physical buttons and touch pads, screen flipping, five fictional tracks, and original AI-generated album covers.

Rotate the badge, change the track, and try the controls. Playback is simulated; the demonstration runs in your browser. The badge retains its existing printed appearance; the new album covers are original artwork.

Open full demo

Evidence

Checks with a defined scope.

The project includes host tests and documented checks on the physical system. Each validation record identifies the route, conditions, and limitations of that run.

A historical Mac/helper record documents a scoped 30-minute physical acceptance run completed on November 2, 2026. That result applies to its recorded setup and does not establish acceptance under the project’s broader current criteria. Other platforms, startup sequences, and recovery scenarios have their own acceptance work.

Release candidate

A reviewable candidate.

Version 1.0.0-rc.1 is published on GitHub as a pre-release, dated November 7, 2026. It packages selected controller and badge source, controller libraries compiled with a pinned CircuitPython 10.3.1 compiler, a manifest, and SHA-256 checksums. Native CircuitPython images are not included.

The tagged commit passed the repository’s Python package, host-policy, and security-scan workflows, and its host regression suite passed locally on Python 3.11 through 3.13. Native builds were not rerun for this publication, and publishing it involved no hardware run or flashing. Physical acceptance remains limited to dated, scoped records; this pre-release does not qualify every host or unattended deployment. The browser demo is a separate, simulated presentation of the remote interface.

Get in touch

Let’s talk engineering.

For engineering roles, freelance projects, or questions about this work, email me or connect on LinkedIn.

Résumé available on request.