Aide pour un programme GSM

Bonjour à tous ! bonne année pour commencer !
Je me présente Joris CAMHI alternant à la CNR.

J’ai comme projet personnel de réaliser un détecteur incendie nomade à envoie de sms automatique.

Je viens à vous aujourd’hui car je suis débutant total en Arduino C++… J’ai récupéré un programme sur internet qui me permets d’envoyer un SMS via le moniteur série qui communique avec mon module GSM 800L.
J’ai réussi à m’envoyer un message sans problème.

L’étape qui suit est de m’envoyer un SMS automatiquement dès que la carte arduino et donc le module GSM est alimenté cependant je ne sais pas comment m’y prendre ni comment faire si vous pouviez me mettre sur la voie je vous en serais reconnaissant…

Je vous remercie d’avance pour vos réponses et je vous mets le code que j’ai emprunté ci-dessous !
Cordialement.

#include <SoftwareSerial.h>
#define SIM_TX 8
#define SIM_RX 7
SoftwareSerial serialSIM800(SIM_TX,SIM_RX);
 
void setup() {
  pinMode (SIM_TX, OUTPUT); 
  pinMode (SIM_RX, OUTPUT);
  Serial.begin(9600);
  while(!Serial);
   serialSIM800.begin(9600);
  delay(2000);
   
  Serial.println("Envoi du SMS en cours...");

  serialSIM800.write("AT+CMGF=1\r"); //activation du mode SMS
  delay(2000);


  serialSIM800.write("AT+CMGS=\"+********\"\r"); //envoi d'un sms au numéro inscrit
  delay(2000);
   
  serialSIM800.write("Salut"); //Contenu du SMS
  delay(2000);
   
  serialSIM800.write((char)26); //Permet d'indiquer que le message est finit
  delay(2000);
     
  Serial.println("SMS envoyé !");
}
 void loop() {

1 : ne laisse pas ton numéro de téléphone en clair sur un forum (tu peux éditer ton message et le remplacer par des *****)
2 : j'ai l'impression que ce programme fait déjà ce que tu veux. Il envoie un SMS lorsqu'il est alimenté.

Bonjour merci de ta réponse j'ai supprimé mon numéro merci x)

Alors non il envoie un sms que lorsque je téléverse le programme ou lorsque j'ouvre le moniteur série cependant mon détecteur ne sera jamais relié à un ordinateur mais à une alimentation type pile Alcaline 9V et lorsque cela s'alimente ça m'envoie un sms sans que j'aie besoins de toucher à rien...

Ben, c'est ce que tu demandes ici, non ?

L'étape qui suit est de m'envoyer un SMS automatiquement dès que la carte arduino et donc le module GSM est alimenté

Lorsque tu branches la pile, le SMS sera envoyé.

Bah j’ai fait plusieurs tests et non cela ne marche pas comme cela… Comme dit précédemment il faut obligatoirement que soit je téléverse le programme pour le réinitialiser et donc ça envoie le sms soit j’ouvre le moniteur série ce qui réinitialise aussi la carte et donc ça envoie aussi le sms. Si je ne fais fait aucune des deux actions précédentes le message ne s’enverra jamais malgré l’alimentation branchée … Je pensais mettre un compteur à base de if (compteur=0,compteur<5,compteur++) mais cela ne marche pas non plus. Moi aussi j’ai cru au début que cela marcherai mais non. Merci pour ton aide en tout cas !

Ça peut venir de ça :

  while(!Serial);
   serialSIM800.begin(9600);

Quel est ton modèle de carte Arduino : un Leonardo ?
Essaye d'enlever la ligne

  while(!Serial);

Comment tout cela est-il alimenté ? Est-ce l'arduino qui alimente le module GSM ou la pile ?

J'ai retiré la ligne que tu m'a demandé je vais faire les tests je te tiens au courant !

le module GSM est alimenter via une carte arduino UNO basique qui est elle même alimenté via une pile alcaline 9V :slight_smile:

J’ai réaliser le test avec la ligne en moins comme tu m’a proposé mais malheureusement le résultat est toujours le même tant que je n’ouvre pas le moniteur série ou que je téléverse pas de nouveau le programme il ne s’exécute pas et l’envoie du sms ne se fait pas…

#include <SoftwareSerial.h>
#define SIM_TX 8
#define SIM_RX 7
SoftwareSerial serialSIM800(SIM_TX,SIM_RX);
 
void setup() {
  pinMode (SIM_TX, OUTPUT); 
  pinMode (SIM_RX, OUTPUT);
 
  Serial.begin(9600);
   serialSIM800.begin(9600);
  delay(2000);
   
  Serial.println("Envoi du SMS en cours...");

  serialSIM800.write("AT+CMGF=1\r"); //activation du mode SMS
  delay(2000);


  serialSIM800.write("AT+CMGS=\"+33664869788\"\r"); //envoi d'un sms au numéro inscrit
  delay(2000);
   
  serialSIM800.write("Salut"); //Contenu du SMS
  delay(2000);
   
  serialSIM800.write((char)26); //Permet d'indiquer que le message est finit
  delay(2000);
     
  Serial.println("SMS envoyé !");
}
 void loop() {


 

    
  }

Je pense que c'est un problème d'alimentation : ce module consomme parfois plus que ce que peut fournir un Arduino (jusqu'à 2A en pic).
Tu trouveras ici des solutions alternatives pour l'alimenter, par exemple avec une batterie LiPo :

Quel est exactement ton module ? As-tu une photo ou une référence d'achat ?

c'est un module GSM SIM 800L EVB. Merci je vais regarder cela sinon vous auriez pas une idée qui dit que lorsque la carte s'alimente on oblige le programme à se lancer au bout de 5 secondes ? J'en sais rien x)

Si, il suffit d'ajouter

delay(5000);  // 5000 ms soit 5 secondes

au tout début du setup.

Ton module, c'est bien ça ?

(ok, je viens de voir ta photo, ça ressemble)

Finalement en rajoutant un delay au début du setup et en retirant la ligne dont tu m'a parlé au début cela fonctionne !! Merci beaucoup j'aurais galéré mais grace a toi j'ai réussit ! Merci encore ! :slight_smile: :slight_smile: :slight_smile:

Super ! Bonne continuation...

CAMHI:
J’ai réaliser le test avec la ligne en moins comme tu m’a proposé mais malheureusement le résultat est toujours le même tant que je n’ouvre pas le moniteur série ou que je téléverse pas de nouveau le programme il ne s’exécute pas et l’envoie du sms ne se fait pas…

#include <SoftwareSerial.h>

#define SIM_TX 8
#define SIM_RX 7
SoftwareSerial serialSIM800(SIM_TX,SIM_RX);

void setup() {
  pinMode (SIM_TX, OUTPUT);
  pinMode (SIM_RX, OUTPUT);

Serial.begin(9600);
  serialSIM800.begin(9600);
  delay(2000);
 
  Serial.println(“Envoi du SMS en cours…”);

serialSIM800.write(“AT+CMGF=1\r”); //activation du mode SMS
  delay(2000);

serialSIM800.write(“AT+CMGS=”+33#######"\r"); //envoi d’un sms au numéro inscrit
  delay(2000);
 
  serialSIM800.write(“Salut”); //Contenu du SMS
  delay(2000);
 
  serialSIM800.write((char)26); //Permet d’indiquer que le message est finit
  delay(2000);
   
  Serial.println(“SMS envoyé !”);
}
void loop() {

}

tu as oublié d’enlevé ton numéro dans ce code !!! (j’ai remplacé par # dans la citation :wink: