GPS/RPS : Différence entre versions

De FunLab Documentation
Aller à : navigation, rechercher
(Page créée avec « {{Projets |status=Idée |image=Image shield.jpg |license=CC-by-sa-3.0 |Createur=Thomas, }} Ce projet utilise un arduino uno et un shield GPS/GPRS afin de récupérer des c... »)
 
 
Ligne 1 : Ligne 1 :
{{Projets
 
|status=Idée
 
|image=Image shield.jpg
 
|license=CC-by-sa-3.0
 
|Createur=Thomas,
 
}}
 
 
Ce projet utilise un arduino uno et un shield GPS/GPRS afin de récupérer des coordonnées GPS et les envoyer par SMS.
 
Ce projet utilise un arduino uno et un shield GPS/GPRS afin de récupérer des coordonnées GPS et les envoyer par SMS.
  

Version actuelle datée du 20 avril 2017 à 09:38

Ce projet utilise un arduino uno et un shield GPS/GPRS afin de récupérer des coordonnées GPS et les envoyer par SMS.


Update: fichiers a jour, description à venir

Lien du produit pour plus d'information : http://www.lextronic.fr/P34213-platine-shield-25ggsmgprs--gps.html (ou voir cette archive pour du code... moins à jour, forcémment!)

Reception_SMS.ino
#include <SoftwareSerial.h> //Librairie utilisée pour communiquer avec le shield GSM/GPRS

// Initialisation du module GSM/GPRS
// Initialisation du port série 7 et 8 pour communiquer avec le shield GPRS
SoftwareSerial mySerial(7, 8);
// Mémoire tampon de type string pour les messages du shield GPRS 
String msg = String("");
// Est mis à 1 quand le prochain message du shield GPRS contiendra le contenu du SMS
int SmsContentFlag = 0;

//*******************************************************
// VARIABLES A MODIFIER AVEC SES DONNEES PERSOS
//*******************************************************
// Code PIN de la carte SIM  qui s'insère dans le shield GSM : A remplacer !
String SIM_PIN_CODE = String( "5005" );


//**************************************************
// FONCTION PRINCIPALE SETUP D'INITIALISATION
//**************************************************

void setup() 
 {
        Serial.begin(19200); 
        mySerial.begin(19200);  
        delay(100);        
        mySerial.println("ATZ"); 
        mySerial.println("AT");  // Envoi d'une commande pour configuration du debit automatique              
        delay(1000);                   
        mySerial.println("AT+IPR=19200"); // Mise en mémoire du débit
        delay(1000);
        mySerial.print("AT+CPIN=");        // Envoi du code PIN retourne ERREUR si il est déjà présent (ce qui n'est pas grave...)
        mySerial.println( SIM_PIN_CODE ); 
        delay(1000);
        mySerial.println("AT+CNMI=2,2,0,0,0");
        mySerial.println("AT+CMGF=1"); // GSM en mode texte
 }

 
 
//**************************************************************************************************************
//FONCTION PRINCIPALE LOOP QUI S'EXECUTE EN BOUCLE (COEUR DU PROGRAMME) ATTEND LES INFORMATIONS DU SHIELD GSM
//**************************************************************************************************************

void loop()
{
    char SerialInByte;
     
    if(Serial.available())
       {
       mySerial.print((unsigned char)Serial.read());
       }  
    else  if(mySerial.available())
       {
       char SerialInByte;
       SerialInByte = (unsigned char)mySerial.read();  
       // Si le message se termine par un <CR> alors traiter le message 
       if( SerialInByte == 13 )
          {
          // Stocke le caractère dans le buffer de message
          ProcessGprsMsg();
          }
        if( SerialInByte == 10 ){ }
        else 
           {
           // Stocke le caractère dans la mémoire tampon réservé au message
           msg += String(SerialInByte);
           }
       }   
}


 

// FONCTION QUI EXECUTE UNE COMMANDE VERS LA VERA SUR LA BASE DU CONTENU D'UN SMS
//********************************************************************************************


// FONCTION QUI DEMANDE AU SHIELD GPRS D'UTILISER LE MODE TEXT POUR LES MESSAGES
//*******************************************************************************************

void GprsTextModeSMS()
 {
 mySerial.println( "AT+CMGF=1" );
 }



// FONCTION QUI LIT LA POSITION DU SMS
//*******************************************

void GprsReadSmsStore( String SmsStorePos )
 {
 mySerial.print( "AT+CMGR=" );
 mySerial.println( SmsStorePos );
 }



// FONCTION QUI EFFACE LE CONTENU DE LA MEMOIRE TAMPON DES MESSAGES DU GPRS SHIELD
//*********************************************************************************************

void ClearGprsMsg()
 {
 msg = "";
 }



//***************************************************************************************
// FONCTION QUI INTERPRETE LES MESSAGES DU SHIELD GPRS ET AGIT EN CONSEQUENCE
//***************************************************************************************
void ProcessGprsMsg() 
 {
 
 // Message non sollicité quand un SMS arrive
 
 // Lecture du stockage SMS via l'UART (résultat de la requete GprsReadSmsStore)
 if( msg.indexOf( "+CMT:" ) >= 0 )
  {
  // Le prochain message contiendra le contenu du SMS
  SmsContentFlag = 1;
  // Les ligne suivantes sont essentielle pour ne pas effacer le flag!
  ClearGprsMsg();
  return;
  }
 // le message +CMGR précédent indiquait que le message suivant du Shield GPRS  contient le corps du SMS 
 if( SmsContentFlag == 1 )
  {
    String latitude = msg.substring(0,10);
    String longitude = msg.substring(11,21);
  Serial.print(100);
  Serial.println(latitude);
  delay(500);
  Serial.print(10000);
  Serial.println(longitude);
  }
 ClearGprsMsg();
 // Toujours mettre le flag à 0
 SmsContentFlag = 0;
 } 

Code pour récupérer les trames GPS

GPS_via_SMS.ino

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
int RXPin = 2;
int TXPin = 3;
int GPSBaud = 4800;
TinyGPSPlus gps;
SoftwareSerial gpsSerial(RXPin, TXPin);
SoftwareSerial Sara(10,11);
#define DEBUG //  Mode debogage


//                                        Initialisation
//*******************************************************************************************************

void setup()
{
//                                            GPRS
//*******************************************************************************************************
  Sara.begin(115200);
  Serial.begin(115200);
  gpsSerial.begin(GPSBaud);
  
  Sara.println("verification de l'etat GPRS");
  Serial.println("AT+CGATT?");
  GetSara();
  
  Sara.println("verification de la connection au reseau GPRS");
  Serial.println("AT+UPSND=0,8"); // Pour afficher le numero de l'erreur
   GetSara();
   
  Sara.println("configuration par default");
  Serial.println("ATZ");
  GetSara();
  
  Sara.println("affichage erreur");
  Serial.println("AT+CMEE=1");
  GetSara();
  
  Sara.println("Code Pin");
  Serial.println("AT+CPIN=\"5005\""); // Code PIN
  GetSara();
  
  delay(1000); // Connexion au reseau

  #ifdef DEBUG
  Serial.println("AT+CSQ");//état de la connection
  Sara.println("Operateur");
  Serial.println("AT+COPS?"); // Operateur
  GetSara();
  
  delay(2000);

      //numero du centre operateur
  Sara.println("envoi de la commande: AT+CSCA=\"+33770499999\"");
  Serial.print("AT+CSCA=\"+33770499999\"\r");
  GetSara();
  delay(2000); // Connexion au reseau

  Sara.println("Etat de la connexion au reseau :");
  Sara.println("La connexion est etablie si +CREG: 0,1");
  Serial.println("AT+CREG?"); // Connexion au reseau
  GetSara();
 
  #endif

  Sara.println("Activation du mode SMS");
  Serial.println("AT+CMGF=1"); // Activation du mode SMS
  GetSara();

  Sara.println("Envoi du numero de telephone");
  Serial.println("AT+CMGS=\"+33*********\""); // Envoi du numero de telephone
  GetSara();
  
  delay(500);
  
  Sara.println("Corps du message");
  Serial.println("Debut de l'envoie SMS :)"); // Corps du message
  Sara.println("CTR+Z");
  Serial.write(0x1A); // CTR+Z
  GetSara();
  
  delay(500);
}
//fin du setup      




//                                   Envoie des Trames par SMS
//***************************************************************************************************  
void loop()
{
      while(gpsSerial.available() > 0) 
      if (gps.encode(gpsSerial.read())) 
      
      sms();
   
      if (millis() > 5000 && gps.charsProcessed() < 10) //Toutes les 5 secondes passées et si aucun caractère n'arrive alors montre "Aucun GPS Detecté"
      {
      Serial.println(F("Aucun GPS n'est detecte"));
      while(true);                    // instruction à répéter jusqu'a l'infini
      
  }
  delay(500);
}




//**********************************//GPS//*******************************************************
  
void LectureTrames()
 {
    if (gps.location.isValid())
      {
        delay(500);
        Serial.print(gps.location.lat(), 6);
        Serial.print(F(","));
        Serial.print(gps.location.lng(), 6);
      }
   else
       {
        Serial.print(F("Donnees Invalides"));
       }
   Serial.println();
 }
  
  
  
//                                              Contenu du SMS   
//**************************************************************************************************
void sms()
  {
    //06*** devient 336***, 07*** devient 337***, 09***=>339*** +33 est l'indicatif FR...
    //33********* numéro Antoine
    //33********* numéro Dwayne
          Serial.println("AT+CMGS=\"+33*********\""); // Envoi du numero de telephone
          LectureTrames();
          Serial.write(0x1A);
  }




//                                        Lecture pour le moniteur série
//***************************************************************************************************
void GetSara()
{
  delay(500);
  
  if(Sara.available())
   {
      Sara.print("\n");
      delay(500);
      while(Sara.available())
        {
          Sara.print((char)Sara.read()); // On vide la memoire tampon du SIM900
         }
      Sara.print("\n");
   } 
}