Short answer: A Raspberry Pi Zero 2W handles a payphone-revival build with room to spare. You wire the payphone's handset to a USB sound card, drive the hookswitch through a GPIO input, listen to the DTMF keypad via a second GPIO line or a decoder chip, and run Asterisk or a simple Python state machine to place SIP calls over Wi-Fi. Total parts cost lands around $60-100 depending on payphone source.
Why this project keeps coming back
Every year another Reddit thread hits /r/raspberry_pi with someone reviving a 1990s bell-style payphone. The build is beloved for a reason: real telecom hardware has satisfying weight, satisfying sounds, and just enough electrical weirdness to make the software side interesting without being punishing. And the Raspberry Pi Zero 2 W is now cheap enough and capable enough that the SBC side of the project is almost free.
This synthesis walks the whole build — parts, wiring, software, and the gotchas that turn a weekend project into a two-weekend project.
Key takeaways
- Pi Zero 2W is enough. No need for a Pi 4/5 unless you want video or a local voice assistant.
- USB sound card is required. The Pi Zero 2W has no analog audio out — pick a $5 USB-A CM108 dongle.
- Handset audio is line-level, not mic-level. Attenuate the mic path, boost the earpiece path.
- Hookswitch is a mechanical switch. Debounce in software (10 ms low-pass).
- DTMF: two approaches. Software decode from mic-in, or dedicated MT8870 IC. Both work; hardware is simpler.
Parts list
| Part | Purpose | Approx. cost |
|---|---|---|
| Vintage payphone (Western Electric / Northern Telecom) | Enclosure + handset + keypad | $20-60 (eBay) |
| Raspberry Pi Zero 2 W | SBC | $18 |
| microSD 16GB+ | OS | $8 |
| USB sound card (CM108 chipset) | Handset audio I/O | $5 |
| MT8870 DTMF decoder module | Keypad decoding | $5 |
| Small buck converter (12V → 5V/2A) | Payphone power → Pi power | $6 |
| GPIO wire + resistors + transistor + diode | Signaling | $3 |
| 12V power brick | Wall power | $8 |
| Total | ~$75-110 |
For the payphone itself, eBay listings of Western Electric single-slot or GTE Automatic Electric are common under $50. Working phones (with intact handset, hook, and keypad) are the sweet spot — you do not need dial tone or the original coin mech.
Wiring the handset
The handset in a payphone has four wires that matter:
- Two for the earpiece (speaker).
- Two for the microphone (carbon element or electret with bias).
Old carbon-microphone handsets need a small DC bias (~4-6V through ~200Ω). Newer electret handsets need proper mic-in bias from a modern audio card. The safe path: rip out the carbon mic, drop in a modern electret capsule with a matching amp. Alternately, buy a USB sound card with dedicated mic-in and let it provide bias.
Wire the earpiece to the USB sound card's headphone-out. A series resistor (~100Ω) prevents blowing the earpiece.
Hookswitch
The hookswitch is a mechanical SPST switch that closes when the handset is lifted (or opens — check your phone). Wire it as a pull-down on a GPIO pin:
Add a 10kΩ pull-up to 3.3V and debounce in software (poll every 5 ms, register state change after 3 consecutive same-state reads).
Keypad — hardware decode with MT8870
The Mitel MT8870 is the classic DTMF decoder. Give it your microphone input, and it produces a 4-bit binary output on 4 pins plus a StD (data valid) pin. Wire those 5 pins to 5 GPIO inputs on the Pi. When StD goes HIGH, read the 4-bit value and map to a digit.
Alternative: pipe the mic to the Pi's ALSA input and run software DTMF decoding (Python numpy + Goertzel algorithm). Simpler wiring, more CPU load.
Software stack
Minimal Python state machine:
Full-fat option: Asterisk. Install Asterisk on Raspberry Pi OS, configure a SIP account with a VoIP provider (Twilio, Voip.ms, etc.), map the Pi's ALSA sound card as a chan_alsa endpoint, and route hook + DTMF through a dialplan. More setup, but you get proper SIP calls, call waiting, and voicemail. Great for makers who want to learn Asterisk.
Middle ground: Baresip or PJSIP. Lighter than Asterisk, more capable than a bare Python state machine.
Powering the phone from wall power
Original payphones expect -48VDC on the phone line to power the ringer and DC-holding circuit. You do not need that for a revival — the ringer probably lives in the base and can be driven with a small 90VAC generator IC (SN75067) if you want mechanical ring, or you can replace it with a small speaker and play a WAV file for ring.
Power path: 12VDC wall brick → buck converter → 5V/2A rail for the Pi → USB power to the Pi Zero 2W. Add a 4700μF capacitor near the buck output to hold up the rail during ringer surges.
Common pitfalls
- Wiring the earpiece to line-level directly. You will fry the earpiece. Use a series resistor.
- Not debouncing the hook. You will register phantom off-hook events. Debounce in software.
- DC bias on old carbon mics. Modern audio cards do not provide it. Replace the mic capsule.
- Skipping the buck converter. The Pi Zero 2W runs unstable on unregulated 5V. Give it clean, regulated power.
- Assuming the ringer works. It probably needs 90VAC 20Hz — replace with a speaker + WAV unless you love AC hazards.
Companion accessories
- USB sound card: CM108 chipset (Syba/Sabrent are common brands)
- SD card: Samsung/SanDisk 16GB — see our SBC storage picks for larger projects
- Alternate SBC for expanded builds: Raspberry Pi 4 Model B 8GB — worth it if you plan to add voice assistant or Asterisk with codec transcoding
- USB IDE/SATA adapter for salvaging old drives inside the enclosure: Unitek SATA/IDE to USB 3.0 adapter
Extensions
Once the base build works, obvious upgrades:
- Rotary-phone version. Same electrical pattern with a rotary dial pulse decoder instead of DTMF.
- Answering machine. Record incoming calls to
wav, play back on a "messages" DTMF button. - Local voice assistant. Wire a Pi 4 8GB and run a local Whisper + Llama-3-8B loop. Now your payphone answers questions.
- Emergency-mode failover. If Wi-Fi drops, fall back to a USB LTE dongle.
Bottom line
A payphone-to-VoIP conversion on a Raspberry Pi Zero 2 W is a satisfying weekend build. The Pi handles the SBC side for ~$18; the payphone itself is the character piece. Wire the handset carefully, debounce the hook, decode DTMF in hardware for simplicity, and land on Asterisk if you want production SIP or a Python state machine if you want to just make the thing ring your phone.
Related guides
- Secluso: Private DIY Home Security on a Raspberry Pi 4
- Cyberdeck Raspberry Pi 4/5 mini music workstation
- Amstrad CPC 464/664 emulator on Raspberry Pi Pico 2
- Best NVMe SSD for local LLM model storage
Citations and sources
- Asterisk — official documentation
- Raspberry Pi Foundation — Zero 2 W product page
- Microchip — MT8870 DTMF decoder datasheet
This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.
