Introduction: SMS Controller by Using SIM800L V2

Picture of SMS Controller by Using SIM800L V2

SIMCOM SIM800L V2.0 GSM/GPRS Module is a QUAD BAND GSM/GPRS module which compatible with Arduino. The module works to add both of GSM features (voice call or SMS) and GPRS features. The advantages of these modules are the VCC and TTL serial levels that have 5V voltage, so you can directly connect it to Arduino or other minimum system with 5V of voltage level. There are so many GPRS/GSM modules on the market which need to add 5V regulator and level converter circuit, while SIM800L V.2 GSM/GPRS module already has a built-in regulator circuit and TTL level converter on the board.

Here is just an example project using SIM800L V.2. It’s about how to control relay using SMS controller. You can easily turn-on or turn-off many objects in your house, such as lamp, fan, and etc.

Specification of SIM800L V2.0 GSM/GPRS Module

SIM800L V2.0 GSM/GPRS Module have many specs, you can check it below:

  • TTL serial interface compatible with 3.3V and 5V Microcontrollers, compatible with arduino.
  • This SIM800L module has a set of TTL level serial interface, a set of power supply interface.
  • Besides, there are a set of antenna interface on this module.
  • Network support: Quad-Band 850 / 900/ 1800 / 1900 MHz, it can transmit Voice, SMS and data information with low power
  • VDD TTL UART interface The TTL UART serial interface, you can connect the MCU like 51MCU or ARM or MSP430 directly. The pin of VDD is used to match voltage of the TTL.
  • Model: SIMCOM SIM800L
  • Work voltage: 3.7V to 5V- Size: 40mm x 28mm x 3mm
  • GPRS multi-slot class 12/10
  • GPRS mobile station class B
  • Compliant to GSM phase 2/2+
  • Class 4 (2 W @ 850/900MHz)
  • Class 1 (1 W @ 1800/1900MHz)

Step 1: Materials You Need

Picture of Materials You Need

You will need:

  1. SIM800L V2.0 GSM/GPRS Module
  2. Arduino Uno
  3. 4 Channel 5 Volt Relay Module
  4. Jumper Wire

Step 2: Setup

Picture of Setup

Once each component is connected, create a program, and then upload it on your arduino. But first, you must install GPRS library files that you can download in here.

Step 3: Code

Picture of Code

Once you've plugged in your SIM800L, 4 Channel Relay Module, and ARduino to your computer, run the code below and you're finished.



#define TIMEOUT 5000

#define ACTIVE LOW

#define OFF HIGH

byte Relay[] = {A0,A1,A2,A3};

byte StatRelay[4];

char buffNumber[20];

char currentLine[500] = "";

int currentLineIndex = 0;

bool nextLineIsMessage = false;

String replyNumber = "089510863958";

GPRS gprs;

void setup() {

for(int i=0; i < 4; i++) {

pinMode (Relay[i] , OUTPUT);

digitalWrite (Relay[i], MATI);

StatRelay[i] = MATI;



while (!Serial);

Serial.println("Activate SIM800L V2 >>> Automatically Read SMS");



while (0 != gprs.init()) {


Serial.print("init errorrn");


// Manage message to mode ASCII

if (0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1rn", "OK", TIMEOUT)) {




// Read Incoming SMS

if (0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0rn", "OK", TIMEOUT)) {




int pjg = replyNumber.length() + 1;



Serial.print("Send reply to number = > ");


Serial.println("Initialization Done");



void loop() {

// Change status Relay ON / OFF

for(int i=0; i < 4; i++) {

digitalWrite(Relay[i], StatRelay[i]);


// If there is input data from SIM800

if (gprs.serialSIM800.available()) {

char lastCharRead =;

// Save all data on lastCharRead, then if there is r or n, as a final signal of incoming message

if (lastCharRead == 'r' || lastCharRead == 'n') {

String lastLine = String(currentLine);

// If the last message +CMT indicates new message arrive

if (lastLine.startsWith("+CMT:")) {


nextLineIsMessage = true;

} else if (lastLine.length() > 0) {

if (nextLineIsMessage) {


// ================================================================>> Function of Relay Controller

//Relay 1 Controller

if (lastLine.indexOf("Relay 1 ON") >= 0) {

StatRelay[0] = AKTIF;

Serial.print("Reply====>>>> ");

Serial.println("Relay 1 Status Active");

gprs.sendSMS (buffNumber, "Relay 1 Status Active");


else if (lastLine.indexOf("Relay 1 OFF") >= 0) {

StatRelay[0] = MATI;

Serial.print("Reply====>>>> ");

Serial.println("Relay 1 Status Off");

gprs.sendSMS (buffNumber, "Relay 1 Status Off");


//Relay 2 Controller

if (lastLine.indexOf("Relay 2 ON") >= 0) {

StatRelay[1] = AKTIF;

Serial.print("Reply====>>>> ");

Serial.println("Relay 2 Status Active");

gprs.sendSMS (buffNumber, "Relay 2 Status Active");


else if (lastLine.indexOf("Relay 2 OFF") >= 0) {

StatRelay[1] = MATI;

Serial.print("Reply====>>>> ");

Serial.println("Relay 2 Status Off");

gprs.sendSMS (buffNumber, "Relay 2 Status Off");


//Relay 3 Controller

if (lastLine.indexOf("Relay 3 ON") >= 0) {

StatRelay[2] = AKTIF;

Serial.print("Reply====>>>> ");

Serial.println("Relay 3 Status Active");

gprs.sendSMS (buffNumber, "Relay 3 Status Active");


else if (lastLine.indexOf("Relay 3 OFF") >= 0) {

StatRelay[2] = MATI;

Serial.print("Reply====>>>> ");

Serial.println("Relay 3 Status Off");

gprs.sendSMS (buffNumber, "Relay 3 Status Off");


//Relay 4 Controller

if (lastLine.indexOf("Relay 4 ON") >= 0) {

StatRelay[3] = AKTIF;

Serial.print("Reply====>>>> ");

Serial.println("Relay 4 Status Active");

gprs.sendSMS (buffNumber, "Relay 1 Status Active");


else if (lastLine.indexOf("Relay 4 OFF") >= 0) {

StatRelay[3] = MATI;

Serial.print("Reply====>>>> ");

Serial.println("Relay 4 Status Off");

gprs.sendSMS (buffNumber, "Relay 4 Status Off");


nextLineIsMessage = false;


// ==================================================================>>


//Clear char array for next line of read

for ( int i = 0; i < sizeof(currentLine); ++i ) {

currentLine[i] = (char)0;


currentLineIndex = 0;


else {

currentLine[currentLineIndex++] = lastCharRead;




Step 4: Try It!

Picture of Try It!

This tool works by sending SMS on SIM800L with certain keywords. Here, to turn on relay 1 use the command "Relay 1 ON" and to turn it off by using "Relay 1 OFF" command. For other relay commands almost the same, simply by replacing the numbers according to the serial number of the controlled relay. After the message is sent automatically, SIM800 will send a reply in the form of status message of each SIM.

Step 5: Check the Video to Know More


JoshuaM276 (author)2017-12-04

Hey, great work. The code is not working in my setup. Which libraries have you included?

resende321 (author)2017-11-10

What does "MATI" means in the code ?

Hi, sorry for the late reply, "MATI" means "OFF" :)

MohamedM30 (author)2017-08-28

thank u

you're welcome.. :)

Swansong (author)2017-08-03

Thanks for sharing :)

sfeelectronics (author)Swansong2017-08-09

you're welcome.. :)

About This Instructable




Bio: Electronics Component - PCB [Design, Printing, Inserting] - Electronic Programming
More by sfeelectronics:Display Temperature on P10 LED Display Module Using ArduinoKeypad Access 4x4 With ArduinoDisplay Text at P10 LED Display Using Arduino
Add instructable to: