ESP32-S3 SuperMini — a compact dual-core 240 MHz board with integrated 2.4 GHz WiFi and Bluetooth. Chosen for its small footprint, built-in BOOT button (used for factory reset), and low cost.
Note on antenna: The SuperMini's onboard antenna is marginal. In practice, reducing TX power to ~5 dBm (20 quarter-dBm units) improved reliability significantly over the default high-power setting.
Up to 12 buttons arranged in a 4×3 grid, wired as a matrix to minimize GPIO pin usage. Each position in the matrix is individually addressable; the firmware reports the position index (0–11) along with the device ID when a button is pressed.
The number of buttons is flexible — a device might have 1 button, 4 buttons, or the full 12. Only buttons that are physically present and wired are reported.
This demo simulates a button press by connecting two matrix wires, then shows the event being received by the backend server.
A small I²C OLED screen (0.91 inch, 128×32 pixels) can be attached to show the currently selected mode from the server-defined mode list. The user scrolls through modes with the rotary encoder.
The display is entirely optional — devices without a display still function; they simply can't show mode feedback to the user.
This demo shows the OLED display working and the mode list being refreshed from the server.
A standard KY-040-style rotary encoder with a push button. Used to scroll through the mode list displayed on the OLED. Rotating left/right moves through the list; the selected mode is sent with each subsequent button press.
SVG cut files for a laser-cut angled button enclosure are included in Documentation/buttonHousing/. Several iterations of the design exist; the latest version (v7) corrects edge alignment for clean assembly.
The enclosure is designed to sit at an angle so buttons face the user naturally when placed on a flat surface.
| Component | Connection |
|---|---|
| Button matrix rows/cols | GPIO pins (exact mapping in Pins.h) |
| OLED display | I²C (SDA/SCL) |
| Rotary encoder | Two GPIO pins + interrupt |
| Factory reset | BOOT button (GPIO 0), hold 3 s |
| Button input (single-button mode) | GPIO 4 to GND |
Some button styles and form factors considered during design:
- The ESP32-S3 SuperMini antenna was less reliable at default transmit power.
- A matrix layout reduced GPIO usage but required careful scanning/debounce behavior.
- The enclosure angle mattered more than expected; flat boxes made the buttons less pleasant to press.








