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.
communication entre carte Arduino et module SIM900 (même sans carte SIM)
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.
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..."
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 !
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.
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é
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.....)
#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.
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
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);
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 ?