You do not need a physical device to use OpenDot Platform! Start in the web app, make
the platform reliable, then bring the same agent to hardware when you are ready.
Current reference board
OpenDot firmware currently targets the Waveshare ESP32-S3-AUDIO-Board. This is the board tested so far for the local Dot device flow.
Current tested reference device: Waveshare ESP32-S3-AUDIO-Board product view. Image source: Waveshare.
- ESP32-S3R8 MCU with 2.4 GHz Wi-Fi and Bluetooth LE
- 8 MB PSRAM and 16 MB external flash
- dual microphones for voice input
- ES7210 and ES8311 audio path for microphone input and speaker output
- speaker header and audio enclosure
- RGB LED ring, buttons, USB-C, TF card slot, battery support, and expansion connectors

The reference board has the core ingredients OpenDot needs for wake, capture, playback, status, power, and expansion. Image source: Waveshare.
Firmware shape
The firmware lives indot-device/firmware/ and is an ESP-IDF project, not an
Arduino sketch. It currently handles:
- Wi-Fi provisioning through a temporary
opendot-...access point - OTA bootstrap through
CONFIG_OTA_URL - activation code speech and claim flow through the OpenDot runtime and platform API
- wake-word behavior
- WebSocket connection to the runtime
- microphone capture and speaker playback
- display and LED status
dot-device/firmware/LICENSE.xiaozhi when moving or
substantially modifying firmware code.
Runtime relationship
The device does not connect to the browser UI. It connects to the local or hosted OpenDot runtime:- Firmware boots and reaches the runtime OTA endpoint.
- The runtime proxies activation to the platform API.
- The platform API creates or verifies an activation request.
- The device speaks a claim code.
- The user enters that code in Dot Device.
- The platform stores a device credential.
- Subsequent
/wssessions authenticate with that credential and load the bound identity configuration.
/ws and
plays Opus frames from the runtime. The runtime checks the bound agent
architecture: Sandwich routes through Deepgram plus the configured LLM and TTS,
while Speech-to-speech opens a server-side OpenAI Realtime WebSocket with the
runtime’s OPENAI_API_KEY.
Hardware interface reference
The reference board exposes more than OpenDot uses today. The important areas for contributors are audio I/O, display, buttons, LEDs, Wi-Fi, power, and runtime network reachability.
Waveshare interface map for the current reference board. Image source: Waveshare.
config.h, but treat OpenDot’s firmware source as the contract for the current
prototype.
Hardware coming soon
The future open hardware Dot device should keep the same product constraints visible:- reliable near-field and practical far-field capture
- speaker output that makes TTS testing honest
- physical status through light, display, or both
- simple power, battery, and USB debugging paths
- casing and acoustic choices that do not hide microphone or speaker behavior
- reproducible firmware flashing and serial diagnostics
Contributor checklist
When changing device-facing behavior, check both sides of the boundary:- Dot Device console for the console pairing and binding workflow
- Platform architecture for OTA, credential, runtime, and data-model ownership
dot-device/firmware/README.mdfor ESP-IDF setup, flashing, provisioning, and serial monitoringdot-device/firmware/main/boards/waveshare/esp32-s3-audio-board/for the current board definition