GeekOnFire GSM/GPRS Shield SerialRelay2

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

Introduction

Voici une version améliorée sur SerialRelay proposé par GeekOnFire.
Le principal désavantage de la version de base est qu'il n'est pas possible
d'envoyer certains caractères d'échappement (comme le Ctrl-Z) pourtant absolument
nécessaire pour clôturer un message SMS.


Cette version du programme écoute ce qui transite du Serial Moniteur
d'Arduino IDE vers le GPRS shield.

Si vous entrez un tilde (~), le programme en déduit que vous voulez envoyer
une séquence d'échappement au GPRS shield.Il attend la saisie du caractère suivant
et en fonction du second caractère envoi la séquence d'échappement adéquate.

Séquences d'échappement

Veuillez utiliser les séquence d'échappements suivantes dans le moniteur série pour envoyer une séquence d'échappement particulière au GPRS shield.

Séquence Moniteur Serie Séquence envoyée au GPRS shield Description
~z CTRL-Z Fin de message SMS (caractère #26)
~e ESC Abandon de message SMS (caractère #27)
~~ ~ Permet d'envoyer un tilde au GPRS shield

Code Source - Arduino < 1.0

Vous pouvez le télécharger en cliquant sur SerialRelay2.pde.

Le code est commenté en anglais et en français.

// Serial Relay v2.0 
// EN:
//  Arduino will patch serial link between the computer and 
//  the GPRS Shield at 19200 bps 8-N-1
//  Computer is connected to Hardware UART
//  GPRS Shield is connected to the Software UART 
//
//  This version allows to send escape sequence to GPRS Shield (for SMS messaging)
//  use <tilde>z for Ctrl-z
//  use <tilde>e for ESC
//  use <tilde><tilde> for <tilde>
//
//  Require the Arduino serial monitor to be configured on
//  19200 bds + Carriage Return
//
// FR:
//  Arduino va établir une liaison série entre l'ordinateur et
//  le shield GPRS a 19200 bauds 8-N-1
//  L'ordinateur est connecté à un UART matériel
//  Le shield GPRS est connecté a un UART logiciel.
//
//  Cette version permet d'envoyer des séquences d'échappement au
//  shield GPRS (pour envoyer une fin de message pour les SMS)
//  utiliser <tilde>z pour Ctrl-z
//  utiliser <tilde>e pour ESC
//  utiliser <tilde><tilde> pour un tilde
//
//  Le moniteur série d'Arduino doit etre configuré sur
//  19200 bds + Carriage Return
//
// Licence: CC-BY-SA 
// Meurisse D.
// http://www.mchobby.be 
//
#include <NewSoftSerial.h>
 
NewSoftSerial mySerial(7, 8);
 
// EN: 1 means than escape caracter (tilde) has been detected from Serial Monitor (Arduino Side)
// FR: 1 indique que le caractere d'echappement est détecté sur le moniteur serie (coté Arduino)
int escapingFlag = 0; 

void setup()
{
  mySerial.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);                 // the GPRS baud rate   
}
 
void loop()
{
    char SerialInByte;
    if(Serial.available())
    {
       // EN: Listen to Arduino IDE serial Moniteur
       // FR: Ecouter les envois du serial moniteur d'Arduino IDE
       char SerialInByte;
       SerialInByte = (unsigned char)Serial.read();
       
        // EN: Intercept escape character (tilde) for escape sequence
       // FR: Intercepter le caractere d'echappement (tilde) for une sequence d'echappement
       if( (SerialInByte == 126) && (escapingFlag==0) ) {
         escapingFlag = 1;
         return; // wait next caracter / attendre caractere suivant
       }
       else {
         // EN: complete escaping sequence (if appropriate)
         // FR: complete la séquence d'echappement (if appropriate)
         if( escapingFlag == 1 ){
           if( SerialInByte == 122 ){ // (tilde) z = Ctrl Z
             SerialInByte = 26;
           }
           if( SerialInByte == 101 ){ // (tilde) e = ESC
             SerialInByte = 27;
           }
           escapingFlag = 0;
         }
         
         // EN: Normal working. Simply send character (escaped or not) to GPRS shield
         // FR: Fonctionnement normal. Envoyer le caractere (echappé ou non) vers GPRS shield
         mySerial.print( SerialInByte );         
       }      
       
     }  
    else  if(mySerial.available())
    {
       // EN: Listen to GRPS shield + relay to Arduino Serial Monitor 
       // FR: Ecouter les envois du GPRS shield + Renvoi vers Arduino Serial Monitor
       
       Serial.print((unsigned char)mySerial.read());
     }   
 
}

Code Source - Arduino >= 1.0

Vous pouvez le télécharger en cliquant sur SerialRelay2_Ard10.ino.

Le code est commenté en anglais et en français.

// Serial Relay v2.0 - Arduino >= 1.0 
// EN:
//  *** PATCHED VERSION for Arduino 1.0 ***
//  Arduino will patch serial link between the computer and 
//  the GPRS Shield at 19200 bps 8-N-1
//  Computer is connected to Hardware UART
//  GPRS Shield is connected to the Software UART 
//
//  This version allows to send escape sequence to GPRS Shield (for SMS messaging)
//  use <tilde>z for Ctrl-z
//  use <tilde>e for ESC
//  use <tilde><tilde> for <tilde>
//
//  Require the Arduino serial monitor to be configured on
//  19200 bds + Carriage Return
//
// FR:
//  *** VERSION CORRIGEE POUR Arduino 1.0 ***
//  Arduino va établir une liaison série entre l'ordinateur et
//  le shield GPRS a 19200 bauds 8-N-1
//  L'ordinateur est connecté à un UART matériel
//  Le shield GPRS est connecté a un UART logiciel.
//
//  Cette version permet d'envoyer des séquences d'échappement au
//  shield GPRS (pour envoyer une fin de message pour les SMS)
//  utiliser <tilde>z pour Ctrl-z
//  utiliser <tilde>e pour ESC
//  utiliser <tilde><tilde> pour un tilde
//
//  Le moniteur série d'Arduino doit etre configuré sur
//  19200 bds + Carriage Return
//
// Licence: CC-BY-SA 
// Meurisse D.
// http://www.mchobby.be 
//
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(7, 8);
 
// EN: 1 means than escape caracter (tilde) has been detected from Serial Monitor (Arduino Side)
// FR: 1 indique que le caractere d'echappement est détecté sur le moniteur serie (coté Arduino)
int escapingFlag = 0; 

void setup()
{
  mySerial.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);                 // the GPRS baud rate   
}
 
void loop()
{
    char SerialInByte;
    if(Serial.available())
    {
       // EN: Listen to Arduino IDE serial Moniteur
       // FR: Ecouter les envois du serial moniteur d'Arduino IDE
       char SerialInByte;
       SerialInByte = Serial.read();
       
        // EN: Intercept escape character (tilde) for escape sequence
       // FR: Intercepter le caractere d'echappement (tilde) for une sequence d'echappement
       if( (SerialInByte == 126) && (escapingFlag==0) ) {
         escapingFlag = 1;
         return; // wait next caracter / attendre caractere suivant
       }
       else {
         // EN: complete escaping sequence (if appropriate)
         // FR: complete la séquence d'echappement (if appropriate)
         if( escapingFlag == 1 ){
           if( SerialInByte == 122 ){ // (tilde) z = Ctrl Z
             SerialInByte = 26;
           }
           if( SerialInByte == 101 ){ // (tilde) e = ESC
             SerialInByte = 27;
           }
           escapingFlag = 0;
         }
         
         // EN: Normal working. Simply send character (escaped or not) to GPRS shield
         // FR: Fonctionnement normal. Envoyer le caractere (echappé ou non) vers GPRS shield
         mySerial.print( SerialInByte );         
       }      
       
     }  
    else  if(mySerial.available())
    {
       // EN: Listen to GRPS shield + relay to Arduino Serial Monitor 
       // FR: Ecouter les envois du GPRS shield + Renvoi vers Arduino Serial Monitor
       char c = mySerial.read();
       Serial.print( c );
     }   
 
}

Exemple

Voici un exemple d'envoi de SMS depuis le Serial Moniteur d'Arduino IDE.

Les réponses OK sont renvoyée par la GRPS Shield, le caractère ">" est une invite du SIM900 à poursuivre le message SMS.

Note:La commande "AT+CMGF=1" sert a passer la gestion des messages SMS en mode texte.

AT

OK
AT+CMGF=1

OK
AT+CMGS="+32499667788"
> For sure, GPRS Shield 
> is really awesome
> 

C'est sur cette dernière ligne avec le ">" que vous entrez la séquence "~z" pour envoyer un CTRL-Z au GPRS Shield.

Le GPRS shield cloturera le message SMS et l'enverra sur le réseau mobile. Vous obtiendrez une réponse du genre.

+CMGS: 127

OK
 

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.