Sending SMS Problem: Arduino GSM SIM900

Hello !

I am actually testing the GSM SIM900 module as part of my internship project.

Here is the tutorial I followed:

https://lastminuteengineers.com/sim900-gsm-shield-arduino-tutorial/

To help me, my internship supervisor sent me the same module, and I also bought a Things.mobile SIM card which is compatible with multiple carriers for my project. I then created an account on thingsmobile.com in order to activate the package of my card.

image

In addition, I made sure to deactivate it by integrating it into my mobile phone, so that the GSM module program could reactivate it afterwards once inserted.

So, I placed it in the SIM card holder, and I reproduced the assembly below with 3 wires and an Arduino UNO, and supplied the module with a 5V Adapter.

First, I tested the "Arduino Code - Testing AT Commands" program from the tutorial in question.

Here is the program I used:

#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM900
SoftwareSerial mySerial(7, 8); //SIM900 Tx & Rx is connected to Arduino #7 & #8

void setup()
{
  
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  
  //Begin serial communication with Arduino and SIM900
  mySerial.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //Handshaking with SIM900
  updateSerial();
  mySerial.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  updateSerial();
  mySerial.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  mySerial.println("AT+CREG?"); //Check whether it has registered in the network
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}

For activating the SIM card, we have to push this button to make the code work:

image

And then, this is what I receive when I upload this program and open the serial monitor:

image

For AT+CSQ, the first # is dB strength,and it is higher than 5, which is good.

And for AT+CREG, the second # is 5, which indicates I am registered to roaming network.

Then, I tried the other program to send SMS (without forgetting to push the hardware trigger):

#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM900
SoftwareSerial mySerial(7, 8); //SIM900 Tx & Rx is connected to Arduino #7 & #8

void setup()
{
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  
  //Begin serial communication with Arduino and SIM900
  mySerial.begin(9600);

  Serial.println("Initializing..."); 
  delay(1000);

  mySerial.println("AT"); //Handshaking with SIM900
  updateSerial();

  mySerial.println("AT+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  mySerial.println("AT+CMGS=\"+33686920417\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
  updateSerial();
  mySerial.print("YO"); //text content
  updateSerial();
  mySerial.write(26);
}

void loop()
{
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}

I tried the program, and it worked !

However, I just tried the Hardware version of the programme (by pushing the trigger), now I want to use the Software trigger where I activate the SIM Card with the program instead.

For that, I followed that montage:

image

According to the tutorial, to activate the sim card with the program, we need to add this code snippets in the setup():

void SIM900power()
{
  pinMode(9, OUTPUT); 
  digitalWrite(9,LOW);
  delay(1000);
  digitalWrite(9,HIGH);
  delay(2000);
  digitalWrite(9,LOW);
  delay(3000);
}

Then, I tested again the "Arduino Code - Testing AT Commands" program by adding them.

#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM900
SoftwareSerial mySerial(7, 8); //SIM900 Tx & Rx is connected to Arduino #7 & #8

void setup()
{
  SIM900power();
  
  //Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  
  //Begin serial communication with Arduino and SIM900
  mySerial.begin(9600);

  Serial.println("Initializing...");
  delay(1000);

  mySerial.println("AT"); //Handshaking with SIM900
  updateSerial();
  mySerial.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best
  updateSerial();
  mySerial.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
  mySerial.println("AT+CREG?"); //Check whether it has registered in the network
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
  }
}

void SIM900power()
{
  pinMode(9, OUTPUT); 
  digitalWrite(9,LOW);
  delay(1000);
  digitalWrite(9,HIGH);
  delay(2000);
  digitalWrite(9,LOW);
  delay(3000);
}

This is what I receive by uploading the program and opening the serial monitor:

image

Well, this isn't good.

For the AT + CSQ line, the signal strength corresponds to 0dB and concerning the AT + CREG line, I receive 2 answers.

The first answer displays 2 as the second number, which means I'm not registered to any network despite the LED flashing every 3 secondes.
The second one only displays the number "5". Does this mean that I am connected to a foreign network (I live in France by the way)?

Anyway, I tried several times to send an sms by adding these code snippets, but it still didn't work.

I believe these extra code snippets could be responsible for the malfunctioning.

I also noticed that we needed to solder the R13 SMD jumper on the shield (look at the part named Software trigger in the tutorial).

The GSM module shield I used was originally sent by my internship tutor alongside with a lot of other stuff for my project. I took a picture about the R13 emplacement.

image

We could see a component here, but I don't know if it is well soldered as aked on the tuto or not.
If it's not, what kind of tools would you advise me to do it ?

Also, for the TX RX jumpers, should I move them for using D1 and D0 instead of D7 and D8 ?

image

I used D7 and D8 for activating the SIM card with the button, and it worked well.

Thank you in advance if someone have an answer.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.