[Tuto] Module GSM SIM800L – Recevoir un SMS et le lire

Pour voir le montage et la prise en main de ce module SIM800L, vous pouvez suivre le tuto sur cette page: Tuto SIM800L – Montage et prise en main

Le programme suivant reçoit et affiche dans le moniteur série les SMS contenus sur la carte SIM, à l’aide des commandes AT :

 // Importation des librairies
#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial sim800l(7,8);    // RX, TX
boolean sms;

void setup(){      // début du setup
  // Démarrage du modem
  sim800l.begin(9600);
  // Initialisation de la communication série
  Serial.begin(9600);
  delay(500);    // Délai pour la connexion
  sms = true;
}

void loop(){    // Début du loop
  if(sms==true){
    receivesms();
    sms = false;
  }
  // affichage dans le moniteur série des commandes AT + réponse
  if (sim800l.available()>0)
    Serial.write(sim800l.read());
  }

void receivesms(){
  Serial.println("Receiving text message...");
  sim800l.print("AT+CMGF=1\r");   // Configure le mode SMS
  // Affiche tous les messages
  sim800l.print("AT+CMGL=\"ALL\"\r");
  delay(1000);
  sim800l.println();
receivesms1

En fonction de vos besoin vous pouvez remplacer AT+CMGL= »ALL » par :

  • AT+CMGL= « REC READ » : Affiche tous les messages lus
  • AT+CMGL= « REC UNREAD » : Affiche tous les messages non lus.

Si vous désirez supprimer les SMS contenus sur la carte SIM, il faut exécuter la commander AT+CMGD :

  • AT+CMGD =1 : supprime les SMS déjà lus
  • AT+CMGD=2 : supprime les SMS lus, et envoyés
  • AT+CMGD=3 : supprime les SMS lus, envoyés et non envoyés
  • AT+CMGD=4 : supprimes tous les SMS (lus, non lus, envoyés et non envoyés)

Attention ! Pour pouvoir afficher correctement l’ensemble du contenu de vos messages, vous devez modifier votre librairie Arduino SoftwareSerial.

Trouvez le fichier SoftwareSerial.h et modifiez la ligne de commande :

  #define _SS_MAX_RX_BUFF 64 // RX buffer size

En :

  #define _SS_MAX_RX_BUFF 256 // RX buffer size

Récapitulatif des commandes AT nécessaires pour lire et supprimer des SMS:

CommandeRéponseInfo
AT+CMGL= ”REC UNREAD”+CMGL : <index>, ”REC UNREAD”,”<n° de tél>,””,<Date et heure>

<Message>

OK

Affiche tous les SMS non lus
AT+CMGL= ”REC READ”+CMGL : <index>, ”REC READ”,”<n° de tél>,””,<Date et heure>

<Message>

OK

Affiche tous les SMS lus
AT+CMGL= ”STO UNSENT READ”OKEnregistre les SMS non envoyés
AT+CMGL= ”STO SENT READ”OKEnregistre les SMS envoyés
AT+CMGL=”ALL”+CMGL : <index>, ”ALL”,”<n° de tél>,””,<Date et heure>

<Message>

OK

Affiche tous les messages
AT+CMGD=1OKSupprime les SMS déjà lus
AT+CMGD=2OKSupprime les SMS lus et non envoyés
AT+CMGD=3OKSupprime les SMS lus, envoyés et non envoyés
AT+CMGD=4OKSupprime tous les SMS (lus, non lus, envoyés et non envoyés)

[Tuto] Module GSM SIM800L – Envoyer un SMS

Pour voir le montage et la prise en main de ce module SIM800L, vous pouvez suivre le tuto sur cette page: Tuto SIM800L – Montage et prise en main

Le programme suivant utilise les AT commandes pour envoyer un SMS.

 // Importation des librairies
#include <SoftwareSerial.h>
#include <String.h> 

SoftwareSerial sim800l(7,8); // RX,TX
boolean sms;

void setup(){           // Début du setup
  sim800l.begin(9600);  // Démarrage du modem
  Serial.begin(9600);	// Initialisation de la communication série
  delay(500);		// Délai pour la connexion 
  sms = true;
  
  if(sim800l.available())
  Serial.write(sim800l.read());
  }
  
   void loop(){	// Début du loop
   if(sms==true){
     sendsms();				
     sms = false;
   }
 }
   
  void sendsms(){
    Serial.println("Sending text message...");
    sim800l.print("AT+CMGF=1\r");  // Lance le mode SMS
    delay(100);
    // Entrez votre numéro de téléphone    
    sim800l.print("AT+CMGS=\"+3367617****\"\r");  
    delay(100);
    // Entrez votre message ici    
    sim800l.print("Message ici \r");  
    // CTR+Z en langage ASCII, indique la fin du message
    sim800l.print(char(26));			  
    delay(100);
    sim800l.println();
    Serial.println("Text send");  // Le message est envoyé.
    }

Ou pour modifier les informations (numéro de téléphone, message) dans le moniteur série :

 // Importation des librairies
#include <SoftwareSerial.h>
#include <String.h>
SoftwareSerial sim800l(7,8);
boolean sms;

void setup(){
  sim800l.begin(9600);  // Démarrage du modem
  Serial.begin(9600);   // Initialisation de la communication série
  delay(500);           // Délai connexion
  sms = true;
  if(sim800l.available())
    Serial.write(sim800l.read());
  }

void loop(){
  if(sms==true){   // on ne passe qu’une seule fois dans le loop()
    sendsms();
  sms = false;
}
}

void sendsms(){
  // set SMS mode
  Serial.println("SMS sender");
  sim800l.print("AT+CMGF=1\r");    // initialise le mode SMS
  delay(100);
  // phone number
  Serial.println("Enter the phone number :");
  char number[20] ;
  readSerial(number);
  sim800l.print("AT+CMGS=");
  sim800l.print(number);
  sim800l.print("\"\r");
  // message
  delay(100);
  Serial.print("Enter your message to send to : ");
  Serial.println(number);
  char message[200];
  readSerial(message);
  sim800l.println(message);
  sim800l.print(char(26));
  delay(100);
  sim800l.println();
  Serial.print("Message : ");
  Serial.println(message);
  Serial.println("Text send");
 }

int readSerial(char result[]){
  int i = 0;
  while (1)
  {
  while (Serial.available() > 0){
    char inChar = Serial.read();
    if (inChar == '\n')
    {
  result[i] = '\0';
  Serial.flush();
  return 0;
  }
  if (inChar != '\r'){
    result[i] = inChar;
    i++;
  }}}}

Récapitulatif des commandes AT pour l’envoi d’un SMS

CommandeRéponseInfo
AT+CMGF=1OKConfigure le mode SMS
AT+CMGS=”<numéro de telephone>”  ENTER

> Votre message  CTR+Z

OKEnvoi un SMS au numéro indiqué