-
Notifications
You must be signed in to change notification settings - Fork 0
Firmware Flashing and Setup
Tyler Hatfield edited this page Aug 30, 2026
·
3 revisions
This guide covers compiling, flashing, and provisioning the DecaTone firmware for ESP32-S3 microcontrollers, configuring custom firmware overrides, and managing Over-The-Air (OTA) updates.
- Microcontroller: Hosyond ESP32-S3 DevKit-C (N8R8 / N16R8) with native USB-CDC.
- Clock: Xtensa Dual-Core 240MHz (scales automatically between 80MHz idle and 240MHz in-call).
-
Partition Table: Dual OTA app partitions (
ota_0andota_1) withnvsandspiffs.
- Install Visual Studio Code with the PlatformIO IDE extension (or PlatformIO CLI:
pip install platformio). - Open the
firmware/directory. - Connect your ESP32-S3 board to your computer via USB (connect to the Native USB / CDC port).
- Run the upload command:
cd firmware pio run --target upload - Monitor serial output at 115,200 baud:
pio device monitor -b 115200
When an unconfigured ESP32-S3 powers on for the first time:
- The device launches an open WiFi Access Point named
DecaTone-Setup-XXXX(whereXXXXrepresents the last 4 characters of the hardware MAC address). - Connect your smartphone or computer to
DecaTone-Setup-XXXX. - A captive portal page will appear automatically (or navigate to
http://192.168.4.1). -
Configuration Fields:
- WiFi SSID: Select your 2.4GHz home WiFi network.
- WiFi Password: Enter your WiFi network password.
-
DecaTone Server Base URL: Enter your self-hosted switchboard address (e.g.
https://phone.example.comorhttp://192.168.1.100:4000). - Hardware Profile: Select your telephone model (e.g. Western Electric 500, Automatic Electric AE40/50, Kellogg, etc.).
- Bell Ringing Frequency: 20.0 Hz (default North American resonance).
- Unique Device ID: Copy this identifier for pairing.
- Click Save & Connect. The ESP32-S3 stores credentials in non-volatile flash storage (NVS) and connects to your switchboard.
Tip
To re-enter setup mode at any time, hold down the BOOT button (GPIO 0) for 5 seconds upon powering on the device.
DecaTone supports pairing multiple physical telephones to a single user account (e.g., Living Room, Study, Workshop):
- Open your DecaTone web dashboard in your browser.
- Navigate to Phone Settings → Claim / Pair Hardware.
- Pick up the physical telephone handset and listen for the spoken pairing word (e.g.,
TONE) and 4-digit code (e.g.,4821), or enter the device ID directly. - Click Claim & Pair Hardware.
- Configure custom labels (
Living Room,Workshop) and toggle individual ringer switches (ring_enabled) per device.
Physical phones can update automatically in the background without user intervention:
- In Phone Settings → Firmware & Over-The-Air (OTA) Updates, enable Automatic Firmware Updates.
- Specify your preferred time window (e.g.
03:00AM). - Updates only execute when the telephone is on-hook (idle) to prevent disrupting active calls.
- When a new firmware release is published on the switchboard, an "Update Available (vX.X.X)" banner appears in the user's hardware settings.
- Users can click "Update Firmware Now (OTA)" to trigger immediate download, flash verification, and automatic reboot.
Administrators can override the official GitHub firmware distribution with custom compiled builds:
- Compile your binary in PlatformIO (
pio run). The output binary is located at.pio/build/esp32-s3-devkitc-1/firmware.bin. -
Binary Requirements:
- Must be an uncompressed raw binary (
.bin) compiled forESP32-S3with ESP-IDF / Arduino core framework. - Header magic byte must be
0xE9. - Partition scheme must match the dual-OTA partition layout.
- Must be an uncompressed raw binary (
- Open Admin Center → Firmware OTA Manager in the web dashboard.
- Enter your custom version string (e.g.
v1.2.0-custom-dsp) and selectfirmware.bin. - Click Upload Custom Firmware Override.
- The switchboard activates the custom override and notifies all online telephones.
- To revert to the official release channel binary, click Revert to Official Release.
DecaTone Open-Source Vintage Rotary Phone VoIP Switch • Licensed under GNU GPL v3.0