Problème SIM900

Bonjour à tous :slight_smile:

J'ai fait l’acquisition d'un module SIM900 pour l'utiliser avec mon arduino mega 2560 et pouvoir contrôler un relais a la réception d'un SMS.

J'ai suivi ce tuto qui a le même module que moi :

J'ai commencé par envoyer un SMS a mon téléphone en suivant le tuto, ce qui a marché sans embûche.
J'ai continué la suite sur la réception SMS et l'affichage via le moniteur série du logiciel Arduino, mais ça n'a pas marché.
j'ai tenté d'autre tuto sans succès, impossible de lire un SMS.
J'ai donc décidé de repartir sur le sketch pour envoyer des SMS du tuto, et la ça ne marche plus non plus ...

Je suis maintenant dans cette impasse, plus rien ne marche.

Pour info : La première fois ou j'ai réussi a envoyer des SMS j’étais en 19200 bauds
La LED du module SIM900 indique qu'il est connecté au réseau mobile
Mon module SIM900 est alimenté par une alimentation 5V 2100mA
Quand j'envoi un SMS au module, je vois bien la LED clignoté une fois

J'ai aussi suivi ce tuto qui utilise d'autres connections pour le Rx Tx :

Par acquit de conscience j'ai utilisé mon deuxième module au cas ou j'aurai cramé l'autre, mais rien ne se passe non plus.
J'ai tenté une commande simple AT pour avoir une réponse du module, ne donne rien.
Je ne comprend pas comment les deux modules peuvent être en défaut, je pense que le problème est ailleurs
J'ai également du mal a comprendre comment j'ai pu réussir a m'envoyer des SMS alors que maintenant je ne le peux pas.

Es ce que quelqu'un aurai une piste ? Parce que moi je suis complètement perdu.

Merci ! :slight_smile:

Bonsoir

IL faut séparer les problèmes :

  1. communication entre carte Arduino et module SIM900 (même sans carte SIM)
  2. communication entre module SIM900 + carte SIM et Réseau

J'ai tenté une commande simple AT pour avoir une réponse du module, ne donne rien.

Si un simple AT ne renvoie pas OK inutile d'aller plus loin, un module SIM900 sans carte SIM doit répondre à AT. laisser pour l'instant tomber la carte SIM et l'envoi de SMS, régler la question de la communication entre Arduino (hard et soft) et SIM900.

Revoir le positionnement des cavaliers, la cohérence entre positionnement des cavaliers et code (port série materiel ou sofware ? , revoir si les terminaisons de lignes sont celles que le SIM900 attend....

Quand le SIM900 répondra OK à AT , passer à l'étape suivante : tenter "d'accrocher" le réseau puis d'envoyer un SMS, ensuite tester la réception de ceux-ci.

Bonsoir et merci de votre réponse,

Les cavaliers sont en position D7 D8 comme indiqué dans le premier tuto
J'ai échangé la positon de Tx Rx ( pin 7 et 8 de l'arduino ) au cas ou.

Pour être certain de ne pas me tromper j'utilise un code trouvé ici

#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
  }
}

J'ai essayé modifiant le baud entre l'arduino et le SIM900 a 19200 ( mySerial.begin(19200) )

Mais dans le moniteur je ne dépasse jamais l'étape "Initializing..."

le SIM900 ne répond pas effectivement

comment est alimenté le shield ?
alimentation externe conséquente et switch positionné pour (cf second tutoriel) ?

le premier test réussi était-il avec une carte UNO ou Mega2560 ? (je connais mal la seconde et encore moins l'utilisation de SofwareSerial sur celle-ci... vérifier si cette librairie peut y tourner en 7 et 8 )

Le shield est alimenté par une alim 220V - 5V 2100mA
Le switch est sur la bonne position.
La premier test concluant a été réalisé sur la même carte arduino mega,

Je crois que j'ai une carte UNO sous la main, si ça peut faciliter la chose !

Bonjour,

J'ai pu refaire le montage sur un arduino UNO, en modifiant le Rx Tx j'arrive a un résultat !

voici le code :

#include <SoftwareSerial.h>

//Create software serial object to communicate with SIM900
SoftwareSerial mySerial(8, 7); //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
  }
}

J'ai bien une réponse sur le moniteur série, je communique maintenant entre le module et l'arduino !
Je suis étonné d'avoir le même baud pour la liaison arduino - arduino IDE et Arduino - SIM900.

Maintenant que cette étape est ok, je n'arrive toujours pas a envoyer des sms.
J'utilise le code du premier tuto, j'indique le bon Rx Tx et le bon baud, mais rien ne donne.

1ere étape franchie !!

pour la seconde il faut s'assurer que la carte SIM "accroche le réseau", voir les tutos et les commandes AT permettant de faire cela (faute de SIM active j'ai oublié...) penser au code PIN s'il n'est pas désactivé

la troisième étape sera celle des SMS

1 Like

Merci pour votre aide, c'est surtout grâce a vous que j'ai pu sortir de cette impasse !

Je pense que le réseau accroche, je m'explique :

En m'aidant du tuto https://lastminuteengineers.com/sim900-gsm-shield-arduino-tutorial/ rubrique "Arduino Code – Testing AT Commands"
j'ai comme réponse via le moniteur série :

Pour AT+CREG? -> +CREG:1,1 -> OK
Pour AT+COPS? -> +COPS: 0,0,"Orange F" -> OK
Pour AT+CSQ -> +CSQ: 30,0-> OK

J'en conclus que je suis bien sur le réseau mobile, et que le signal est suffisant.

Edit : Il n'y a pas de code pin sur la sim, je l'ai vérifié plusieurs fois en utilisant un vieux telephone; aucun code pin n'est demandé a l'allumage.

J'arrive maintenant a lire un SMS en utilisant ce code :

#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+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  mySerial.println("AT+CNMI=1,2,0,0,0"); // Decides how newly arrived SMS messages should be handled
  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
  }
}

Cependant impossible d'utiliser le code pour envoyer des SMS, j'ai essayé avec tout les numéros possible ( +336..... ; +3306......; 06.....)

ça avance.....

donner le code exact actuellement testé pour l'envoi de SMS en mode texte... le diable est dans les détails....

Le code exact

#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+CMGF=1"); // Configuring TEXT mode
  updateSerial();
  mySerial.println("AT+CMGS=\"+336********\"");//change ZZ with country code and xxxxxxxxxxx with phone number to sms
  updateSerial();
  mySerial.print("Last Minute Engineers | lastminuteengineers.com"); //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
  }
}

J'ai volontairement mis des **** a la place de mon vrai numéro.

et quels sont les retours dans le terminal des commandes successives liées à l'envoi de SMS ?

Je viens de mettre la SIM dans un vieux téléphone, et en fait il n'y avait plus de crédit sur la carte prépayé :slight_smile: :slight_smile:

Je viens de recharger, et maintenant le code marche sans problème !

Tout est OK

Merci de votre aide précieuse !

comme dans les films... Happy End :slight_smile:

Notez que c'est "ballot" d'utiliser Software Serial sur une MEGA qui dispose de 4 ports Hardware Serial... Ce sera vraiment bcp plus robuste en prenant un de ces ports... mais faudra la brancher en courbant un peu les pins pour ne pas qu'elle soit plantées dans la MEGA et en les routant avec un petit fil vers Tx2 et Rx2 par exemple

A partir du message #5 il me semble que c'est une Uno qui est utilisée , le retour vers Mega2560 permettra d'abandonner SoftwareSerial.

Bonjour !

Et merci pour le complément d'information !
Je connais encore trop peu les liaisons série, mais je note qu'il vaut mieux utiliser l'harware que le software.

mais faudra la brancher en courbant un peu les pins pour ne pas qu'elle soit plantées dans la MEGA

Si c'est pour une question de shield, je n'ai pas monté le module sur l'arduino, donc pas de souci.

J'en profite pour poser une question; J'ai cru comprendre qu'il ne fallait pas être sur le même baud entre deux liaisons série, pourtant dans le code que j'utilise c'est le cas.

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

lythos:
Si c'est pour une question de shield, je n'ai pas monté le module sur l'arduino, donc pas de souci.

Oui c'était si vous l'utilisiez en format "shield"

J'en profite pour poser une question; J'ai cru comprendre qu'il ne fallait pas être sur le même baud entre deux liaisons série, pourtant dans le code que j'utilise c'est le cas

Non il n'y a aucune contre-indication. Mais autant en Sofwtare Serial vous avez intérêt à rester à assez bas débit comme 9600, autant pour le port Serial et la discussion avec votre PC il n'y a AUCUN avantage à aller lentement... utilisez 115200 ou bcp plus, le hardware le supporte sans problème !  Serial.begin(115200);

Merci pour les infos,

Je pense a l'éventualité de poster un tuto sur le projet que je suis en train de faire. On trouve pas mal de référence sur la SIM900 mais les tutos commencent a dater !

Je profite de votre savoir pour une question concernant l'alimentation.

Mon module SIM900 est alimenté par sa prise jack; Est il possible d'alimenter l'arduino via le module, en utilisant les pins du module ?
Ou suis je obligé de faire une dérivation de l’alimentation du module (avant la prise jack) pour rentrer sur le Vin de l'arduino ?

un tuto est toujours une bonne chose et ça vous permet de mettre les choses au clair pour vous même, donc n vous gênez pas ! (il y a de bonnes infos sur ce Shield en anglais ici)

Mon module SIM900 est alimenté par sa prise jack; Est il possible d'alimenter l'arduino via le module, en utilisant les pins du module ?

où voudriez vous prendre l'alimentation ?