I’m at the age where things which were normal in my childhood are now described as vintage; cars, furniture, radios, and telephones.
I got an old BT rotary dialling phone from eBay a while ago, and have been hanging on to do something with it. We did use it as a phone for a while, but the handset speaker wasn’t great quality and the ring was so loud it made us all jump. This phone has two push-buttons on top – one stopped the bells ringing and the other was labelled “Recall” but didn’t seem to be working – at least not as I’d expect a button labelled recall to function.
I think my phone is a BT model 8746, having been wired with a plug-in jack at the factory. There are lots of websites with detailed information about these old phones which can help you identify the model you’ve got, host circuit diagrams and have useful repair and maintenance guides. Sam Hallas’ site is wonderfully detailed and britishtelephones.com was also useful. There’s also quite a bit of prior art with Raspberry Pis and rotary dialling phones, and I read these helpful posts from Dan Aldred and Giles Booth.
This is what I found inside the phone after I got the case off. I used this diagram to work out where the handset earpiece connected to the board, and the terminals for the handset cradle switch. Using croc clips I connected the dial to the Raspberry Pi’s GPIO and used Dan Aldred’s code to try to read the pulses. I got nothing, which was a bit worrying. I knew the dial was doing something as I used Giles’ LED trick to be able to see pulses. Next I connected the LED to the Raspberry Pi and wrote a few lines of code to make it flash from the GPIO. Nothing again, so I found another Pi (a 2B lurking unused) and tried again. This time the LED flashed and once connected to the phone’s dial I was able to count some pulses, so I diagnosed a dead GPIO on the Zero W and ordered a replacement – the 2B was never going to fit inside the phone!
Although I was now detecting pulses, the Pi was returning inconsistent results. I wasn’t going to be able to accurately report the number being dialled. So I abandoned the crocodile clips and cut the terminal connectors off the wires in the phone and soldered them to the Pi. I had hoped to be able to keep the phone in reasonably original condition so it could be returned to use as a telephone, but as this now wasn’t going to be an option I was free to get a bit more hacky with the phone. The transparent push-buttons on top of the phone looked like they’d make great light pipes so I hot glued an LED into the bottom of each one. These I connected to 3v from the Raspberry Pi via the two-way switch on the cradle, so when the phone is on the hook one lights up red until you pick up the handset when it switches off and the other button lights up green.
With the dial soldered to the Raspberry Pi I got a cleaner signal from the dial and could now reliably read the number dialled. I added some code to Dan’s example to play a different .wav file for each number between 1 and 9. Dialling 0 switches the Raspberry Pi off. My code is here if it’s helpful, but it doesn’t add much to Dan’s. I’ve chosen songs about phone calls or phone conversations, starting with Hanging on the Telephone by Blondie when you dial 1. To get the audio from the Pi into the handset I used a Pimoroni Speakerphat and wired it straight into the handset, having identified the wires for the speaker from the circuit diagram. The output was a bit too loud, so I soldered a 1k resistor into the circuit which made the volume more sensible.
At the moment the music carries on playing even after you hang up the receiver. I should have a go at using the hook switch to stop the playback, but I’m not sure I can squeeze many more wires into the space – it’s surprisingly cramped inside those old phones, despite how big they look from the outside!