Introduction: Android and Arduino SMS Based Home Automation

Picture of Android and Arduino SMS Based Home Automation

Recently, I received a relatively cheap Quad Band GSM/GPRS module to play with. It is a SIM800L module, and communicates with any micro via a serial port. It came complete with a panel mount antenna.

I decided to build a simple SMS Controller system which uses short message service (SMS) commands to control devices and indicate alarms.

Step 1: SMS Commands

Picture of SMS Commands

AS with any communication system, specific commands need to be send to a remote device to tell it what to do. Likewise, the remote device needs to reply or react on these commands. This project consists of two parts, the SMS Controller, and an standard cellular phone.

The idea was to create a simple SMS Controller with four digital outputs. Depending on the received SMS, the unit must be able to control the individual outputs.

I also decided to include four digital inputs. This can be used to indicate alarms or other information.

Before starting the build, I decided to create specific commands for specific functions. This 'commands' will be sent using an SMS from a cellular phone.

SMS Controller Receive Commands:

o1:1 - turn output 1 On

o1:0 - turn output 1 Off

o1:p - pulse output 1 On, then turn Off

o2:1 - turn output 2 On

o2:0 - turn output 2 Off

o2:p - pulse output 2 On, then turn Off

o3:1 - turn output 3 On

o3:0 - turn output 3 Off

o3:p - pulse output 3 On, then turn Off

o4:1 - turn output 4 On

o4:0 - turn output 4 Off

o4:p - pulse output 4 On, then turn Off

???? - Request status of Inputs and Outputs

#### - Reset system

For feedback, the SMS Controller should respond to the received commands, and reply with an SMS. I decided that this reply SMS should include the status of all I/O pins.

SMS Controller Response Commands:

i1:x i2:x i3:x i4:x o1:x o2:x o3:x o4:x

where x is the I/O status, 1 for On, 0 for Off.

Step 2: Building the SMS Controller

Picture of Building the SMS Controller

Equipment required:

Any Arduino, or stand-alone ATMEGA328p on a breadboard

SIM800L GSM/GPRS Module with a sim card capable of sending and receiving SMS's

Step down DC/DC converter

NOTE !!!

The DC/DC converter is required to power the SIM800L module. This module operates between 3.7V and 5V, depending on the version you have. This module also requires a power supply that can deliver up to 2A when the module transmit data. It can not be powered directly from the Arduino Uno !!!

The circuit is quite simple. I have assembled and tested it on breadboard.

The power to the circuit is via the DC/DC converter, with the output voltage set to 4.5V. There are four LEDs to simulate the digital outputs, and four buttons for the digital inputs. The SIM800L is connected to the Rx/Tx pins of the ATMEGA328p.

A 5th LED is used to indicate when the system in busy sending an SMS.

Step 3: Programming the ATMEGA328p

Picture of Programming the ATMEGA328p

Before programming, open the INO file, and edit the phone number. Replace xxxxxxxxxx with your own cellular phone number in line 46. Recompile, and upload the file.

Also, read the instructions on how to configure the Software Serial port in the INO file.


// ! ! ! NOTE ! ! !

// ================




// To use Software Serial, the user should also change the Software Serial BUFFER to 200.

// This must be edited in the following file:


// C:/Program Files/Arduino x.x.x/Hardware/Arduino/AVR/Libraries/SoftwareSerial/src/SoftWareSerial.h


// Change buffer as below:


// #ifndef _SS_MAX_RX_BUFF

// #define _SS_MAX_RX_BUFF 200

// RX buffer size

// #endif



Refer to this instructable to program the ATMEGA328p on the breadboard using an Arduino UNO.

Step 4: Using the SMS Controller

Picture of Using the SMS Controller

Using the SMS Controller

The SMS Controller will automatically send an SMS to your phone if any of the four inputs are triggered. The details of the trigger will be contained in the SMS text.

The SMS messages and commands can be edited to your needs in the INO file.

Testing the SMS Controller Outputs

From your cellular phone, send the following commands to your SIM800L simcard number:

o1:1, this will turn on output 1.

On your phone, you will receive the following SMS:

i1:0 i2:0 i3:0 i4:0 o1:1 o2:0 03:0 o4:0

01:0, this will turn off output 1.

On your phone, you will receive the following SMS:

i1:0 i2:0 i3:0 i4:0 o1:0 o2:0 03:0 o4:0

01:p, this will turn on output 1 for 1 second, then turn output 1 off again (pulsed).

On your phone, you will receive the following SMS:

i1:0 i2:0 i3:0 i4:0 o1:0 o2:0 03:0 o4:0

Testing the SMS Controller Inputs

On the SMS Controller, press button 1 briefly

On your phone, you will automatically receive the following SMS:

i1:1 i2:0 i3:0 i4:0 o1:0 o2:0 03:0 o4:0

On the SMS Controller, press button 2 briefly

On your phone, you will automatically receive the following SMS:

i1:1 i2:1 i3:0 i4:0 o1:0 o2:0 03:0 o4:0

On the SMS Controller, press button 3 briefly

On your phone, you will automatically receive the following SMS:

i1:1 i2:1i3:1 i4:0 o1:0 o2:0 03:0 o4:0

As can be seen on the received SMS, the outputs changes according to the commands received. However, the inputs does not change back from a 1 to a 0 after the buttons were pressed. Because I wanted to be able to see any changes on the inputs, I decided to seal in the input status until a reset command is send to the SMS Controller.

Reset Alarms

To reset the input status, send the following command:

####, this will reset the input status.

On your phone, you will receive the following SMS:

i1:0 i2:0 i3:0 i4:0 o1:0 o2:0 03:0 o4:0

Status Updates

You can also request the status at any time by sending the following command:

????, this will request a status update of the I/Os.

On your phone, you will receive the following SMS:

i1:x i2:x i3:x i4:x o1:x o2:x 03:x o4:x

where x indicates the status, 1 for on, 0 for off.

Step 5: Android Application

Picture of Android Application

Using MIT App Inventor 2 (, I created a simple user interface for my Android cellular phone. This app allows you to customise the description of each I/O. It also allows for entry of the telephone number.

The four buttons are used to control the Outputs, while the check boxes indicate the input status.

To edit the app, create a MIT App Inventor 2 account, and import the AIA file.

To install the app on your phone, copy the APK file to your phone, and install it. You will have to enable the installation of apps from "Unknown Sources" under your phone's security settings.


sokic (author)2017-05-15

Hi Finaly this think is working, my arduino was problem,

Thank you very much Eric, This Project is GREAT.

I will add soon readings of temperature and moisture.

Eric Brouwer (author)sokic2017-05-15

Hi again

Great news....

You actually made me build the circuit again to test the software. I was just busy when I noticed your comment. Thanks for your feedback.



sokic (author)2017-05-14

Hi Eric,

Did you send and receive any sms using GSM_Android_V200.ino and SIM800L ?

I still think that code is not completed.


sokic made it! (author)2017-05-12


This is my hardware cofiguration.

when I use simple send sketch everything is working, but when I upload your sketch and I start android apk "GSM_Control.apk", my arduino do not get any SMS.

Can you help me?

Eric Brouwer (author)sokic2017-05-13


I tried to get this circuit running on an Arduino, but it seems the SIM800 and the on-board serial ports are clashing.

I have uploaded a new version of the file, and the SIM800 is now connected to pins 2 & 3. Please see the changes in the circuit diagram, as well as the INO file on how to set up the Software Serial port.

I have tested the code successfully with the APK file. No changes were made to the Android App.

Hope this will solve your problem.



sokic made it! (author)2017-05-10

Hi Eric,

Thanks for fast reply, but arduino is still waiting for some reason.

Eric Brouwer (author)sokic2017-05-11


Looking at the output on your Serial Monitor, there is no communication between the Arduino and SIM800 module.

If there was communication, their would have been a relpy of OK after each of the two commands sent to the SIM800 module.

Did you connect the Tx/Rx lines correct? Try swopping the to lines.

Also, once communication is working, you can not use the Serial Monitor as it will create a conflict between the IDE Serial Monitor and SIM800 communications.



sokic (author)2017-05-09

Hi Eric,

there are 3 "ino" files? what is the procedure to install to arduino uno and connected sim800l without ATMEGA328p


Eric Brouwer (author)sokic2017-05-10


I have removed the incorrect ino files. There is now just one file for downloading.

Just upload the sketch to you Arduino Uno as normal.



GunkE1 (author)2017-04-04

Hii eric....
Can you code run in sim 808 GPS GPRS GSM BLUETOOTH MODULE ?


Eric Brouwer (author)GunkE12017-04-05


I am not sure. I only have the SIM800 module.

The commands used for the interface is standard "AT" commands, which is sent serial to the SIM800 module. As most "AT" commands are standard, I am sure that is should work.


SelvamS5 (author)2017-03-19

can u please tel me how did u create this app?

Eric Brouwer (author)SelvamS52017-03-20

Hi SelvamS5

I used software called MIT App Inventor to create the Android App. You can find it here:

This is an on-line programming tool, and free of charge.

Hope this will help.

Regard, Eric.

jmamonong (author)2017-03-01

how to make it reply on your phone on what is the status of the AC appliances that is connected,

for example it will say POWER ON when i texted to turn it on.

TaufiqF1 (author)2017-01-25

great thanks, i try build my own

DamienC37 (author)2017-01-23

Good job Eric and thanks for the AIA file.

I will try to edit it for my own use.

mte16 (author)2016-10-11

Hi Eric,
Can I use this project SIM900 GSM / GPS module?

Eric Brouwer (author)mte162016-10-11

I think the code will work with the SIM900. The code does not make use of any "special" AT commands, so give it a try.

mte16 (author)Eric Brouwer2016-10-12

Thanks Eric.
I hope it works.

media1328 (author)2016-07-22


grate project thanks for it. I have some problem with it and have to say I am new in arduino. please anyone can help will be appreciated. and this is my code problem:

Arduino: 1.7.10 (Windows 7), Board: "Arduino Uno"

GSM_Remot.ino: In function 'void loop()':

GSM_Remot.ino:136:8: error: ambiguous overload for
'operator=' (operand types are 'String' and 'char')

GSM_Remot.ino:136:8: note: candidates are:

In file included from GSM_Remot.ino:1:0:

Files\arduino-1.7.10\hardware\arduino\avr\cores\arduino/WString.h:86:11: note:
String& String::operator=(const String&) <near match>

String &
operator = (const String &rhs);

C:\Program Files\arduino-1.7.10\hardware\arduino\avr\cores\arduino/WString.h:86:11:
note: no known conversion for argument
1 from 'char' to 'const String&'

Files\arduino-1.7.10\hardware\arduino\avr\cores\arduino/WString.h:87:11: note:
String& String::operator=(const char*) <near match>

String &
operator = (const char *cstr);

note: no known conversion for argument
1 from 'char' to 'const char*'

Files\arduino-1.7.10\hardware\arduino\avr\cores\arduino/WString.h:88:11: note:
String& String::operator=(const __FlashStringHelper*) <near match>

String & operator
= (const __FlashStringHelper *str);

note: no known conversion for argument
1 from 'char' to 'const __FlashStringHelper*'

Error compiling.

This report would
have more information with

"Show verbose
output during compilation"

enabled in File >

Eric Brouwer made it! (author)media13282016-07-25

I noticed that different versions of the IDE reacted differently to this code.

I have uploaded a newer file GSM_Remote_01.ino. under Step 3.
I was able to compile the file on three different versions now. Hope this will assist you.

media1328 (author)2016-07-23

Ok I disabled this line : //c4 = char(; and now it can be compiled. and I don't know why!!!

XxclarencexX (author)2016-07-14

hello Eric,

is it possible to use HC-05 bluetooth module instead of GSM? if it's possible what are the changes on the blocks of ai2?

Anything is possible with an Arduino...
Yes, it can be changed to use Bluetooth. But it is not as simple as changing a few lines of code. The Arduino code as well as the Android app will have to be rewritten for Bluetooth.

MoniCris (author)2016-07-14

Nice job. I'm using an old Motorola C261 directly conected to an arduino and work's nice (just need to wake it up some times)

Eric Brouwer (author)MoniCris2016-07-16

Thank you very much.

dpanagiotou1 (author)2016-07-12


I am still working on this function. It is about 85% complete.
New code will only respond to numbers stored on the SIM card.
The new code will also include adding and deleting of user numbers via SMS.

Smelter_uk (author)2016-07-08

Could this be re-worked for Bluetooth?

Not all of us have contracts for our phones, and Bluetooth is not network dependent.

Eric Brouwer (author)Smelter_uk2016-07-08

It is possible to do this using Bluetooth, but the Arduino code as well as the Android app will need to be changed accordingly.
But then it can only be used when the phone is in range of the Bluetooth device. The idea behind this project was to get alarms and control items when I am not at home.

No special cellphone contracts are used. I am using a "prepaid" SIM card in the GPRS module.

Coastabrava (author)2016-06-22

well prepared mate.

Eric Brouwer (author)Coastabrava2016-06-22

Thank you very much

anachin (author)2016-06-15

i love it, you know how to use the GPRS commands? send data to a webpage por example?

Eric Brouwer (author)anachin2016-06-16

Thanks. This was my first attempt with the unit. At this stage, I can only do SMS's.

About This Instructable




More by Eric Brouwer:ESP8266-01 IoT Smart Timer for Home AutomationInstructables Hit Counter (ESP8266-01)Converting Camping Deep Freezer Into Fridge/Freezer Using AtTiny85
Add instructable to: