RECEPTION SMS

Bonjour à tous

Je suis en train de développer un thermomètre GSM en utilisant un vieux gsm SIEMENS A60.

Voici les composants utilisés pour ce montage :

  • un Arduino LEONARDO
  • un GSM SIEMENS A60 en mode PDU pour la gestion des SMS
  • un capteur dallas DS18B20 pour la température

et voici le fonctionnement :

  • utilisation d'un capteur dallas DS18B20 pour reveler la température.
  • envoi automatique d'un sms d'alerte (sur un numéro prédéfini) lorsque la température descend sous un seuil défini
  • réception de SMS pour activer l'envoi immédiat de la température actuelle. On peut aussi imaginer d'utiliser cette fonctionnalité pour activer ou désactiver des relais.

Le relevé de température ainsi que le message d'alerte (les envois de sms au format PDU) fonctionnent correctement.

Par contre je n'arrive pas à lire les SMS recus par mon LEONARDO.

Lorsque je branche mon GSM sur mon PC en passant par une interface RS232 j'ai bien un message sur mon hyperterminal qui s'affiche lorsqu'un SMS arrive.
Voici le message :
+CMTI: "ME",1
À partir de là j'envoi un AT+CMGR=1 et je peux lire le message sur mon hyperterminal
Pour effacer le SMS je lance un AT+CMGD=1

Maintenant si je connecte mon GSM sur le LEONARDO je n'arrive pas, je pense, à écouter le port série logiciel sur lequel est connecté le GSM, donc je n'arrive pas à interpréter le message recu.

Pour faire mes essais j'ai juste créé un petit sketch de réception de SMS.
Lorsqu'un SMS arrive le LEONARDO doit éteindre la led intégrée au LEONARDO.
Et c'est la que je bloque.
Le GSM recoit bien le SMS mais la led ne s'éteint pas.
Je tiens à préciser que j'utilise la librairie SoftwareSerial pour créer un deuxième port série sur lequel est branché le GSM.
Le port intégré au LEONARDO est utilisé pour faire le debogage

En gros c'est la fonction loop que ne marche pas

Voici le code que j'utilise :

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int led = 13;

void setup() {               
  pinMode(led, OUTPUT);   
  mySerial.begin(9600);
  mySerial.println("AT+CMGF=0");         //METTRE LE GSM EN MODE PDU POUR LES SMS
  delay(1500);
  mySerial.println("AT+CPMS=\"ME\",\"ME\",\"ME\"");    //UTILISATION DE LA MEMOIRE DU GSM POUR LES SMS
  delay(1500);
  mySerial.println("AT+CNMI=1,1");    //LE GSM INFORME DE L'ARRIVEE D'UN SMS EN STIPULANT LA MEMOIRE UTILISEE (ME) ET L'EMPLACEMENT DANS LA MEMOIRE  
  delay(1500);
  digitalWrite( led, HIGH );   //ON ALLUME LA LED
  delay(1500);
}

void loop() {
  if (mySerial.available()>0) {  //SI QUELQUE CHOSE ARRIVE
    digitalWrite( led, LOW );      //ON ETEINT LA LED
  }
}

Merci beaucoup pour votre aide
Cédric

Ne pas utiliser SoftwareSerial mais Serial1 tout simplement qui correspond au port série "hardware" de la Leonardo
Serial corrspondant lui au port série virtuel CDC sur l'USB

merci pour la réponse
j'étais justement entrain de lire ce détail sur la page de présentation du LEONARDO.

J'essayerais demain en supprimant SOFTWARESERIAL et en mettant serial1

A demain