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.

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:

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

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:

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:

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.

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 ?

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.

