SmsCommand

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Description

Le but de ce petit projet est de commander une sortie d'Arduino en fonction d'un ordre reçu via SMS.

Ce projet utilise un interpréteur de commande rudimentaire pour dialoguer avec le SIM900 et dont le fonctionnement est décrit dans la page [SerialCommand].

Vous vous n'avez pas encore lu l'article [SerialCommand], je vous invite vivement à le faire, cela éliminera d'emblée une partie de la complexité du code ci-dessous.

Ce programme de démonstration fait également un usage intensif de messages de déboggages qui sont envoyés sur le port série. Vous pouvez également envoyer vos propres commandes AT directement sur le SIM900.

Vous devez configurer le Moniteur Serie d'Arduino IDE sur 19200 baud et Carriage Return.

Le montage

Un LED est raccordée sur la PIN 13 par l'intermédiaire d'une résistance de 330 Ohm.

SimpleLedPin13.png

Augmenter le buffer de NewSoftSerial

Librairie NewSoftSerial utilise un buffer (mémoire tampon) de 64 octets/bytes pour la réception des messages envoyés par le GPRS shield.

Lorsque vous voulez pouvoir consulter des messages SMS en mode texte, cette taille de buffer est insuffisant.

Le résultat le plus frappant, c'est que les commandes AT+CMGR ne retournerons pas le contenu du SMS ou se limiterons uniquement aux quelques premiers caractères.

Il faut donc modifier la librairie NewSoftSerial pour augmenter la taille du buffer. Rassurez-vous, cela se fait assez simplement.

Pour augmenter la taille du buffer:

  1. Chercher le fichier NewSoftSerial.h dans vos librairies Arduino
  2. Localiser la ligne _NewSS_MAX_RX_BUFF
  3. Augmenter la taille du buffer à 128 (au lieu de 64)
  4. Recompiler votre sketch.

Modus Operandi

Le programme de démonstration présenté ici est similaire au programme SerialRelay présent dans le documentation générale du GPRS shield.

  • Toutes les commandes que vous entrez dans le moniteur série d'Arduino sont envoyés à l'UART du GPRS Shield.
  • Tous les messages issus de l'UART du shield GPRS:
    • Sont envoyés vers le moniteur série d'Arduino.
    • Sont également analysés par le programme Arduino pour mettre en place un système de réponse automatique (ce qui permet d'entrer un code PIN automatiquement ou réagir à la réception d'un SMS).

Le programme ci-dessous fait un usage intensif de message de débogage vers le moniteur série d'Arduino.

Le but est bien entendu de vous aider à comprendre le fonctionnement interne du logiciel.

Voici comment utilisé le programme présenté:

  1. Charger le projet sur la carte Arduino
  2. démarrer le moniteur série
  3. démarrer le GPRS Shield en appuyant sur le bouton on/off
    1. Le programme attend le mot clé "Ready" OU "+CPIN: SIM PIN" qui indique qu'un code PIN est attendu.
    2. Si un code Pin est attendu, ce dernier est automatiquement envoyé (voir contenu de la variable SIM_PIN_CODE)
    3. Lorsque le GPRS shield est enregistré sur le réseau, le message "Call Ready" est envoyé par le module SIM900.
  4. A l'enregistrement sur le réseau mobile:
    1. Le message "Call Ready" est capturé par le logiciel qui affiche alors le message "*** GPRS Shield registered on Mobile Network ***"
    2. Le programme configure le GPRS shield en Mode Texte pour les SMS (voir commande "AT+CMGF=1")
  5. Utilisez un autre mobile et envoyez le message "on" par SMS vers le no de téléphone du shield GPRS
  6. Le Shield reçoit une alerte SMS (message "+CMTI").
    1. Le programme affiche le texte "*** SMS Received ***"
    2. Le programme extrait la position de stockage du SMS dans le module SIM900 depuis le message "+CMTI"
    3. Le programme consulte le contenu du message à l'aide de la commande "AT+CMGR=xx" (xx est le numéro de stockage du SMS dans le module SIM900)
    4. Il récupère ensuite le texte du message.
    5. Il interprète le contenu du message (par l'intermédiaire de la fonction ProcessSms).