Retrofitting a Vintage Phone into a WiFi Controller
I had a 2015 desk telephone sitting on a shelf. It had a satisfying keypad, a proper handset with a hook switch, and a microphone hidden in the earpiece. It also had a cable going nowhere. The goal was simple: make every physical interaction on this phone — a key press, lifting the handset, speaking into the mic — produce a network event that any software on the local network can listen to.
The result is a single ESP32-C6 inside the phone, connected to WiFi, sending WebSocket messages when buttons are pressed. A passive analog circuit carries the microphone audio to a 3.5mm jack for a sound console. Two independent systems sharing the same enclosure.
The Hardware Assumptions That Were Wrong
The phone's keypad has 8 wires coming out of it. Standard telephone keypads are wired as a 4×4 matrix — 4 columns, 4 rows, 16 intersections, 12 active. I assumed the same. I was wrong.
After building a brute-force GPIO scanner (gpio_diagnostic) that drove every pin LOW one at a time while reading all others, and then a guided interactive scanner (keypad_scanner) that prompted me to press each key individually, the actual wiring turned out to be a 3×4 matrix: 3 columns, 4 rows, 7 wires. The 8th wire was unconnected. Only 12 intersections exist, and all of them are active.
The microphone was a second surprise. I initially assumed it was a carbon granule mic — common in older telephones, requires a DC bias current of around 20–80 mA. Measuring the impedance of the handset mic pair gave 1.73 kΩ. That's an electret microphone: a condenser element with a built-in FET, requiring a small bias voltage (not current), drawing under 1 mA. The bias circuit is much simpler and draws almost nothing from the supply.
Two Independent Circuits
The architecture splits into two completely separate systems:
Circuit 1 — ESP32-C6 (digital)
The ESP32-C6-WROOM-1-N8 handles keypad scanning and WiFi. It scans the 3×4 matrix by pulling each column LOW and reading the four row pins with internal pullups. On a key press it looks up the configured message for that button and sends it over WebSocket to a host IP and port stored in NVS flash. A single LED on GPIO18 gives visual feedback.
Circuit 2 — Passive audio
A 4.7kΩ resistor from 5V provides bias voltage to the electret mic through the hook switch. A 10µF coupling capacitor blocks the DC and passes the audio AC signal to a 3.5mm jack. When the handset rests on the cradle, the hook switch (normally open) breaks the circuit and the mic is silent. When you lift the handset, the circuit closes and audio flows. No firmware, no GPIO, no ADC — entirely mechanical and passive.
Measuring Node A (junction of R1 and mic+) gave 1.34V DC, consistent with the calculated value: 5V × (1730 / (4700 + 1730)).
Web Interface
Beyond sending WebSocket messages, the ESP32 also serves a small web interface over WiFi:
/— a live dashboard showing the state of all 12 keys in real time (polled at 250ms via/api/status), plus WiFi signal strength, uptime, and free heap
/config— configure WiFi credentials, WebSocket server IP and port, and the message string sent per button
- Captive portal — on first boot or failed WiFi connection, the ESP32 opens an access point called
VintagePhone-Setupand serves a config page athttp://192.168.4.1. The LED blinks rapidly during portal mode and three times on successful WiFi connection.
All configuration is stored in NVS flash and survives power cycles.
What It Costs
The electronic components come to around €10: the ESP32-C6 dev kit, a resistor, a capacitor, a 3.5mm jack, an LED, and some jumper wire. The phone itself was €5–10 secondhand. The whole thing runs off a USB-C power bank.
What's Next
The WebSocket client implementation is the remaining piece — the firmware currently logs key presses to serial and has a stub for the send call. The OBS WebSocket protocol (v5) and a Max/MSP patch are the first two targets. PCB design to replace the breadboard wiring is also in progress using EasyEDA.
All code, schematics, and documentation are open source: github.com/tlahitte/Retrofitting_VintagePhone