Remote Control Via GPRS/GSM SMS(Arduino)




About: Elecrow is an open hardware facilitation company based in Shenzhen. We integrate resources to serve new era of innovation. To make your making and innovation easier, we offer various development platform, mo...

Remote control, especially when this no ethernet or Wifi in the outdoor, has been a very profound things in the past. When I was a child, I always image that I have an equipment which can control all home appliances. Now, this becomes a reality,with Arduino and GPRS modules and some other related modules. And, it is also quite easy, even for the beginners. Here I will step by step to show you how to remote control your home appliances via the GPRS/GSM SMS and relays.

At first, let me give a brief introduction about relay to you.
Relays are used where it is necessary to control a circuit by a low-power signal (with complete electrical isolation between control and controlled circuits). It acts as a “low voltage controlled switch to control high voltage”, For example, if you want to control power of your washer or air conditioner, which is oftern110v or 220v,by microchip such as AVR or PIC, it is necessary and safe to make your microchip control the relay first, and then control the power supply of those device with the relay.

With the GSM SMS, it is possible to control the relay remotely. You can send a message via phone to control the relay on&off. With this, it will convenient to control any device wirelessly, especially helpfully on irrigation, smart home, outdoor remote control etc.
So, let’s make such a “SMS controlled Relay” with Arduino, GPRS/GSM and a Relay module.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Prepare Your Tools and Parts.

Select the module you need, a Xduino, a GPRS/GSM module and relay module is essential. The GPRS/GSM and relay in “Shield” would be more Convenient if works with Arduino:
The modules I used in this application are as below:
Relay Shield
Notice that the Rated Current of the relay Is important, make sure it meets your requirements. Otherwise it maybe dangerous. Here, I use a 2A rating current relay, which is enough for my application to control a lamp. Usually, home appliances consume currents as below
Device Max current(A)
Electric Fan 1
Lamp 2
TV 2
Refrigerator 2
Microwave Oven 8
Air Conditioner Depends on the power, usually <20
Of course, you will need some tools, such as the Insulating tape, Scissors...

Step 2: Insert a SIM Card to the GPRS Shield.

The GPRS module needs a SIM card to work, just the same as a phone. Insert a SIM card to the SIM socket , make sure the SIM is unlocked(that is, it works in your phone). Record the number of SIM Card, it will be used in programming for Arduino.

Step 3: Communicate With Crowduino/Arduino by Hardware Serial.

There are two methods for GPRS/GSM Shield to communicate with the micro controler, one is through the software serial port, another is hardware serial port. I will show you the second method,:communicate with the Crowduino/ Arduino by hardware serial port.
There are three pins 2*3 pins in the GPRS shield. You can see the silk mark in both side of pins, one side is Xduino(this is connect to the hardware serial port), and the other side is SWserial(this side is used as software serial port).  Just as the picture, plug the jumper caps to the Xduino side.

Step 4: Upload the Program.

As the programming, you will need the Arduino IDE to compile and download the program to Arduino.
Download the code :

Using_SMS_to_Control_Relay_Hardware Serial.ino

Before the compiling, please Open the file: SoftwareSerial.h in arduino\libraries\SoftwareSerial, and modify the
#define _SS_MAX_RX_BUFF 64 // RX buffer size
#define _SS_MAX_RX_BUFF 128 // RX buffer size
With this modification, the Arduino would have more buffer for the received message to avoid any communication bugs.
If you have not got ready to comprehend the details, you can just copy the codes into your Arduino IDE and down it to Arduino to continue.

Then, open this file by Arduin IDE.  Upload the program to the Crowduino, please note that don't connect the GPRS shield to Crowduino when uploading program,  very important!!!!

Step 5: Plug Relay+GPRS Shields to the Crowduino

Plug your shields to the Crowduino, you can put the GPRS Shield in the top or put the Relay Shield in the top. In here, because we need operating the Relay Shield later, so I put the Relay Shield in the top.

Step 6: Have a Try:Control the Relay Shield by Manually.

Now, the hardware has been connected, the program has been uploaded, we can have a try of the Relay Shield, This Relay Shield is very interesting! There are 4 Independent relays on the relay shield, each one can be controlled by the Arduino or manually. Also, there are 4 LEDs to show user the working state of relays.

Step 7: Have a Test for the Manual Control.

Before remote control the lamp, we can make a test. Here, we need a breadboard, a LED, two AA battery and some breadboard cables.

Plug the anode wire(the red one) of power supply to the anode of LED via the breadboard, using the same method, plug the breadboard jumper wire to the cathode of LED.

As we only need one relay here, we use the relay U3, which was controlled by the Arduino Pin5.
There are 3 terminals for U3 relay: COM3, NC3 and NO3. The COM3 is the common port, while the “NO” means “Normally Open” and NC means “Normally Connected”. That’s to say, the logic between these 3 terminals is:
When the relay is not active:
COM3 connected to NC3 and disconnected to NO3;
When the relay is active:
COM3 disconnected to NC3, and connected to NO3;

Insert the cathode wire(black one) of power supply to NO3, insert the cathode wire(orange) of LED to COM3 and tighten the terminal with a screwdriver.

Now, you can control the LED on or off via button 3, it is funny, hah...

Step 8: Control the LED Via SMS.

It is time to take out your mobile phone, (make sure your Gprs/Gsm shield is on) sent a text ”onb” to the number of the SIM card in GPRS module, the relay would be on, and the LED on!

It is necessary to explain the program, if you feel it is boring or it is too simple, just skip the following paragraph and remember there are 4 relays: U1, U2, U3, U4 each corresponding to d, c, b, a, if you want to control U1 on or off, you can send 'ond' or 'offd' to the number of the SIM card in GPRS module, the relay U1 would be on or off. If you want to control multiple relays in one SMS, just send the control commands in one SMS. For example, if I want to control U1, U2, U3 on and U4 off, sending 'ond onc onb offa' would reach this purpose. In here, I was using U3 to control the LED, so after I send 'onb', the relay U3 would be on , and the LED on!

There are some important functions you need to learn if you want to learn more on the gprs shied:

void ProcessGprsMsg()
Function: process the data Arduino get from the GPRS shield. If there is a string “+CMGR:” in the received data, theArduino will get to know: “I have received a short message, I need to analyze the message to know what to do next!”
Parameter: none
Return: none;

void ProcessSms( String sms )
Function: Arduinoanalyze the short message received. As received a string: ”ona”, it will pull up the related pin to active the relay, making the terminal COM4 connected NO4; while received a string “offa”, it will pull down the pin to make the COM4 and NO4 disconnected.
Parameter: the received message;
Return : none
In this program, once the Arduino receive the command ”offa”, which means “off the a” it will pull download the Arduno pin4, which change the relay U4 from inactive to active state. You will hear some noise like “bang..bang”, and also the LED would blinks.

Step 9: Connect the Lamp to the Relay Shield.

Finally to the another leading role  to play, do you still remember the lamp at the begining?  This step I will show you how to 'destroy' this nice and cute lamp.

Cut off the power supply wire of the lamp(as the picture), and insert one end to COM3,tighten the terminal with a screwdriver, and the other end to NO3 with the same method.

Make sure the Crowduino and Shields are connected to the power and the program was run normally.

Give the power to the lamp, push the switch of lamp to on, and stay away from it...

Step 10: Control the Lamp Via SMS.

Everything is ok, but the SMS. Take out your phone again, sent a text ”onb” to the number of the SIM card in GPRS module. The lamp was finally lit...

You can control all the device you want via this method. and, you can even control 4 relays simultaneously to control 4 device by modifying the program in Arduino. But again, Notice the Potential danger especially for the high voltage and big current decice. Good luck…

Instructables Design Competition

Participated in the
Instructables Design Competition



  • Indoor Lighting Contest

    Indoor Lighting Contest
  • Make It Fly Challenge

    Make It Fly Challenge
  • Growing Beyond Earth Maker Contest

    Growing Beyond Earth Maker Contest

106 Discussions

nidz b

Question 1 year ago

upon uploading program on Arduino uno and gsm module of sim900A serial monitor prints only ????
help me out

1 answer
Anshu ARnidz b

Answer 1 year ago

Usually, it's because the baud rate on the Serial monitor differs from the baud rate of your uploaded sketch.

In this case, the baud rate is 19200

As the code says:


So make sure you change 9600(default) to 19200 in your serial monitor


1 year ago

am using sim900a, whats code should i change ?

i was try, but while am open serial monitor just show " ? " not show the message.

1 reply
nidz bRahmatS15

Reply 1 year ago

did you get any alternate to solve this problem?


1 year ago

how can some one try when the code not available to trace.


1 year ago

How do command the arduino over the gsm to send me the values of an analog signal i.e tempereture sensor.


2 years ago

how can i alter this soo it works withe the SIM5320E


2 years ago

hello i'm sorry i am new in this

is crowduino the arduino?

and if it not could i use arduino instead?

i search to buy this crowduino but i could not find it for buy it in my country

what shall i do?


2 years ago


i need remote controlling for single led without using relay board connections with arduino uno. can u please let me know how to do it..!!

Thanks in advance..!!

2 replies

Reply 2 years ago

Hi, I did what you are asking, using the above example with some modifications.

#include <SoftwareSerial.h>

//SIM800 TX is connected to Arduino D11
#define SIM800_TX_PIN 11

//SIM800 RX is connected to Arduino D10
#define SIM800_RX_PIN 10

//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);

// EN: String buffer for the GPRS shield message
String msg = String("");
// EN: Set to 1 when the next GPRS shield message will contains the SMS message
int SmsContentFlag = 0;

void setup() {
//Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)

// Initialize PINs

pinMode( 2, OUTPUT);
digitalWrite( 2, LOW);

//Being serial communication with Arduino and SIM800
Serial.println("Setup Complete!");
// serialSIM800.println("AT+CNMI=3,3,0,0,0"); // set module to send SMS data to serial out upon receipt


void loop() {
//Read SIM800 output (if available) and print it in Arduino IDE Serial Monitor
// if(serialSIM800.available()){
// Serial.write(;
// }
//Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
char SerialInByte;
SerialInByte = (unsigned char);


// -------------------------------------------------------------------
// EN: Program also listen to the GPRS shield message.
// -------------------------------------------------------------------
// EN: If the message ends with <CR> then process the message
if( SerialInByte == 13 ){
// EN: Store the char into the message buffer
if( SerialInByte == 10 ){
// EN: Skip Line feed
else {
// EN: store the current character in the message string buffer
msg += String(SerialInByte);
// EN: Make action based on the content of the SMS.
// Notice than SMS content is the result of the processing of several GPRS shield messages.
void ProcessSms( String sms ){

if( sms.indexOf("ona") >= 0 ){
digitalWrite( 2, HIGH );
if( sms.indexOf("offa") >= 0 ){
digitalWrite( 2, LOW );

// EN: Request Text Mode for SMS messaging
void GprsTextModeSMS(){
Serial.println( "AT+CMGF=1" );

void GprsReadSmsStore( String SmsStorePos ){
serialSIM800.print( "AT+CMGR=" );
serialSIM800.println( SmsStorePos );

//Deletes SMS from sim once read

serialSIM800.print( "AT+CMGD=" );
serialSIM800.println( SmsStorePos );

// EN: Clear the GPRS shield message buffer
void ClearGprsMsg(){
msg = "";

// EN: interpret the GPRS shield message and act appropiately
void ProcessGprsMsg() {
if( msg.indexOf( "Call Ready" ) >= 0 ){
Serial.println( "*** GPRS Shield registered on Mobile Network ***" );

// EN: unsolicited message received when getting a SMS message
if( msg.indexOf( "+CMTI" ) >= 0 ){
// Serial.println( "*** SMS Received ***" );
// EN: Look for the coma in the full message (+CMTI: "SM",6)
// In the sample, the SMS is stored at position 6
int iPos = msg.indexOf( "," );
String SmsStorePos = msg.substring( iPos+1 );
// Serial.print( "SMS stored at " );
// Serial.println( SmsStorePos );
// EN: Ask to read the SMS store
GprsReadSmsStore( SmsStorePos );

// EN: SMS store readed through UART (result of GprsReadSmsStore request)
if( msg.indexOf( "+CMGR:" ) >= 0 ){
// EN: Next message will contains the BODY of SMS
SmsContentFlag = 1;
// EN: Following lines are essentiel to not clear the flag!

// EN: +CMGR message just before indicate that the following GRPS Shield message
// (this message) will contains the SMS body
if( SmsContentFlag == 1 ){
// Serial.println( "*** SMS MESSAGE CONTENT ***" );
// Serial.println( msg );
// Serial.println( "*** END OF SMS MESSAGE ***" );
ProcessSms( msg );

// EN: Always clear the flag
SmsContentFlag = 0;



Reply 2 years ago

Hey thanks!! I need code for controlling an led light with sms using SIM 808 using arduino UNO. But i have a doubt, is that necessary that gprs is necessary for sending message through GSM.


2 years ago

why, im can't download?

please help me..


2 years ago

I see no point doing this project unless you have these parts lying around because you happen to be an Arduino and Electronics hobbyist. Here are the reasons:

1. There is another project on this website that achieves the objective in <$50 (search for "start your car from a cell phone via GSM relay" on instructables)

2. Following this idea you can even remote start your car if the need be!

3. You can control up to 7 car functions (if the need be)

4. You do not have to be a software wiz at all. You do need to be a hardware wiz either if all you need is to have one function (to do more look my addition in the comments)

5. I don't see the author being too interactive / helpful. No blames just stating facts

6. You may easily be able to start a lamp with this project but starting a car is a different ball game and certainly not intended here

Wesley R Tech

3 years ago

Will this work with the Arduino Uno?


3 years ago


So I followed this tutorial step by step until he got to the lamp. I had the GSM controller working fine. The corresponding LED would light when I sent the appropriate text message. Then, I decided to add an LED display(with buttons), mounted right on top of the relay. In the code, I added simple lcd prints that would output the text message on the LCD. After compiling and uploading my code, something made a loud buzzing noise. I immediately killed the power. Now, when I send text messages, the corresponding LED on the relay does not light up. It my be noteworthy that the relay still works manually. PLEASE PLEASE help.

Thanks in advance.


3 years ago

im wondering if you can help me...... Im using the arduino uno r3 and when I send the text message it do anything..... I already check the serial monitor..... and if I send the message AT+CMGR=1 and then the second message it appears AT+CMGR=2 and so on and so on..... can you help me please? :)

1 reply

Reply 3 years ago

Wondering if anyone has solved the problem many of us are having with this sketch. I also get the AT+CMGR printout on the serial monitor, but sending the "ona" sms to the shield does nothing. Thanks, Ron


3 years ago

Just when I was wondering whether It's possible, I found this. Thanks for sharing, gotta test this out!


3 years ago

How can you automatically delete sms ?


3 years ago

Everything is okay..I programme arduino. ..then what is that you put void processgprsmsg() and void processsms() ? Sir I kindly request you. .can you tell me pls?