Control an Arduino from your Phone

Here we'll show you how to use your phone as a remote control for your Arduino. Specifically, the example sketch calls a phone number and asks whether it should blink the LED attached to pin 13.

Your Arduino can use text-to-voice to construct phone menus that can be used by you or anyone else to control your Arduino from afar. With this power, your Arduino can work as a remote monitor and call you when it wants your input, opening up a wide range of possibilities for applications that react based on remote user input.

This sketch uses a choreo from our Twilio bundle.

Get Set Up

1Make sure you have a Temboo account. If you don't already have one, you can register for a free account here.

2You'll also need a Twilio account, which you can create here.

3After you've created your Twilio account, retrieve your Twilio Account SID and Auth Token - you'll need them to run the sketch. You can find your Twilio Account SID and Auth Token on your Twilio Dashboard.

4On the Twilio website, go to your Twiml Bin, and create two Twiml files like the ones below.

<Gather input="dtmf" timeout="10" numDigits="1" action="" method="GET">
<Say voice="alice" language="en-US">Enter 1 followed by the star key to turn on the LED.</Say>

Note that the above XML needs to contain your Temboo callback URL that includes your Temboo account name as part of the URL.

<Say voice="alice" language="en-US">Consider it done!</Say>

After creating your two Twiml files, make sure to copy the URLs for these files - you'll need them to run the sketch.

5Make sure that your Arduino is connected to the Internet.

Auto-Generate the Sketch

6Go to the Twilio > Calls > CaptureKeyPadEntry in our Library.

7Select Arduino from the drop down menu. Choose your device and make sure that you've added details about how your Arduino is connecting to the internet.

Selecting your Device

8Click Run Now to test out the Choreo from our website. Confirm that your Phone gets a call and that when you enter a number on the keypad, that number is returned as part of the Twilio response in the Output section of the page.

Testing the Twilio Inputs

Testing the Nexmo Choreo from our website

9Create a Profile from your Choreo inputs, so that you can refer to this profile in your sketch - this will help save RAM on your Arduino board, and also lets you change the behavior of your sketch by editing the Profile on our website as opposed to editing your code.

Save Profile

10Using the visual pin board, click one of the Arduino's pins to configure a digital actuator. Next, set an Actuator Trigger Condition for your digital actuator. Indicate that you want to set your actuator's digital pin to high if the user presses 1 on their keypad after receiving the phone call.

Setting an Actuator Trigger Condition

11When you've confirmed that the Choreo runs successfully and you've saved a Profile, you can copy the auto-generated Arduino code from the Code section and paste it into your Arduino IDE.

12The auto-generated sketch references the TembooAccount.h header file, which contains your Temboo account information and internet shield details. You'll find the code for this file beneath your generated sketch. Create a new tab in the Arduino IDE called TembooAccount.h and copy in the header file information.

13Run the sketch, generate a phone call from your Arduino and use it to control your board!

What Next?

When you've got this sketch working, you're in a position to build any number of applications that involve sensing information on the Arduino and delegating control to a human when it's time to make a choice about what to do next. Your own personal army of robot servants is one step closer to reality!

Need Help?

If you've got questions about Nexmo, it's best to start by learning more about the Choreo that we use in this example. You might also find what you need by searching Nexmo's Knowledgebase.

For anything to do with Temboo and how it works with your Arduino, we're always happy to help. Just email us at, and we'll answer you as quickly as possible.