GSM/GRPS Shield: Commande via SMS

Introduction
Depuis la vente du GRPS Shield pour Arduino sur le WebShop de MC Hobby, nous nous sommes penchez sur deux applications.

Nous présenterons ici la projet le plus excitant des deux, à savoir la réception et l'interprétation de commandes reçues par SMS.

Ce projet est bien évidemment totalement documenté en Français sur notre Wiki. Il accompagne d'ailleurs notre traduction Française augmentée du GPRS Shield.
Pour plus d'information précises, vous pouvez consulter nos pages consacrées au GSM/GPRS Shield sur notre Wiki.


Dialoguer avec le GPRS Shield
Le GPRS Shield utilise un UART. L'UART est une interface de type série, ce qui permet à Arduino d'établir un canal de communication avec le GPRS Shield pour envoyer des commandes/ordres.
Cette méthode de communication présente différents avantages:
  1. Limite la complexité du montage. Il ne faut que 2 pins pour communiquer avec le GPRS shield. Pas besoin de mettre en oeuvre des signaux compliqués avec de nombreuses broches.
  2. Limite l'utilisation des broches de votre Arduino.
    Ce qui en laisse d'autant plus de libres pour votre propre projet.
  3. Simplifie les échanges et le programmation sur Arduino.
    La syntaxe des commandes AT est "textuelle" (tout comme un programme pour Arduino), simple et formalisée.
    Une fois habitué, vous comprendrez assez vite comment tirer parti de la documentation des commande AT fournies par le constructeur.
    Le principe des commandes AT est plus vieux même qu'Internet, c'est dire s'il s'agit d'une technologie à la fois simple, robuste (puisqu'elle à survécus) et d'une redoutable efficacité.
De même, la simplicité du formalise des commandes AT est également un avantage pour Arduino puisqu'il (le programme Arduino) sera capable:
  1. De donner des ordres au GPRS shield en employant des commandes AT.
  2. D'interpréter assez facilement les réponses reçues par le GRPS Shield.
C'est le principe même de "Commande via SMS".
C'est la raison pour-laquelle nous avons édité l'article "Envoyer/Interpréter des commandes par Port Série" il y a quelques semaines.

Le montage
Nous avons raccordé une LED sur la PIN 13 de notre Arduino.




Et nous utilisons les Pin 7 & 8 pour établir une liaison série avec notre GPRS Shield.
Par défaut, le GPRS shield est configuré pour utiliser les Pin 7 & 8.
La librairie SoftwareSerial (disponible en standard avec Arduino 1.0) permet au programme Arduino d'établir la communication avec le GPRS shield.

Le programme
Le programme est un peu plus long que celui permettant d'envoyer un SMS.
En effet, il faut ici intercepter les communications spontanées envoyées par le GPRS shield (par exemple à la réception d'un message SMS) pour y réagir.

Le programme complet est disponible ici sur notre Wiki.

Pour faciliter le débugging du programme, nous avons également renvoyé une copie de tous les messages du GPRS shield vers la liaison série d'Arduino.
De même, les messages que vous envoyés sur la liaison série d'Arduino sont relayés vers le GPRS shield.
Cela permet de faire des test en live.

Quelques explications sur le programme:
Lorsque le programme reçoit "+CPIN: SIM PIN", il sait qu'il faut entrer un code PIN pour accéder au réseau GSM.
Si vous avez remplace les "XXXX" par le code PIN adéquat, ce dernier sera immédiatement envoyé au GPRS Shield.

Quand le programme reçoit "Call Ready" depuis le GPRS shield, il sait que le shield est connecté sur un réseau mobile. En réponse, le programme envoi l'information "*** GPRS Shield registered on Mobile Network ***" sur la connexion série d'Arduino (donc sur le moniteur série).

Lorsque le programme reçoit le message spontané "+CMTI: "SM",20", il sait qu'un SMS est reçu et stocké dans la mémoire du shield (20 dans ce cas).


Le programme envoi alors la commande "AT+CMGR=20" pour demander les détails (et le contenu) du message SMS.



En réponse au message AT+CMGR, le GPRS shield renvoi le contenu contenu du SMS (plus quelques détails techniques).
Attention, il faut configurer la gestion des SMS en mode texte via la commande AT+CMGF=1.


En voici un exemple de résultat de AT+CMGR:

GPRS Message: [+CMGR: "REC UNREAD","+3249--secret--","","12/04/08,14:00:15+08"]

on


Le message "on" dans notre cas, est capturé et sert à allumer la LED sur la pin 13.
Le message "off", comme vous vous en doutez, éteint la LED.

Résultat du programme


Quelques suggestions
En variante, le programme SMS commande pourrait être modifié pour fournir les services suivants:
  • Retourner des coordonnées GPS d'un module GPS branché sur votre Arduino.
  • Recevoir un code de déverrouillage pour l'ouverture d'une porte ou la désactivation d'une alarme.
  • Relayer des messages vers un système physique (via le port série ou une carte ethernet)