Connect Arduino to analog telephone (like a FXS)

Hi there!

I want to connect an analog telephone set to an Arduino to react to the hook switch, play tones, decode DTMF and play sound.

For decoding DTMF I will go with the MT8870, hook switch detection is rather obvious I guess :), for playing tones I will use the "two PWM pins to generate an MF tone" approach with the Tone library.
Finally to play sounds I want to use a WT5001M02 module that I have successfully used in various other projects.

So my question is:
How to best connect a phone to the Arduino via its two wire (TIP / RING) interface.
I naturally need to provide power to the phone and I probably need some sort of 600 Ohm 1:1 transformer to decouple. But I am just wildly guessing here.
Just fyi - I do NOT need the phone to ring.

Any ideas and hints are appreciated!

Very best,


Do you have a circuit for the phone?

Normally an analogue standard direct connect to phone line uses a line voltage of 50v.

Or are you talking about a hands free modern electronic phone.

Without more information on the phone, we cannot help much.


Hi there!

I want to connect an analog telephone set to an Arduino to react to the hook switch, play tones, decode DTMF and play sound.

Any ideas and hints are appreciated!

Very best,

Tillman teleinterface


chucktodd: teleinterface


Thanks Chuck, I know that site.
It's mostly about the line interface though.
My goal is to create a simple board that would feature a MiniPro, a MT8870, that sound module, voltage regulation and a RJ11.
I would connect any "standard" analog phone set and my board would need to provide power to the phone.
My main question really is how to properly provide power to the phone (without the need for "ringing" vac) and hook up the audio output of the sound module and the PWM pins of the Arduino.
I believe the MT8870 is comfortable in being directly connected to tip/ring.

@Weedpharma: The idea is to create a circuit that would accommodate any regular (vintage) analog telephone set connected via RJ11.

Thanks for your effort guys!



Arduino Yun has Asterisk.

Asterisk is an open source framework for building communications applications. Asterisk turns an ordinary computer into a communications server. Asterisk powers IP PBX systems, VoIP gateways, conference servers and other custom solutions.

Gateway for POTS line to VoIP.

So it seems that 9VDC will easily power an analog phone but then how will I be able to detect the hook switch? I really want to avoid having to directly connect to the switch but rather want to only connect to a/b (tip & ring).
Update: by sensing the current I should be able to detect the hook switch state.
There is a difference of >30mA from on hook to off hook.
Update: will use a cheap ACS712 module ($1.3) instead of using a shunt resistor based circuit for sensing the current. Or is there an even easier / cheaper method?

In regards to the Arduino Yun Asterisk - thanks for that response but that is overkill.
I want to keep the cost to a minimum and the entire circuit should be <$20.

→ The question remains:
How to best hook up the phone’s a/b to provide it with 9VDC and also be able to inject the sound module’s output and the Arduino tone library output (the two PWM pins).
I have ordered a couple of 600Ohm 1:1 transformers to start playing around with that approach.
But any additional help is greatly appreciated.



Look at these Doc,%20Low%20cost%20telephone%20line%20interface%20_DAA,%20FXO_.pdf,%20Transformer-based%20phone%20line%20interfaces%20(DAA,%20FXO),%20Rev1.pdf

Look at these Doc,%20Low%20cost%20telephone%20line%20interface%20_DAA,%20FXO_.pdf,%20Transformer-based%20phone%20line%20interfaces%20(DAA,%20FXO),%20Rev1.pdf

Thanks Bill,

but after a quick glance it seems that they all refer to an FXO type of interface and not the FXS.
Interfacing the CO (=connecting to the telephone line and not the actual set) is naturally significantly more complex as you have to deal with higher voltages and also the VAC component of the ringing impulse.

In my particular case there is no CO involved as I just want to hook up a single phone set to the Arduino to react to some DTMF and play a couple of sounds.



Hi Tillman,

Did you ever complete this project? I'm attempting to do something similar and would love to see how you accomplished it.


Hi Tillman, Did you ever complete this project?

Tillman has not posted in over 3 years, so a reply seems unlikely.

Best to start your own thread.

I was able to connect an ESP32 to the analog telephone (I am still developing it).
Now, I can do all this at the same time:

  • detect call (just with an optocoupler)
  • detect caller ID (with the HT9032D)
  • hook up (always with an optocoupler)
  • send a wave audio over the DAC output (with a 600-600 audio transformator)

Now, I am trying to detect the DTMF without any external component... Hope to find a solution. But it is possible with a 4$-ESP32!

Once it works, I will create a robocall able to detect call centers and unwanted calls and also send a notification to the smartphone once someone is calling.

Maybe I will open source my entire project, once it works.

This is a nice page if you want the schematics:

Bear in mind that type approval for equipment that connects to analogue telephone lines is required in most locations in the World.

A person (telephone engineer) may be working on the lines directly so its essential any equipment you connect has gone through a safety certification process.

In the old days we had a thing called the modem.
Almost any of the old serial modems will do what you want - out of the box.