Guide to SIM900 GSM GPRS Shield with Arduino

This post is a complete guide to the SIM900 GSM GPRS Shield with the Arduino. Learn how to send and receive SMS and how to make and receive phone calls with Arduino.

In this guide we’ll cover:

  • Introducing the SIM900 GSM GPRS Shield
  • SIM900 GSM GPRS Shield Hardware
  • SIM900 AT Commands
  • Testing the shield
  • Sending and receiving SMS – example
  • Making and answering phone calls – example

Introducing the SIM900 GSM GPRS Shield

The SIM900 GSM GPRS Shield is shown in figure below.

Build 25 cool Arduino projects with our course even with no prior experience DOWNLOAD »

Build 25 cool Arduino projects with our course even with no prior experience DOWNLOAD »

GSM stands for Global System for Mobile Communications and is the global standard for mobile communications.

GPRS stands for General Packet Radio Service. GPRS is a mobile service on the 2G and 3G cellular communication.

Applications:

The GSM GPRS shield is particularly useful as it allows to:

  • Connect to the Internet over GPRS network
  • Send and receive SMS
  • Place and receive phones calls

Its capabilities make it perfect for projects with Arduino like:

  • Remote control of electronic appliances – sending an SMS to turn something on;
  • Receive notifications – send SMS to your cell phone if movement is detected in your house;
  • Receive sensor data – send periodic SMS to your cell phone with daily weather data.

Features

Here’s some of the most important features of the shield:

  • Compatible with Arduino and clones
  • Based on SIM900 module from SIMCOM
  • Allows you to send SMS, MMS, GPRS and Audio via UART using AT commands.
  • It has 12 GPIOs, 2 PWMs and buit-in ADC of the SIM900 module
  • Quad Band: 850; 900; 1800 and 1900 MHZ, so it should work in all countries with GSM (2G) networks
  • Control via AT commands
  • Supports RTC (real time clock) – it has a holder for a 3V CR1220 battery at the back

  • Has microphone and headphone jacks for phone calls

Where to buy?

You can check the SIM900 GSM GPRS shield on Maker Advisor and find the best price.

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Preliminary steps

Before getting started with your SIM900 GSM GPRS module, you need to consider some aspects about the SIM card and the shield power supply.

GSM coverage

Ensure you have coverage on a GSM 850 MHz, GSM 900 MHz, DCS 1800 MHz or PCS 1900 MHz network. By GSM we mean 2G.

Prepaid SIM Card

We recommend that you use a prepaid plan or a plan with unlimited SMS for testing purposes. Otherwise, if something goes wrong, you may need to pay a huge bill for hundreds of SMS text messages sent by mistake. In this tutorial we’re using a prepaid plan with unlimited SMS.

Download our Free eBooks and Resources

The shield uses the original SIM card size, not micro or nano. If you have micro or nano you may consider getting a SIM card size adapter.

Turn off the PIN lock

To use the SIM card with the shield, you need to turn off the pin lock. The easiest way to do this, is to insert the SIM card in your smartphone and turn off the pin lock in the phone security settings.

In my case, I needed to go through: SettingsAdvanced SettingsSecuritySIM lock and turn off the lock sim card with pin.

Getting the right power supply

The shield has a DC socket for power as shown in figure below.

Next to the power jack there is a toggle switch to select the power source. Next to the toggle switch on the board, there is an arrow indicating the toggle position to use an external power supply – move the toggle switch to use the external power supply as shown above.

To power up the shield, it is advisable to use a 5V power supply that can provide 2A as the one shown below. It can also be powered with 9V 1A, or 12V 1A.

You can find the right power adapter for this shield here. Make sure you select the model with 5V and 2A.

SIM900 GSM GPRS Shield Hardware

The figure below shows the back of the shield. It has a holder for the SIM card and for a 3V CR1220 battery for the RTC (real time clock).

The figure below shows the shield most important components on the board that you need to pay attention to.

Getting started

1) Insert the SIM card into the SIM card holder – make sure you’ve read the preliminary steps in the previous section.2) Make sure the antenna is well connected.

3) On the serial port select, make sure the jumper cap is connected as shown in figure below to use software serial.

4) Power the shield using an external 5V power supply. Make sure you select the external power source with the toggle switch next to the DC jack.

5) To power up/down the shield press the power key for about 2 seconds.

6) Then, the Status LED will light up and the NetLight LED will blink every 800 ms until it finds the network. When it finds the network, the NetLight LED will start blinking every three seconds.

Note: you can automatically turn on the shield via software. See how to do that in the Automatically turn on the shield section, after the code examples.

7) You can test if the shield is working properly by sending AT commands from the Arduino IDE using an FTDI programmer – as we’ll shown later in this guide.

SIM900 AT commands

  • set the SIM900 to text mode: AT+CMGF=1\r
  • send SMS to a number: AT+CMGS=PHONE_NUMBER (in international format)
  • read the first SMS from the inbox: AT+CMGR=1\r
  • read the second SMS from the inbox: AT+CMGR=2\r
  • read all SMS from the inbox: AT+CMGR=ALL\r
  • call to a number: ATDP+ PHONE_NUMBER (in international format)
  • hang up a call: ATH
  • receive an incoming call: ATA

For more information, you can check the SIM900 AT commands manual here.

Testing the Shield with FTDI programmer

To test if everything is working properly, you can test the shield by sending AT commands from the Arduino IDE serial monitor. For that, you need an FTDI programmer as the one shown in figure below. You can get an FTDI programmer like this here.

1) Connect the FTDI programmer to the GSM shield as shown in figure below.

2) Open the Arduino IDE and select the right COM port.

3) Open the Serial monitor 

4) Select 19200 baud rate – the shield default setting is 19200 – and Carriage return. Write AT at the box highlighted in red and then press enter. See figure below. 

5) The shield will respond with OK, if everything is working properly.

Connecting the Shield to Arduino

Connect the shield to the Arduino as shown in the schematics below.

Sending an SMS

To send an SMS, upload the code below to your Arduino board.

/*********
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);   
  
  // Send the SMS
  sendSMS();
}

void loop() { 
  
}

void sendSMS() {
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("AT + CMGS = \"+XXXXXXXXXXXX\""); 
  delay(100);
  
  // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
  SIM900.println("Message example from Arduino Uno."); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000); 
}

View raw code

In this code,  you start by  including the SoftwareSerial.h library and create a software serial port on pins 7 and 8. (Pin 7 is being set as RX and 8 as TX)

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);

The sendSMS() function created is what actually sends the SMS. This function uses the AT commands: AT+CMGF=1\r and AT + CMGS.

You need to change the recipient’s mobile number at: (replace the X‘s with the recipient’s phone number)

SIM900.println("AT + CMGS = \"++++++++++++++"");

The recipient’s mobile number should be in international format.

Then, at the following line you can edit the text you want to send.

// REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
SIM900.println("Message example from Arduino Uno.")

Reading received SMS

To read incoming SMS, upload the code below to your Arduino. After uploading, wait 20 seconds for the shield to establish communication. Then, test the script by sending an SMS to the shield SIM card number. The SMS is shown on the Arduino serial monitor – baud rate: 19200.

/*********
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8);
//Variable to save incoming SMS characters
char incoming_char=0;

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // For serial monitor
  Serial.begin(19200); 
  // Give time to your GSM shield log on to network
  delay(20000);

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop() {
  // Display any text that the GSM shield sends out on the serial monitor
  if(SIM900.available() >0) {
    //Get the character from the cellular serial port
    incoming_char=SIM900.read(); 
    //Print the incoming character to the terminal
    Serial.print(incoming_char); 
  }
}

View raw code

In this code, you set the module to send the SMS data to the serial output:

SIM900.print("AT+CNMI=2,2,0,0,0\r");

You store the incoming characters from the SMS message on the incoming_char variable. You read the chars using the SIM900.read() function.

Making a phone call

To make a phone call, upload the following code to your Arduino.

Don’t forget to edit the code with the phone number you want to call.

/*********
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);

  // Make the phone call
  callSomeone();
}

void loop() {
  
}

void callSomeone() {
  // REPLACE THE X's WITH THE NUMER YOU WANT TO DIAL
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("ATD + +XXXXXXXXX;");
  delay(100);
  SIM900.println();
  
 // In this example, the call only last 30 seconds
 // You can edit the phone call duration in the delay time
  delay(30000);
  // AT command to hang up
  SIM900.println("ATH"); // hang up
}

View raw code

To make the call, you use the callSomeone() function that uses the ATD command.

SIM900.println("ATD + +XXXXXXXXX;");

You need to replace the X‘s (highlighted in red) with the phone number you want to call.

Don’t forget to connect a microphone and earphones to make the call.

In this code example, the call is hang up after 30 seconds, using the ATH command:

SIM900.println("ATH"); 

Hanging up after 30 seconds is not very useful, but it works well for an example. The idea is that you use the ATH command when an event is triggered. For example, connect a push button to the Arduino, that when pressed sends the ATH command to hang up the phone.

Answering incoming phone calls

The following code answers incoming calls.

/*********
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 
char incoming_char=0;

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200); // for GSM shield
  // For serial monitor
  Serial.begin(19200); 
  // Give time to log on to network.
  delay(20000); 
  
  SIM900.print("AT+CLIP=1\r"); // turn on caller ID notification
  delay(100);
}

void loop() {
  // Display any text that the GSM shield sends out on the serial monitor
  if(SIM900.available() >0) {
    // Get the character from the cellular serial por
    // With an incomming call, a "RING" message is sent out
    incoming_char=SIM900.read();
    //  Check if the shield is sending a "RING" message
    if (incoming_char=='R') {
      delay(10);
      Serial.print(incoming_char);
      incoming_char=SIM900.read();
      if (incoming_char =='I') {
        delay(10);
        Serial.print(incoming_char);
        incoming_char=SIM900.read();
        if (incoming_char=='N') {
          delay(10);
          Serial.print(incoming_char);
          incoming_char=SIM900.read();
          if (incoming_char=='G') {
            delay(10);
            Serial.print(incoming_char);
            // If the message received from the shield is RING
            // Send ATA commands to answer the phone
            SIM900.print("ATA\r");
          }
        }
      }
    }
  }
}

View raw code

When someone calls the SIM900 number, it sends a message saying “RING”. To know if someone is calling you, you can wait for incoming characters from the SIM900 and then, compare if it was a RING message.  That’s what is done in this code. When it receives a RING message, you send the ATA command to answer the phone.

Automatically turn on the shield

Instead of manually pressing the “power” key to turn on the shield, you can automatically turn on the shield via software.

1) First, you need to solder R13 connections on the shield as shown in the figure below – highlighted in red.

2) Connect D9 on the shield to the D9 Arduino pin as shown in the schematic below.

3) Add the following code snippet in the setup() function. This is the equivalent of pressing the shield “power” button.

digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);

Troubleshooting

Shield doesn’t respond with OK

Check your TX and RX connections to the Arduino. Try repeating the process by changing the TX with the RX pins.

Also check if you have selected the software serial by placing the jumper cap on the appropriate place on the serial selector.

Cannot see messages in the serial monitor

To see the messages in the serial monitor, the shield and the Arduino’s serial port baud rate should be the same. The SIM900 GSM GPRS shield default baud rate is 19200. So, select the Arduino’s baud rate to 19200.

However, if you need to change the shield baud rate, you can send the following AT command to change it to 19200 or other appropriate baud rate.

AT+IPR=19200

Wrapping up

This tutorial shows you how to send and receive SMS and making and receiving phone calls with the Arduino. You can apply the concepts learned in this tutorial to build your own projects to communicate over a cell network. We have other projects that use GSM, check them below:

If you like Arduino projects, make sure you check our latest Arduino: Arduino Step-by-step Projects – Build 25 Projects

We hope you’ve found this guide useful.

Thanks for reading.


Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »

Learn how to program and build projects with the ESP32 and ESP8266 using MicroPython firmware DOWNLOAD »


Enjoyed this project? Stay updated by subscribing our weekly newsletter!

101 thoughts on “Guide to SIM900 GSM GPRS Shield with Arduino”

  1. Great tutorial ! Thanks, just what I need.
    Do you know if it is possible to feed the 5 volts from the Arduino ? It seems a bit odd to me to use 2 separate powersupplies. Does the GPRS shield use 2 Amps ?

    • Hi.
      It is not recommend to power up the shield using the 5V from Arduino as it won’t provide enough current, and the shield won’t work properly.
      Yes, it is advisable to use an external 5V power supply that can provide 2A with the GSM shield.

    • Hi.
      Yes. There is a way to use software trigger, so you don’t need to use the button to enable the shield.
      In this specific module, accordingly to the data sheet, you need to connect D9 on the shield to D9 of the arduino and add the following snippet to your code, at the setup(), that is equivalent of pressing the power button:

      digitalWrite(9, HIGH);
      delay(1000);
      digitalWrite(9, LOW);
      delay(5000);

      I hope this helps.
      Regards.

        • Hi again.
          I forgot to mention that you need to solder the R13 connection in some shields. I added a section regard that subject in the guide – Automatically turn on the shield.
          I hope this helps.

          • I read that issue with R13, but even with the photo it is not clear to me what to solder. Is it possible to give a better description or a more detailed photo. Second question, what do recommend as batty power supply. I like to use these 18650 accus. My project is to change an old rotary dial phone into a mobile just for fun. Hello from Germany

          • Hi.
            There are two tiny pins inside the R13 label. You should solder those pins to each other.

            I haven’t tested using a battery to power up the shield, but I think those batteries should work. However, keep in mind that if you have your shield always on, the batteries will drain in no time. So, you need to keep the shield off, and turned it on, only when it needs to send a message, or make a phone call, etc…
            I hope this helps 🙂

  2. Great tutorial!
    Is there a way to make an internet connection with the GSM module? For example, currently I use WiFi to connect my ESP8266 to a variety of servers such as Blynk and Thingspeak. I would like to use the GSM card to do the same without needing to connect to a WiFi access point. Is this possible?

  3. HI, I would like to ask if somebody could post the pdf link of the datasheet for the SIM 9000 module. I have not been able to find on-line !.

    • Hi Fredy.
      You can find a link to download at the SIM900 product page on Banggood.
      Check the following link:
      files.banggood.com/2016/10/SKU191995%20.zip

    • Hi.
      If it is working great with the calls, I have no idea why it doesn’t work with messages 🙁
      Everything worked just fine for us.

  4. Is the FTDI required?? Is thought that when connecting GSM module to Arduino Uno and then go to the serial monitor is fine to give AT commands. I ordered a GSM900 as shown in your pictures, but no FTDI, since I did not know about it.

    Jan

    • Hi Jan.
      You don’t need an FTDI programmer to work with the shield. It will work just fine with the Arduino.
      In the tutorial, we show how to send AT commands using the FTDI programmer, but you can also use the Arduino and Serial Monitor.

  5. I bought a GSM900a in first place, but that one did nothing at all. So I’m waiting for a long time… hope that I can forget about the FTDI therefore 😉

  6. Sis , i followed all off your tutorial start from hardware interfacing until whole of the program written , but here i found a problem that my SIM900 shield didn’t work properly even i get OK response from AT COMMAND. i try to call someone with AT COMMAND in first 3 second serial monitor give me OK but after several second the other response show NO CARRIER. I tried to change my SIM card but it still happen. could you give me solution about it? Thanks

    • Hi.
      If you get an OK response, your shield should be working properly.
      So, I can’t tell you why it is not working.
      Maybe you’re not using the phone number correctly. Please make sure you’re using the phone number in international format.
      I hope this helps.
      Regards,
      Sara

  7. Hi, thanks for the tutorial, it’s great, and worked for me right the first time. My only problem is, when i call someone, the phone shows “unknown number” (Private number). The sim card with a phone, showing the number, but when i call with the shield it’s hiding the phone number.
    Sorry for my english, hope you understand what is the problem. :/

    • Hi Peter. I understand your problem.
      Unfortunately, I don’t know why that happens.
      I’ve tried to search for someone with the same problem but I was unable to find any information regarding that specific problem.

  8. Very helpfull .Great tutorial. Thank you. I’m looking for the frizing part of this shield, but after searching everywhere, I didn’t find it. May be you have it ?

  9. Thanks for beautiful guide. I’m now able to send and receive sms as i needed. The only thing is that i can not send and receive sms with Extended characters. How can i send and receive sms eith ąčęėįšųūž letters?

    • Hi Arnas.
      I think you need to convert the characters to ASCII.
      Take a look at this tutorial: playground.arduino.cc/Main/Utf8ascii
      However, I’m not sure if this will work when sending the characters on an SMS.
      I hope this helps, though.

  10. please could someone help me how to replace
    SIM900.println(“Message example from Arduino Uno.”)
    so i could send with sms the temperature read from a sensor

    • Hi.
      You need to create a variable to hold your temperature. Then, you need to convert that variable into a String.
      Finally, you just need to send that variable using the SIM900.println(). For example: imagine you save the temperature on the Temp variable. You just need to do as follows:
      SIM900.println(String(Temp));
      I hope this helps.

  11. Hi, I have problems getting the SIM900 shield to operate.
    I have checked that the SIM is without PIN code, and I have checked that it works by using it in my mobile phone. The SIM is a prepaid card from Telenor in Norway. I power the SIM900 from a separate 60W power supply
    Trying to get the card to connect to the network, eveything is as described after pressing power on.

    However, it looks like the cards stops when it connects to the network. The NetLight turns off and does not blink anymore. I then have to remove power and start over for the power key to work again.
    -any idea what might be the problem?
    -should the AT commands work before I press the power key and get it connected?

    • Hi Tor.
      When the card connects to the network, the NetLight LED should be blinking every three seconds (that indicates it is properly connected to the network).
      To power up the shield you should press the power key for about 2 seconds. Then, the Status LED will light up and the NetLight LED will blink every 800 ms until it finds the network. When it finds the network, the NetLight LED will start blinking every three seconds.
      If it is not connecting to the network, it may be a problem with your card, or with your GSM shield.
      The GSM shield should be connected to the network before sending the AT commands.
      I hope this helps.
      Regards,
      Sara 🙂

  12. Hi, i recently got a Sim900 module, i understand all the AT commands, and functions, ( this guide also helped me ) But i got a problem, the first step! My net light only blinks once per second, and it stays that way for long time… which means it cant acquire network, i dont know why?
    My module is connected to a 9v 1a power supply,
    The Sim card is in correct position.

    Ive read that sometimes, the Ant pin is not soldered properly, or also if the Manufacturer its from china, it wont with america signals.
    Do you know what could be happening?

    • Hi. I don’t know what can be wrong.
      Does you location support 2G network?
      The SIM900 is a 2G network device.

    • It looks like you have the same problems as I have, see above.
      When the SIM900 does not connect to the network, its impossible to debug what the problem is as the AT commands does not work
      I’m pretty sure 2G is supported bu my provider here, but it does not connect.
      Please tell if you find a way to get a status from the shield without a network connection.

  13. Look for an AT-command-list like –SIM900_AT.pdf– and find out more about signal quality, connections etc..
    You can start by checking the signal quality with a command like — SIM900.println(“AT+CSQ”) — (and feed the output back the serial port). Also check the commands AT+COPS? and AT+CREG? in different variations…
    This will tell you if your antenna is working (CSQ) and if there are carriers you can connect to or are connected to.
    You can find out a lot more about your board and connection with AT commands, even without (or before ) a network connection !
    And I admit, it’s still difficult to connect these boards … but you will learn a lot more about your board by trying these commands 🙂

    • Hi Gerrit.
      Thank you so much for this information.
      This will be very useful for many of our readers 🙂

  14. Hi,

    Although i managed to send an sms from the gsm shield, i cannot read the sms.

    i followed the steps you described about setting the baud rate to the correct value etc but still the read sms doesn’t send out anything to the serial out port.

    can you help?

    thnaks

  15. When i connect the GSM module with my 9V battery after few blink the status LED and the NetLight LED just wen5 OFF..
    What is the issue i have no clue.

    Please help.

  16. Nice work guys, keep it up
    I wanted to ask could you please help me to sending my sensor data over the internet? I wanted to transmit my data using internet and gsm module, I did it using esp8266 but now I wanted to transmit using gsm sim900 shield.
    Thanks in advance

    • Hi.
      Unfortunately, we don’t have any tutorial on that exact subject.
      Thanks for reading,
      Regards,
      Sara 🙂

  17. Hey,

    I am trying to make a program in which I execute certain actions based on the SMS I receive. However I don’t know how to only store the SMS text in a variable (to later compare it) without the phone number of the sender etc…

    • Hi Matteo.
      We have a tutorial that executes actions based on the SMS received. This tutorial may help you with your project:
      Control a 12V Lamp via SMS with Arduino
      This tutorial shows how to send SMS to make the arduino do something (in this case it turns a lamp on, but you can do any other action)
      I hope this helps 🙂

  18. Great Tutorial! Can please post the tutorial how to find out the location, Latitude,Longitude using Arduino and SIM900 only?

  19. Thank you for this complete tutorial.
    I haven’t received my SIM900 module yet but I found this recent documentation on AT commands including GPRS commands:
    simcom.ee/documents/SIM900/SIM900_AT%20Command%20Manual_V1.11.pdf

  20. Hi there,

    Nice tutorial! I wanted to open my gate gate by calling into the Arduino (with a saved number in the Arduino). The Arduino should switch on a relai and after a couple of seconds switch it back off.

    Is it possible to do something like this?

    Greets Gijs

    • Hi. It is possible.
      When you call the Arduino, it triggers a function that turns on a relay. When you call the shield, it receives a “RING” message. So, you can check whether it received that message and then, turn on the relay. Take a look at the “Answering incoming phone calls” section.
      You may also find useful the following tutorial, in which we control a 12V lamp using a relay via SMS:
      https://randomnerdtutorials.com/control-a-12v-lamp-via-sms-with-arduino/
      I hope these tips help you.
      Regards,
      Sara 🙂

    • Hi Alberto.
      We haven’t tested with the SIM808. But I think it should work similarly.
      Just take into account the serial pins location and how to properly power your board.
      I think the AT commands should also work with that board.
      Regards,
      Sara

  21. HI,
    sorry one small question, when we do automatically on/off via PIN D9, that means if electricity switch off and come back again, after starting Arduino will start also the shield without pressing manual button??. Many thanks.

    • Hi.
      Yes, it should start the shield automatically because the snipet of code to automatically turn on the shield is in the setup().
      So, when the Arduino restarts, it will run the setup(), and automatically turn on the shield.
      Regards,
      Sara 🙂

      • Hello Ms. Sara,

        This is really a splendid tutorial; I would not have made my project work if it were not for you. Thank you so much. I was trying to make a PIR-triggered-SMS alarm. My shield which is identical to yours kind a works ONLY without the auto-on snippet(so, I deleted this from the code and unplugged the D9 wire); however, in some 20 minutes, the shield turns off by itself. My intention is to manually switch it ON and leave it ON for a longer period of time (days). Would you know how to?

  22. Hi Sara, would you mind to help me?
    I purchased the same Shield as your and followed all the passages but It doesnt work!
    I read that the Baudrate is too fast but im not sure!
    Could you help me? Maybe contact me via mail or here? I will explain all my steps.
    Thank you

    • Hi Nocolo.
      What exactly doesn’t work?
      Does the shield respond with OK when experimenting with the AT commands?
      Regards,
      Sara 🙂

  23. Hi sir,

    I am facing a problem in sending a message using GSM AT commands for
    Serial.print(“AT+CMGS=\”6361066623\”\r”); here instead of my number I am using a variable which has a mobile number.

    So the command I used looks like
    Serial.print(“AT+CMGS=\”” + myNum + “\””); or

    Serial.print(“AT+CMGS=\””);
    Serial.print(myNum);
    Serial.print(“\””);

    but the problem is the code gets compiled but I am not receiving any messages for that number stored in the variable ‘myNum’.

    I am using Arduino UNO board,
    Please help me to solve this problem

    • Hi Jeevan.
      Try the following line:
      SIM900.println(“AT + CMGS = \” + myNum + “\”);
      Your phone number should be in international format.
      I hope it works,
      Regards,
      Sara 🙂

      • This works in my code:

        Serial.print(“AT+CMGS=”); //send sms message
        Serial.println(phoneNR);
        delay(100);
        Serial.println(F(“Your message content…”));//the content of the message
        delay(100);
        Serial.println((char)26);//Close message–the ASCII code of the ctrl+z is 26
        delay(100);
        Serial.println();

        Guess this will solve your problem.
        Regards,
        Gerrit

  24. Hey I saw the input voltage of the SIM900 should be between 4.1 – 4.8 in the datasheet, Is it ok to use 9V/1A or 12V/1A??? Is that not a problem for the SIM900 components?

    • Hi Jerom.
      It depends on your specific SIM900 module/shield.
      The module we’re using here recommends the voltage we specify on the article.
      You should note that there are different modules that use the SIM900. Therefore, they might need different power requirements.
      Regards,
      Sara 🙂

  25. Hey Sara amazing tutorial!
    Any chance to have a HTTP GET/POST tutorial?
    Can’t really find anything useful around and yours has been the only working tutorial so far..

    • Hi Juan.
      Thank you for your kind words.
      At the moment, I don’t have any tutorials about what you’re asking.
      Regards,
      Sara 🙂

  26. Hello Sara,
    Will a SainSmart GSM900 shield work with your project? I already have one and wouldn’t have to purchase the larger development board you list.
    sainsmart.com/products/sim900-gprs-gsm-board-quad-band-module-kit-for-arduino

    • Hi Jeff.
      It uses the SIM900 module. So, it should work with this tutorial.
      You just need to make sure you wire the shield properly.
      Regards,
      Sara 🙂

  27. hello, excellent guide
    I have a problem: after switching on the card, the two LEDs light up, but after a few seconds they turn off again.
    can you help me?
    thank you

    • Hi Michael.
      Those examples use the SoftwareSerial library to communicate with the SIM900 via serial.
      There’s no need to include other library.
      Regards,
      Sara

  28. Would it be possible for this module to trigger an Arduino port when it receives a call from a previously registered number?

    • Yes, you can definitely modify it to do that. You need an if statement that compares the number that is calling with the number stored, then you can do whatever you want. Unfortunately I don’t have any examples with that exact subject…

  29. Can I also use PIN 0 and PIN 1 instead of PIN 7,8 . If this is true, do I still have to use the softwareSerial library? I am using an Arduino UNO R3.

  30. Bonjour et merci Sarah pour ce tuto très complet et bien expliqué.
    Peut on se servir de ce tuto pour exploiter la sim 800?
    Merci

  31. Hi,
    I search the diagram of the card and the function of the pins of the connectors.
    thank you if you can transmit it or the address of the site.
    Emmanuel

    bonjour,
    je recherche le schéma de la carte et la fonction des broches des connecteurs.
    merci si vous pouvez le transmettre ou l’adresse du site.
    Emmanuel

    • Hi Emmanuel.
      Take a look at the following link: stackoverflow.com/questions/42549537/sim-900-gprs-shield-pinout
      I think it might help you out.
      Regards,
      Sara 🙂

  32. Hello,
    I have two doubts:
    -In my card, there is a resistance 0 in R13 position… i think that I do not have to modify anything for the D9 pin to work. Is this correct? (but sometimes D9 don’t work and sometimes D9 work OK. Sometimes Q2 don’t conmute with D9 High Level. I don’t know why?)
    Someone else happens?

    -which is the function of J20 and J3 Jumpers? (GND // VCC5 and GND // 4.1V)

    Thanks a Lot
    Pedro

    • Hi Pedro.
      It seems that you shield behaves differently than mine. So, I can’t advise much.
      If D9 works, it is probably already connected.
      As for the jumpers, I don’t know their functions :\

      I’m sorry that I can’t help much.
      Regards,
      Sara

  33. The information was very useful. Kindly can I get the REACH statement for the manufacturer SIMCOM with the manufacturer part number SIM 900.

Leave a Comment

Download our Free eBooks and Resources

Get instant access to our FREE eBooks, Resources, and Exclusive Electronics Projects by entering your email address below.