GSM module SIM900 Sending SMS step 2

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, then I turned the SIM900 up / down programmatically by making its connections with an Arduino UNO. I reproduced the assembly below with 3 wires, 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|317x393](upload://7EU0ei8BwgBc34dQHXqI6OcvlqU.jpeg

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.