Using Twilio M2M Commands with an Arduino MKR GSM 1400

Using Twilio M2M Commands with an Arduino MKR GSM 1400 © GPL3+

Sending Machine to Machine Commands with a Twilio SIM and an Arduino MKR GSM 1400.

  • 6 respects

Components and supplies

Apps and online services

About this project

The easiest and quickest way to get started with Programmable Wireless connectivity for your IoT (Internet of Things) devices is to use machine to machine commands.

With the simple steps in this quickstart, we will show you how you can send and receive text-based commands using the Arduino MKR GSM 1400 development board.

While most of your code will be transferable, new product development for 2G in the United States is not a good choice. 2G networks in the United States are being deprecated. For new product development, we suggest researching alternatives or discussing your idea with the Twilio Programmable Wireless team.

In this quickstart, you'll learn how to:

  • Sign up for a Twilio account.
  • Purchase your first SIM cards for Twilio Programmable Wireless.
  • Insert your SIM card into the Arduino MKR GSM 1400 development board.
  • Power and flash the board.
  • Send a machine to machine command from the Arduino MKR GSM 1400 and read it in the Wireless Console.
  • Receive a machine to machine command on the Arduino MKR GSM 1400.

Hardware requirements

Setup and software requirements

Not the quickstart you were looking for today? See our other Programmable Wireless quickstarts or see all Wireless resources.

Sign up for Twilio and purchase a SIM card

Already have a Twilio account and a SIM card? Skip ahead to the register and activate step by clicking the button at the end of this section.

Before you can connect with Twilio Programmable Wireless, you'll need a Twilio Account and a SIM card.

After you have signed up, then purchase a set of 3 starter SIMs:

  • Open the Console and from the Programmable Wireless menu, click Orders.
  • On the Order SIM Cards page, enter your details (Order Details, Delivery Address, and Payment method), and then submit your order.

Orders of 10+ SIMs will be delivered with the SIM cards already registered to your account.

Detailed information about ordering SIMs is available here.

Register, choose a rate plan, and activate the SIM

Once you receive your SIM shipment, pick a favorite and unpack it.

Register and give a unique name for the SIM

In the Console, open the Register a SIM page in the SIMs section of the Programmable Wireless menu and enter the registration code as instructed:

Next, pick a distinct Unique Name for this SIM.

Choose a rate plan

Select a rate plan from the options provided by Twilio.

We have created data metering quotas that are optimized for both high and low usage devices. You can use our data usage estimator to find the right Quota for you. Rate Plans also let you control every aspect of what your device can do with data, voice, and messaging.

For this quickstart, you can choose a low volume plan but ensure the plan you choose includes messaging.

Activate your SIM card

When you're happy with the name and plan, Activate the SIM card.

Detailed information about registering and activating SIMs is available here.

Getting ready to connect to the network

Attach the LTE antenna

If your module does not come with a PCB (onboard) antenna, you need to connect a wired PCB antenna to the board. If you are unsure, check for an antenna included with your module or read the documentation included with your purchase.

Carefully attach the antenna to the board. Although your board may differ, here is a picture of one module with an antenna connected:

Insert the SIM card

Punch out your Twilio SIM card and, if necessary, insert it into the slot on the module. Be very careful to get the orientation correct with the SIM card insertion. If you are unsure of the correct side to insert, look for a diagram on the housing or the board showing the layout.

On our version of the board, the SIM housing shows the correct SIM orientation:

Insert the LiPoly battery

Locate the JST connect and plug the LiPoly battery into the board. The battery must be plugged in at all times for connectivity to work.

Your setup may vary, but one possible setup will look like this:

Install the Arduino MKRGSM library

  • In the Arduino IDE, go to Sketch > Include Library > Manage Libraries.
  • In the Library Manager search for and install the MKRGSM library.

Install the Arduino SAMD board cores

Add the board manager package

  • In the Arduino IDE, go to Tools > Board > Board Manager.
  • Search for Arduino SAMD Boards package and install the package.
  • Restart the Arduino IDE.

Connect and Program the Arduino MKR GSM 1400.

You can download the code directly from this directory on Github.

Load the file m2m_command_arduinomkrgsm.ino into the Arduino IDE. Alternately, you can copy/paste the code into a new Arduino sketch using File > New Sketch.

Power and select the Arduino MKR GSM 1400

  • Power your Arduino MKR GSM 1400 by connecting it to your computer using a USB cable.
  • Wait for a few moments.
  • Then in the Arduino UI, select your board and the serial port it enumerates from Tools > Board > Arduino MKR GSM 1400.

Flash the Arduino MKR GSM 1400

Now, upload (flash) the code to the board. You have a choice:

  • One way is to use the Upload button on the toolbar
  • Another is to select Upload from the Sketch Menu.

One way is to use the buttons on the toolbar, another is to select 'Upload' from the 'Sketch' Menu.

While the board receives your code, open the Serial Monitor from the Tools menu.

And that's all you need to do on the Arduino side! Watch the monitor and you should see it churn away and send an M2M command:

If you don't see the above, make sure the power is connected and you have the speed set to 115, 200 baud. Power cycle or hit the reset button on the Arduino board to have it spin through again.

Let's look at how the message was sent in the next session then prepare to send a response from our computer.

Send a machine to machine command from an Arduino MKR GSM 1400

We're included a very small helper library to assist you sending M2M commands. Here's the method to send a machine to machine command:

You are viewing an outdated version of this SDK.

Twilio Machine to Machine Commands Quickstart on Arduino MKR GSM 1400

#include <MKRGSM.h>

Arduino MKR GSM 1400 definitions:
GSM gsmAccess;
GSM_SMS sms;

char senderNumber[20];

void setup() {
boolean connected = false;

Arduino MKR GSM 1400 setup
Serial.println("GSM initialized");
Serial.println("Sending Command");

Send an SMS to short code 2936, which is a Twilio
Machine to machine command.

Keep `command` under 160 ASCII characters, or 67 UCS-2 characters.
sms.print("Hello World from the MKR 1400");

Write a Twilio M2M command.
Serial.println("Command Sent!");
Serial.println("Waiting for Commands");

Sending an M2M command with the Arduino MKR GSM 1400 using the helper functions provided.

Send a machine to machine command from an Arduino MKR GSM 1400

Sending an M2M command with the Arduino MKR GSM 1400 using the helper functions provided.

Behind the scenes, we send an SMS to the shortcode 2936.

Verify the machine to machine command was sent

The easiest way to check the command was successful is through the Programmable Wireless Console.

  • From the Console, select SIMs from the Programmable Wireless menu.
  • Click the SIM you are using for this project, then navigate to the Commands tab.
  • Copy the SIM Sid.

As you might guess, we will implement the reverse - you'll receive an inbound SMS from 2936 on the Arduino triggered by an API call using the SIM's Sid. Let's look at that next.

Receive a machine to machine command on the Arduino MKR GSM 1400

Sending (or in this case, manually responding to) a machine to machine command is very straightforward from your development machine.

Send a command to the SIM

The fastest way to respond to a command is to use cURL if available. If you can, send a command (under 160 ASCII characters) back to the SIM using cURL:


Otherwise, commands can be sent from our helper library. The example below uses Node.js.

// Download the Node helper library from
// These consts are your accountSid and authToken from
const accountSid = 'ACae0776f402697dcbe45225fc70d73f8f';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);

command: 'wakeup',
callbackUrl: ''
.then(function(response) {

Receive the command on the Arduino MKR GSM 1400

Again, we've included code to help you receive the M2M command easily.

void loop() {
int c;

Read a Twilio M2M command. Note that it will find the lowest
indexed one with the code as is; in your code. if you cache the
index you can start the next read_command to move to the next one.
if (sms.available()) {
Serial.println("Command received from:");
sms.remoteNumber(senderNumber, 20);

/* Print the command */
while ((c = != -1) {

/* Delete the stored command */

Receive a M2M command by searching for the 2936 short code in incoming SMS messages to the Arduino MKR GSM 1400

To test this out, return to the Arduino IDE and make sure the Serial Monitor is still connected.

Cycle power or reset the Arduino MKR GSM 1400. If all goes well, the Arduino MKR GSM 1400 should once again send a command, then after a short wait, you should see...

... magic!

And that's all there is to machine to machine commands. You now know how to send them from an Arduino MKR GSM 1400 and check their status in the console. You can also return a message from your machine and have seen how to receive it on your Feather.

With those basic building blocks you're ready to build the next big IoT Thing!

What's next?

Now that you have seen how to send and receive machine to machine commands on both your Arduino MKR GSM 1400 and development machine, you're ready for your custom application. Here are some possible ideas to take it to the next level:

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.



Arduinogsm full qcons95xoo


Similar projects you might like

Publish Any Event to Wia Using Your MKR GSM 1400

Project tutorial by Spivey

  • 5 respects

Arduino MKR GSM 1400 and DTMF

by Arduino_Genuino

  • 35 respects

Securely Connecting a MKR GSM 1400 to Google Cloud IoT Core

Project tutorial by Arduino_Genuino

  • 41 respects

IoT Pressure Sensor: MKR GSM + Arduino Cloud + Google Sheets

Project tutorial by wahltharvey

  • 48 respects

SCADA Using Cellular IoT with MKR GSM 1400

Project tutorial by Emile Ackbarali

  • 12 respects
Add projectSign up / Login