An open source internet phone system targeting old phone hardware to grant nostalgic experiences.
319
DecaTone is an open-source, private telephony switch and VoIP hardware system designed to revive vintage rotary telephones (such as the Western Electric 500/2500, Automatic Electric AE40/AE50, Kellogg, and European rotary phones). By replacing the antique telephone's internal central-office circuitry with a Hosyond ESP32-S3 microcontroller, DecaTone brings authentic rotary pulse dialing, physical mechanical bell ringing, and encrypted voice calls into the modern internet era with a self-hosted switchboard, party-line group calling, Over-The-Air (OTA) firmware updates, and a rich retro-futuristic web dashboard.
1–9, 0) with live PPS governor timing and break/make ratio diagnostics.80MHz on-hook idle $\rightarrow$ 240MHz active telephony) and WiFi modem sleep (WIFI_PS_MIN_MODEM) reduce thermal dissipation and standby power consumption.ring_enabled).111: Ringback line test (hang up, wait 3 seconds, phone rings back to test physical bells).119 / 099: Acoustic loopback echo test (real-time voice loopback to test microphone and earpiece levels).411: Speaking clock (speaks current time with classic time pips).567 / 300: Bell 103 / V.34 modem handshake simulator.711: National weather hotline with automated conditions readout.069: Automatic last number redial.078 / 079: Voice DND status readout and on/off toggle.0: Interactive handset voicemail playback (synthesizes spoken message counts and streams audio directly through the vintage earpiece).2: Toggle microphone mute / unmute with an in-ear confirmation audio chirp.3 + [Extension]: Invite a friend to a multi-party conference call.8: Place call on hold with melodic comfort chime.1400Hz + 2060Hz + 2450Hz + 2600Hz pulsed at 5Hz).078/079 control codes..bin firmware builds to override the official release distribution.decatone.db, custom branding (logo.png, favicon.png, navbar_icon.png), and voicemails/greetings into compressed .tar.gz archives.flowchart TB
subgraph Vintage Rotary Telephone
Hook[Handset Hook Switch] -->|GPIO 4| ESP[ESP32-S3 Hosyond]
Pulse[Dial Pulse Contact] -->|GPIO 5| ESP
Shunt[Dial Off-Normal Shunt] -->|GPIO 6| ESP
ESP -->|GPIO 7 PWM 20Hz| MOSFET[IRF640N MOSFET + 470nF Cap]
MOSFET --> Bell[Physical Mechanical Bells]
ESP -->|GPIO 16, 17, 18 I2S| DAC[MAX98357A I2S DAC]
DAC --> Speaker[Handset Earpiece]
Mic[Handset MAX4466 Mic] -->|GPIO 1 ADC1| ESP
end
subgraph DecaTone Self-Hosted Backend & Container
ESP <-->|WebSocket: Signaling & Audio| Server[Node.js / TS Switchboard]
Server <--> DB[(decatone.db SQLite WAL)]
Server <--> OTAService[OTA Firmware Engine]
Server <--> BackupEngine[Full Backup & Retention Daemon]
Server <--> MQTT[Home Assistant MQTT Broker]
end
subgraph User & Admin Web Client
Browser[React Web Dashboard] <-->|HTTPS & WSS| Server
Browser --> SwitchboardUI[3D Rotary Simulator & WebPhone]
Browser --> AdminCenter[Fleet Inspector, Backups & Branding]
Browser --> FriendsManager[Friends, VIP & Speed Dial 1-9]
Browser --> AudioSettings[Audio Volume, Normalization & Cadence]
Browser --> Diagnostics[Oscilloscope & Resonance Sweeps]
end
| Pin | Function | Peripheral / Connection |
|---|---|---|
| GPIO 1 | ADC1_CH0 | MAX4466 Analog Microphone Output |
| GPIO 4 | Input Pullup | Handset Hook Switch (Connects to GND when lifted) |
| GPIO 5 | Input Pullup | Rotary Dial Pulse Switch (Pulses to GND on return) |
| GPIO 6 | Input Pullup | Rotary Dial Off-Normal Switch (Grounded while rotating) |
| GPIO 7 | Output PWM | IRF640N MOSFET Gate (20Hz AC Bell Ringing) |
| GPIO 16 | Output | MAX98357A I2S BCLK (Bit Clock) |
| GPIO 17 | Output | MAX98357A I2S LRCK (Word Select / WS) |
| GPIO 18 | Output | MAX98357A I2S DOUT (Serial Audio Data Out) |
| GPIO 48 | Output | Built-in WS2812 RGB Status LED |
| GPIO 0 | Input | Boot Button (Hold 5s on boot for Setup AP) |
👉 View Detailed Electrical Schematics & Circuit Diagrams
# Clone the repository
git clone https://github.com/TylerHats/DecaTone.git
cd DecaTone
# Start via Docker Compose
docker compose up -d
Standardized image: tylerhats/decatone:1.2.0 or tylerhats/decatone:latest.
http://localhost:4000.cd firmware
pio run --target upload
DecaTone-Setup-XXXX.http://192.168.4.1.https://phone.example.com), copy your Unique Device ID, and click Save.Explore the full documentation on the DecaTone GitHub Wiki:
DecaTone is open-source software licensed under the GNU General Public License v3.0.
Content type
Image
Digest
sha256:d50433a2a…
Size
68 MB
Last updated
17 days ago
docker pull tylerhats/decatone