Partage
  • Partager sur Facebook
  • Partager sur Twitter

arduino gsm

demande d'aide

    12 mars 2019 à 15:41:43

    bonjour 

    j'ai un problème a réaliser un code qui permet de déclencher arrosage a travers un smartphone.

    voila le code qui permet de connaitre l'etat du sol a travers gsm .

    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(7, 8);

    //int activer = 1; // ordre d'envoyer SMS

    int val;

    int l=13;

    int i=0;

    int secCount = 0;

    int humideCount = 0;

    int tropHumideCount = 0;

    const int MAX_SMS_SENT = 2;

    void setup()

    {

       pinMode(13, OUTPUT);

        mySerial.begin(19200);              

        Serial.begin(19200);   

        delay(500);

    }

    void loop()

    {

       val=analogRead(A0);

       String etat;

        Serial.print ("valeur est:");

      Serial.println(val);

      delay(100);

      if (val <=400){

        etat="sec";

        while(secCount < MAX_SMS_SENT){

         Serial.print ("\n secCount est : ");

         Serial.println(secCount);

         digitalWrite(13,HIGH);

        //Pour envoyer un sms sous forme de texte

           mySerial.print("AT+CMGF=1\r");    

           delay(100);

           //Numero de telephone du destinataire

           mySerial.println("AT + CMGS = \"numero\"");

           delay(100);

           mySerial.println("Alerte le sol est sec: ");

           delay(100);

           mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)

           delay(100);

           mySerial.println("c'est fait."); 

           secCount++;

          }  

        }  

        if(val>400 && val<700){

           etat="humide";

        while(humideCount < MAX_SMS_SENT){

         Serial.print ("\n humideCount est : ");

         Serial.println(humideCount);

         digitalWrite(13,HIGH);

        //Pour envoyer un sms sous forme de texte

           mySerial.print("AT+CMGF=1\r");    

           delay(100);

           //Numero de telephone du destinataire

           mySerial.println("AT + CMGS = \"numero\"");

           delay(100);

           mySerial.println("Alerte le sol est humide: ");

           delay(100);

           mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)

           delay(100);

           mySerial.println("c'est fait."); 

           humideCount++;

          }  

           digitalWrite(13,LOW);

           Serial.print("sol est");

           Serial. println(etat);

        }

        if(val >700){

          etat="trop";

        while(tropHumideCount < MAX_SMS_SENT){

         Serial.print ("\n tropHumideCount est : ");

         Serial.println(tropHumideCount);

         digitalWrite(13,HIGH);

        //Pour envoyer un sms sous forme de texte

           mySerial.print("AT+CMGF=1\r");    

           delay(100);

           //Numero de telephone du destinataire

           mySerial.println("AT + CMGS = \"numero \"");

           delay(100);

           mySerial.println("Alerte le sol est trop humide: ");

           delay(100);

           mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)

           delay(100);

           mySerial.println("c'est fait."); 

           tropHumideCount++;

          }  

          digitalWrite(13,LOW);

          Serial.print("sol est");

          Serial. println(etat);

        }

      delay(1000);

     }

    je voudrais ajouter le code qui permet de déclencher l'arrosager via gsm 

    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2019 à 8:18:11

      Avec les balises code (le petit bouton en forme de </>), ce serait beaucoup plus lisible.

      Sinon, en quoi bloques tu exactement ?

      Est-ce la réception du SMS qui pose problème ?

      Ou bien son traitement ?

      • Partager sur Facebook
      • Partager sur Twitter
        14 mars 2019 à 9:05:09

        bonjour  lorrio

        j'ai puis faire les deux programmes mais ils sont indépendant.

        objectif du code est déclencher l'arrosage a travers le téléphone et le faire sans téléphone 

        comment les faire fonctionner ensemble ?ces là que je suis bloque depuis hier nuit

        voila les deux code  

        //////////////////////////////////connaître l'etat du sol via gsm//////////////////////////////////////////

         val=analogRead(A0);
           String etat;
            Serial.print ("valeur est:");
          Serial.println(val);
          delay(100);
          if (val <=400){
            etat="sec";
          
            while(secCount < MAX_SMS_SENT){
             Serial.print ("\n secCount est : ");
             Serial.println(secCount);
          
             digitalWrite(13,HIGH);
            //Pour envoyer un sms sous forme de texte
               mySerial.print("AT+CMGF=1\r");    
               delay(100);
               //Numero de telephone du destinataire
               mySerial.println("AT + CMGS = \"90110401\"");
               delay(100);
               mySerial.println("Alerte le sol est sec: ");
               delay(100);
               mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
               delay(100);
               mySerial.println("c'est fait."); 
               secCount++;
              }  
            }  

            if(val>400 && val<700){
             
               etat="humide";
            
            while(humideCount < MAX_SMS_SENT){
             Serial.print ("\n humideCount est : ");
             Serial.println(humideCount);
          
             digitalWrite(13,HIGH);
            //Pour envoyer un sms sous forme de texte
               mySerial.print("AT+CMGF=1\r");    
               delay(100);
               //Numero de telephone du destinataire
               mySerial.println("AT + CMGS = \"90110401\"");
               delay(100);
               mySerial.println("Alerte le sol est humide: ");
               delay(100);
               mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
               delay(100);
               mySerial.println("c'est fait."); 
               humideCount++;
              }  
              
               digitalWrite(13,LOW);
            
               Serial.print("sol est");
               Serial. println(etat);
            }
            
            if(val >700){
              etat="trop";

            while(tropHumideCount < MAX_SMS_SENT){
             Serial.print ("\n tropHumideCount est : ");
             Serial.println(tropHumideCount);
          
             digitalWrite(13,HIGH);
            //Pour envoyer un sms sous forme de texte
               mySerial.print("AT+CMGF=1\r");    
               delay(100);
               //Numero de telephone du destinataire
               mySerial.println("AT + CMGS = \"90110401\"");
               delay(100);
               mySerial.println("Alerte le sol est trop humide: ");
               delay(100);
               mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
               delay(100);
               mySerial.println("c'est fait."); 
               tropHumideCount++;
              }  
              
              digitalWrite(13,LOW);
            
              Serial.print("sol est");
              Serial. println(etat);
            }
          delay(1000);

        ////////////////////////////////declencher l'arrossage via le smarphone /////////////////////////////////////////

         
        #include <SoftwareSerial.h> //software serial library for serial communication b/w arduino & GSM

        SoftwareSerial mySerial(7, 8);//connect Tx pin of GSM to pin 7of arduino && Rx pin of GSM to pin no 8of arduino

        int led = 13;
        String message;

        void setup()
        {
          mySerial.begin(19200);   // Setting the baud rate of GSM Module  
          Serial.begin(19200);    // Setting the baud rate of Serial Monitor (Arduino)
          delay(100);

         mySerial.print ("ATE0r");
        //Réponse();
         mySerial.print ("ATr");
        //Réponse();
         mySerial.print ("AT + CMGF = 1r");
        //Réponse();
         mySerial.print ("AT + CNMI = 1,2,0,0,0r");
        //Réponse();
          pinMode(led,OUTPUT);
          digitalWrite(led,LOW);
        }

        void loop()
        {
          if (mySerial.available()>0){
          message = mySerial.readString();
          }

          if(message.indexOf("ON") > -1){
              Serial.println("LED ON");
             digitalWrite(led,HIGH);
             }
            else if(message.indexOf("OFF") > -1){

              Serial.println("LED OFF");
              digitalWrite(led,LOW);

          }

          delay(10);

        //////////////////// j'ai rassembler les deux codes qui n'arrive pas  à fonctionner///////////////////////////

        #include <SoftwareSerial.h> //software serial library for serial communication b/w arduino & GSM

        SoftwareSerial mySerial(7, 8);//TX=7,rx=8
        int val;
        int l=13;
        int i=0;
        int secCount = 0;
        int humideCount = 0;
        int tropHumideCount = 0;
        const int MAX_SMS_SENT = 2;

        String message;

        void setup() {
            pinMode(13, OUTPUT);
            mySerial.begin(19200);              
            Serial.begin(19200);   
             delay(100);
              mySerial.print ("ATE0r");
        //Réponse();
         mySerial.print ("ATr");
        //Réponse();
         mySerial.print ("AT + CMGF = 1r");
        //Réponse();
         mySerial.print ("AT + CNMI = 1,2,0,0,0r");
        //Réponse();
          //pinMode(led,OUTPUT);
          digitalWrite(13,LOW);
            

        }

        void loop() {
          
          if (mySerial.available()>0){
          message = mySerial.readString();
          }

          if(message.indexOf("ON") > -1){
              Serial.println("LED ON");
             digitalWrite(l,HIGH);
             }
            else if(message.indexOf("OFF") > -1){

              Serial.println("LED OFF");
              digitalWrite(l,LOW);

          }

          delay(10);

           val=analogRead(A0);
           String etat;
            Serial.print ("valeur est:");
          Serial.println(val);
          delay(100);
          if (val <=400){
            etat="sec";
          
            while(secCount < MAX_SMS_SENT){
             Serial.print ("\n secCount est : ");
             Serial.println(secCount);
          
             digitalWrite(13,HIGH);
            //Pour envoyer un sms sous forme de texte
               mySerial.print("AT+CMGF=1\r");    
               delay(100);
               //Numero de telephone du destinataire
               mySerial.println("AT + CMGS = \"90110401\"");
               delay(100);
               mySerial.println("Alerte le sol est sec: ");
               delay(100);
               mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
               delay(100);
               mySerial.println("c'est fait."); 
               secCount++;
              }  
            }  

            if(val>400 && val<700){
             
               etat="humide";
            
            while(humideCount < MAX_SMS_SENT){
             Serial.print ("\n humideCount est : ");
             Serial.println(humideCount);
          
             digitalWrite(13,HIGH);
            //Pour envoyer un sms sous forme de texte
               mySerial.print("AT+CMGF=1\r");    
               delay(100);
               //Numero de telephone du destinataire
               mySerial.println("AT + CMGS = \"90110401\"");
               delay(100);
               mySerial.println("Alerte le sol est humide: ");
               delay(100);
               mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
               delay(100);
               mySerial.println("c'est fait."); 
               humideCount++;
              }  
              
               digitalWrite(13,LOW);
            
               Serial.print("sol est");
               Serial. println(etat);
            }
            
            if(val >700){
              etat="trop";

            while(tropHumideCount < MAX_SMS_SENT){
             Serial.print ("\n tropHumideCount est : ");
             Serial.println(tropHumideCount);
          
             digitalWrite(13,HIGH);
            //Pour envoyer un sms sous forme de texte
               mySerial.print("AT+CMGF=1\r");    
               delay(100);
               //Numero de telephone du destinataire
               mySerial.println("AT + CMGS = \"90110401\"");
               delay(100);
               mySerial.println("Alerte le sol est trop humide: ");
               delay(100);
               mySerial.println((char)26); // 26 equivalent ASCII de ctrl+z (fin du message:CTRL-Z)
               delay(100);
               mySerial.println("c'est fait."); 
               tropHumideCount++;
              }  
              
              digitalWrite(13,LOW);
            
              Serial.print("sol est");
              Serial. println(etat);
            }
          delay(1000);

        }

        MERCI D'AVNCE 

        • Partager sur Facebook
        • Partager sur Twitter
          14 mars 2019 à 12:40:13

          Il y a plusieurs problèmes dans le code que tu présente.

          ***

          Tout d'abord, tu ne viens jamais lire les réponses que le modem t'envoie à la fin de chaque commande.

          Du coup, ces réponses s'accumulent et le buffer de réception va finir par saturer.

          Après chaque commande envoyée, il faudrait lire ce que le modem envoie et analyser ce qu'il dit pour voir si il n'y a pas d'erreur.

          C'est probablement ce que devait faire la fonction Reponse(); que tu as commentée.

          ***

          Tes variables secCount, humideCount et tropHumideCount sont incrémentée dans tes boucles while pour envoyer plusieurs SMS à la suite mais à aucun moment tu ne les remets à 0.

          Donc une fois les SMS envoyé, le programme ne retournera jamais dans les boucles pour renvoyer un autre SMS si un problème se reproduit à nouveau plusieurs heures plus tard.

          ***

          A la fin du SMS, tu envoies un "c'est fait." sur le Serial du GSM, je doute fort qu'il apprécie recevoir du texte après la fin d'un SMS.

          Je suppose que tu voulais plutôt envoyer ça sur la console, ce qui aurait du être un Serial.println plutôt qu'un mySerial.println

          ***

          Dans ton programme combiné, tu ne fais appel à AT + CNMI que dans le setup.

          Du coup, ton GSM va vérifier une fois la présence de SMS au démarrage puis il ne le fera plus jamais puisque tu ne fais pas de commande AT + CNMI dans le loop.

          ***

          Pour tes prochains messages, il faudrait vraiment que tu postes ton code en utilisant le bouton </> car c'est franchement illisible...

          • Partager sur Facebook
          • Partager sur Twitter
            14 mars 2019 à 17:26:28

            bonjour lorio ou es on doit mettre les commandes après initialisation(void setup) svp

            • Partager sur Facebook
            • Partager sur Twitter

            arduino gsm

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown