IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Arduino & shield GSM


Sujet :

Arduino

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut Arduino & shield GSM
    Bonsoir
    je suis sur un projet d'automatisation par SMS via le shield GSM/GPRS de chez OPEN ELECTRONICS monté sur une carte Arduino

    je commande une pompe via un SMS

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
     
    #include "SIM900.h"
    #include <SoftwareSerial.h>
    #include "sms.h"
    #include "gsm.h"
    #include "string.h"
     
    SMSGSM sms;
     
     
    boolean started=false;
    char smsbuffer[160];
    char n_in[20];
    char n_ref[20] = "3367xxxxxxx";
    char  msg[1];
    char pompe_on[160] = "Pompeon";
    char pompe_off[160] = "Pompeoff";
     
    // fin init
     
    void setup() 
    {
      pinMode(13, OUTPUT);
     
     
      //Serial connection.
      Serial.begin(9600);
      Serial.println("GSM Shield testing.");
     
      if (gsm.begin(9600))
      {
        Serial.println("\nstatus=READY");
        started=true;  
      }
      else Serial.println("\nstatus=IDLE");
     
      if(started){
        Serial.println("mise en ligne");
     
        Serial.println("AT+CMEE=2");
        gsm.SimpleWriteln("AT+CMEE=2");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CPIN ?");
        gsm.SimpleWriteln("AT+CPIN ?");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CPIN=2434");
        gsm.SimpleWriteln("AT+CPIN=xxxx");
        delay(5000);
        gsm.WhileSimpleRead();
     
     
        Serial.println("AT+CLIP=1");
        gsm.SimpleWriteln("AT+CLIP=1");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CSCA ?");
        gsm.SimpleWriteln("AT+CSCA ?");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CMGF=1");
        gsm.SimpleWriteln("AT+CMGF=1");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("INITIALISATION POMPE");
        digitalWrite(13, LOW);
     
      }
    };
     
    void loop() 
    {
     
    if(started)
        {
        //Read if there are messages on SIM card and print them.
        Serial.println("lecture sms");
        if(gsm.readSMS(smsbuffer, 160, n_in, 20))
        {
          Serial.println(n_in);
          Serial.println(smsbuffer);
       //  
       // véfication téléphone commande  
       //
          if (memcmp(n_in,n_ref,11)==0)
          {
            Serial.println(n_in);
            Serial.println(smsbuffer);
      //
      // Test message commande de ponpe
      //
     
            if (memcmp(smsbuffer,pompe_on,7)==0) 
            {
              Serial.println("POMPE ON");
              digitalWrite(13, HIGH); 
            }
            if (memcmp(smsbuffer,pompe_off,7)==0) 
            {
              Serial.println("POMPE OFF");
              digitalWrite(13, LOW); 
            }
     
          }
          delay(1000);
        }
      }
     
    };
    pas de probleme j'envoie le SMS Pompeon la led s'allume et Pompeoff la led s'éteind
    j'ajoute une commande de vanne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    #include "SIM900.h"
    #include <SoftwareSerial.h>
    #include "sms.h"
    #include "gsm.h"
    #include "string.h"
     
    SMSGSM sms;
     
     
    boolean started=false;
    char smsbuffer[160];
    char n_in[20];
    char n_ref[20] = "3367xxxxxxxxx";
    char  msg[1];
    char pompe_on[160] = "Pompeon";
    char pompe_off[160] = "Pompeoff";
    char vanne_on[160] = "Vanneon";
    char vanne_off[160] = "Vanneoff";
     
     
    // fin init
     
    void setup() 
    {
      pinMode(13, OUTPUT);
      pinMode(12, OUTPUT);
     
      //Serial connection.
      Serial.begin(9600);
      Serial.println("GSM Shield testing.");
     
      if (gsm.begin(9600))
      {
        Serial.println("\nstatus=READY");
        started=true;  
      }
      else Serial.println("\nstatus=IDLE");
     
      if(started){
        Serial.println("mise en ligne");
     
        Serial.println("AT+CMEE=2");
        gsm.SimpleWriteln("AT+CMEE=2");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CPIN ?");
        gsm.SimpleWriteln("AT+CPIN ?");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CPIN=2434");
        gsm.SimpleWriteln("AT+CPIN=xxxx");
        delay(5000);
        gsm.WhileSimpleRead();
     
     
        Serial.println("AT+CLIP=1");
        gsm.SimpleWriteln("AT+CLIP=1");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CSCA ?");
        gsm.SimpleWriteln("AT+CSCA ?");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("AT+CMGF=1");
        gsm.SimpleWriteln("AT+CMGF=1");
        delay(5000);
        gsm.WhileSimpleRead();
     
        Serial.println("INITIALISATION POMPE");
        digitalWrite(13, LOW);
     
      }
    };
     
    void loop() 
    {
     
    if(started)
        {
        //Read if there are messages on SIM card and print them.
        Serial.println("lecture sms");
        if(gsm.readSMS(smsbuffer, 160, n_in, 20))
        {
          Serial.println(n_in);
          Serial.println(smsbuffer);
       //  
       // véfication téléphone commande  
       //
          if (memcmp(n_in,n_ref,11)==0)
          {
            Serial.println(n_in);
            Serial.println(smsbuffer);
      //
      // Test message commande de ponpe
      //
     
            if (memcmp(smsbuffer,pompe_on,7)==0) 
            {
              Serial.println("POMPE ON");
              digitalWrite(13, HIGH); 
            }
            if (memcmp(smsbuffer,pompe_off,7)==0) 
            {
              Serial.println("POMPE OFF");
              digitalWrite(13, LOW); 
            }
     
          if (memcmp(smsbuffer,vanne_on,7)==0) 
            {
              Serial.println("VANNE ON");
              digitalWrite(12, HIGH); 
            }
            if (memcmp(smsbuffer,vanne_off,7)==0) 
            {
              Serial.println("VANNE OFF");
              digitalWrite(12, LOW); 
            }
     
          }
          delay(1000);
        }
      }
     
    };

    je fais un copier/coller je change les variables et plus rien ne fonctionne

    j'ai changé les textes de commande
    j'ai changé les Pin de commande

    je dois faire une erreur

    mais ou ?
    je pense que cela doit être une erreur de débutant que je suis.

    Merci par avance

  2. #2
    Membre Expert

    Homme Profil pro
    .
    Inscrit en
    Janvier 2006
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Janvier 2006
    Messages : 703
    Par défaut
    Avec memcmp tu compares les N premiers octets.

    Mais tes commandes off ont un caractère de plus que les autres, donc 8 et non 7.

    Remplace le 7 ici par un 8.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (memcmp(smsbuffer,vanne_off,7)==0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (memcmp(smsbuffer,pompe_off,7)==0)
    Cependant par chance ça tombe en marche car tu compares deux chaînes tronquées, mais indentiques.
    Mais ça n'explique pas pourquoi cela ne marche pas.
    As-tu au moins des erreurs retournées ?
    Peux-tu mettre un peu de logs ? Des printf pour récupérer ça en console, si tu as ça ? Enfin l'équivalent sur la console pour l'arduino.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Par défaut
    Merci pour la réponse, j'ai corrigé le code, mais toujours pas d'amélioration

    Voici un peu de logs j'espere que cela va aider à trouver l'erreur

    avec uniquement le test sur message de la pompe

    RAS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    GSM Shield testing.
    DB:ELSE
    DB:ELSE
    DB:ELSE
    DB:CORRECT BR
     
    status=READY
    mise en ligne
    AT+CMEE=2
     
    OK
     
    OK
    AT+CPIN ?
     
    +CPIN: READY
     
    OK
    AT+CPIN=xxxx
     
    +CME ERROR: incorrect password
    AT+CLIP=1
     
    OK
    AT+CSCA ?
     
    +CSCA: "+33660003000",145
     
    OK
    AT+CMGF=1
     
    OK
    INITIALISATION POMPE
    lecture sms
    3367xxxx
    Pompeon
     
    3367xxxxx
    Pompeon
     
    POMPE ON
    lecture sms
    lecture sms
    lecture sms
    lecture sms
    3367xxxxxx
    Pompeoff
     
    33671649822
    Pompeoff
     
    POMPE OFF
    lecture sms
    lecture sms
    dans le code j'ajoute le test pour la commande de vanne

    dans l'exemple je l'ai mis en commentaire
    si je supprime commentaire, j'upload le code dans l'arduino et il ne démarre même pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
      //
      // Test message commande de ponpe
      //
     
            if (memcmp(smsbuffer,pompe_on,7)==0) 
            {
              Serial.println("POMPE ON");
              digitalWrite(13, HIGH); 
            }
            if (memcmp(smsbuffer,pompe_off,8)==0) 
            {
              Serial.println("POMPE OFF");
              digitalWrite(13, LOW); 
            }
    //
    // test message commande de vanne
    //
     
    /*        
    if (memcmp(smsbuffer,vanne_on,8)==0) 
            {
              Serial.println("VANNE ON");
              digitalWrite(13, HIGH); 
            }
            if (memcmp(smsbuffer,vanne_off,8)==0) 
            {
              Serial.println("VANNE OFF");
              digitalWrite(13, LOW); 
            }
     
    */
    je finis par penser qu'il y a une régle de construction de code qui m'échappe
    ou un bug dans le compilateur

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/10/2014, 11h20
  2. Internet sur PC portable depuis Téléphone Mobile (via GSM)
    Par krugernet dans le forum Développement
    Réponses: 4
    Dernier message: 16/11/2003, 17h28
  3. java pour gsm
    Par matterazzo dans le forum Développement Mobile en Java
    Réponses: 3
    Dernier message: 11/11/2003, 02h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo