Arduino - Make Voice Phone Call

In this tutorial we are going to learn how to use Arduino to make a real-time VoIP (Voice over Internet Protocol) call to your phone. The code is available for Arduino Ethernet Shield 2 or PHPoC WiFi/Ethernet Shield.

Hardware Required

1×Arduino UNO or Genuino UNO
1×USB 2.0 cable type A/B
1×Arduino Ethernet Shield 2
1×Ethernet Cable

OR

1×Arduino UNO or Genuino UNO
1×USB 2.0 cable type A/B
1×PHPoC WiFi/Ethernet Shield
1×(optional)Ethernet Cable
Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.

Prerequisite

If you do not know about IFTTT and related concepts, We highly recommend you reading the following tutorials:

Wiring Diagram

  • Arduino - Ethernet Shield 2: we just need to stack the shield on Arduino Uno/Mega
  • Arduino - Ethernet Shield 2
  • Arduino - PHPoC Shield: we just need to stack the shield on Arduino Uno/Mega
  • Arduino - PHPoC Shield 2

How It Works

We need to:

  • Install IFTTT app on your phone (available for Android and iOS).
  • Create an IFTTT Applet on the IFTTT website, which connects Webhooks to VoIP Calls service.

When we create the Applet:

  • We can write the text message, which is converted to the voice message to be sent on the phone.
  • We can include data from Arduino to the message.

Workflow

  • Arduino makes an HTTP request to Webhooks of IFTTT,
  • Webhooks triggers VoIP Calls service on IFTTT
  • VoIP Calls service on IFTTT converts the text message to the voice message.
  • VoIP Calls service on IFTTT makes a call to IFTTT app on your phone.
  • Your phone is ringging.
  • You accept the call
  • The voice message is spoken.

※ NOTE THAT:

  • The message is specified on the Applet, not in the Arduino code.
    • Since this is VoIP, your phone need to be connected to Internet.
      • VoIP call is free
        • Arduino can speak to you, but you cannot speak to Arduino.

How To Use IFTTT with Arduino

  • Install IFTTT app on your phone
  • Create an IFTTT account and Login to IFTTT.
  • Create an Applet of Webhooks and VoIP Calls services. Please write down the event name we uses
  • After creating the applet, get Webhooks key from IFTTT.
  • Copy below Arduino code and paste in Arduino IDE.
  • Replace event name and Webhooks key in the Arduino code
  • Upload the code to Arduino

※ NOTE THAT:

  • The event name is given by you. You can give any name.
    • Webhooks key is created by IFTTT. You can not change it.

See the video tutorial at the end of this tutorial.

Arduino code

Arduino IFTTT code for Arduino Uno/Mega with Ethernet Shield 2

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-make-voice-phone-call */

Arduino IFTTT code for Arduino Uno/Mega with PHPoC Shield

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-make-voice-phone-call */

※ NOTE THAT:

This tutorial used the dynamic IP address (via DHCP). If you want to use the static IP address:

Result

In the two above codes, If succeeded,

  • The result in Serial Monitor looks like below:
  • COM6
    Send
    Connected to server HTTP/1.1 200 OK Date: Thu, 14 May 2020 07:06:40 GMT Content-Type: text/html; charset=utf-8 Content-Length: 44 Connection: close X-Top-SecreTTT: VG9vIGVhc3k/IElmIHlvdSBjYW4gcmVhZCB0a== ETag: W/"2c-4f52ca3d" Server: web_server Congratulations! You've fired the test event disconnected
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
  • Check your phone is ringging or not.
  • Accept the call
  • Hear the the voice message.

Video Tutorial

How to Include Sensor Data to Voice Message

To include data from Arduino to the voice message, we need to do:

  • In Arduino: Include data into HTTP request (in the query string).
  • In Applet: modify the setting to extract data from the HTTP request.

You can learn what is query string in this tutorial

There are 5 variables we can use in the setting of the IFTTT Applet.

{{EventName}} Extracted from HTTP request
{{OccurredAt}} System time when event occurs
{{Value1}} Extracted from the variable value1 of query string in HTTP request
{{Value2}} Extracted from the variable value2 of query string in HTTP request
{{Value3}} Extracted from the variable value3 of query string in HTTP request

For example:

  • In Arduino: Change String queryString = "" to String queryString = "?value1=26&value2=70" in above codes.
  • In Applet: Modify the text message in the setting of the IFTTT Applet as follow:

Hi guy,


This is Arduino Uno, I would like to inform you that:

- The outside temperature is {{Value1}} °C

- The outside humidity is {{Value2}} %


All the above value is measured at {{OccurredAt}}


Good luck and stay healthy!

In the above message, "
" make new line when displaying.

The voice message will be like below:

YOUTUBE VIDEO

You can read the temperature and humidity from sensor and put in the query string. See how to include data from sensor to query string

Challenge Yourself

Based on the above code, make the following project:

  • Make a VoIP call to your phone when the button is pressed
  • Make a VoIP call to your phone when the door is open
  • Make a VoIP call to your phone when the temperature is too hot ...

The Best Arduino Starter Kit

※ OUR MESSAGES