Partage
  • Partager sur Facebook
  • Partager sur Twitter

impossible de lire une entrée wemos D1

    30 novembre 2019 à 16:30:24

    Bonjour,

    Voilà, le problème est que je n'arrive pas à lire les entrées de wemos avec digitalRead ici elle s'appelle "switchOuv" et switchFer

    j'ai bien déclaré celle ci en INPUT puis en INPUT-PULLUP afin de ne pas avoir à mettre des résistances de rappel au + 3.3v

    comme celà ne fonctionne pas, j'ai mis "switchOuv" en sortie avec un digitalWrite, elle fonctionne sans problème. j'ai également changé les entrées,  c'est tjs pareil. les entrées sont tjs vues à 0

    J'ai mis en rouge les parties qui ne fonctionnent pas

    Merci d'avance pour votre aide

    Je joins le code

    #include <ESP8266WiFi.h>
     
    const char* ssid = "BOX";
    const char* password = "MDP";
     
    int switchOuv=4;// D15 SCL D3 GPIO4 int switchFer=5;//D14 SDA D4 GPIO5
    int valOuv;
    int valFer;
    int CdeOuv= 13;
    int CdeFer= 14;
    WiFiServer server(80);
    //WiFiClient client; 
    void setup() 
    {
      // initialisation de la communication série
      Serial.begin(115200);
      delay(100);
      // initialisation des switchs
      pinMode(switchOuv, INPUT_PULLUP); pinMode(switchFer, INPUT_PULLUP);
       
      // Connexion wifi
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
     
      WiFi.begin(ssid, password);
     // connection  en cours ...
      while (WiFi.status() != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
    
      // Wifi connecté
      Serial.println("WiFi connecté");
     
      // Démmarrage du serveur.
      server.begin();
      Serial.println("Serveur demarré !");
     
      // Affichage de l'adresse IP
      Serial.print("Utiliser cette adresse URL pour la connexion :");
      Serial.print("http://");
      Serial.print(WiFi.localIP());
    
      Serial.println("/");
    // client = server.available();
    }
     
    void loop() 
    {
    WiFiClient client;
      
      // Vérification si le client est connecter.
      client = server.available();
      if (!client)
      {
        return;
      }
     
      // Attendre si le client envoie des données ...
      Serial.println("nouveau client");
      while(!client.available()){
        delay(1);
      }
     
      String request = client.readStringUntil('\r');
      Serial.println(request);
      client.flush();
    
      
        
     // commandeouverture********
      if (request.indexOf("/LED=ON") != -1)  {
    
    valFer== digitalRead (switchFer); Serial.print ("fer :"); Serial.println(valFer);
    delay (10000);
     if (valFer==LOW) {
     analogWrite(CdeOuv,1000);
     delay(3000);
     valOuv== digitalRead (switchOuv); Serial.print ("ouv :"); Serial.println(valOuv); while (valOuv== HIGH) { Serial.println(valOuv); valOuv== digitalRead (switchOuv);
     analogWrite(CdeOuv,100);
     client.print( " La porte s'ouvre");
     }
     analogWrite(CdeOuv,0);
      if (valOuv==LOW)  {
        client.print (" La porte est ouverte");
       }
        }
     } else{
      // Réponse
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println(""); 
      client.println("<!DOCTYPE HTML>");
      client.println("<html>");
      client.println("<br><br>");
      client.println("<a href=\"/LED=ON\"\"><button>Cde Porte </button></a>");
      client.println("<a href=\"/LED=OFF\"\"><button>Fermer </button></a><br />"); 
      client.println("</html>");
     
      delay(1);
      Serial.println("Client deconnecter");
      Serial.println("");
     }
    }



    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2019 à 11:47:45

      Quel type de bouton utilises-tu ? 

      D'après ton code, la broche n'est lue qu'au moment de la requête http ("/LED=ON"), donc s'il s'agit d'un bouton à contact momentané et non à bascule, ça n'est pas très pratique.

      Le contrôle de la porte ne devrait-il pas être indépendant de la partie Web ? 

      • Partager sur Facebook
      • Partager sur Twitter
        1 décembre 2019 à 13:35:15

        Bonjour Alexis

        les boutons "switchOuv et switchFer" sont des ils qui sont courcircuités avec un aimant ils sont branchés entre le 0v et l'entrée du wemos

        la partie web commande l'ouverture de la porte (pour le moment) au départ porte fermée le switchOuv est ouvert et le switchFer fermé à 0v

        quand la commande est envoyé par un bouton web la porte s'ouvre delivrant le switchFer qui s'ouvre le moteur s'active en pwm puis ralenti jusqu'à la butée qui va fermer l'autre switchOuv la porte est ouverte...

        Voilà comment celà devait marcher mais les switchs sont tjs vus fermés

        ....

        Bonjour

        j'ai sorti la partie commande ouverture de la partie web par une fonction, mes switchs sont toujours vus à 0

        Pourtant cette carte est en principe prévue pour des E/S digitales

        quelqu'un peut il m'expliquer ou est mon erreur?

        -
        Edité par Claudio91 2 décembre 2019 à 10:01:54

        • Partager sur Facebook
        • Partager sur Twitter
          2 décembre 2019 à 11:09:32

          Je n'avais pas lu tout le code, à cause des <span> en plein milieu... Tu as mis des "==" (qui est un opérateur de comparaison) au lieu de "=" pour toutes tes assignations de digitalRead à des variables, donc tu ne changes pas leur valeur.

          • Partager sur Facebook
          • Partager sur Twitter
            2 décembre 2019 à 15:05:49

            bonjour Alexis

            ok, bien vu, un grand merci

            • Partager sur Facebook
            • Partager sur Twitter
              10 janvier 2020 à 16:31:26

              Bonsoir,

              me revoilà et toujours un problème avec cette wemos

              Maintenant elle reboot toute seule des que je veux me connecter dessus en wifi et ça n’arrête plus

              je joins le code, j'ai mis en commentaire toute la partie manuelle

              Je joins aussi le retour sur le moniteur serie

              Merci d'avance de vos explications

              #include <ESP8266WiFi.h>
                
              const char* ssid ="ssid";
              const char* password ="psw";
              
                
              int switchOuv= 14;// D13 SCK D5 GPIO14 
              int switchFer= 12;//D12 MISO D6  GPIO12
              int valOuv;
              int valFer;
              int CdeOuv= 13;//D7 MOSI D1
              int CdeFer= 15;//SS D10 GPIO15
              int OuvManu=4;//D14, SDA commande manuelle ouv
              int FerManu=5;//D15, SCL commande manuelle fer
              int CdeManuOuv;
              int CdeManuFer;
               
              WiFiServer server(80);
              //WiFiClient client;
              void setup()
              {
              // initialisation de la communication série
                Serial.begin(115200);
                delay(100);
                // initialisation des switchs
               pinMode(switchOuv, INPUT_PULLUP); 
               pinMode(switchFer, INPUT_PULLUP);
               pinMode(OuvManu, INPUT_PULLUP);
               pinMode(FerManu, INPUT_PULLUP);   
                // Connexion wifi
                Serial.println();
                Serial.print("Connecting to ");
                Serial.println(ssid);
                
                WiFi.begin(ssid, password);
               // connection  en cours ...
               
                while  (WiFi.status() != WL_CONNECTED)  {
                  delay(500);
                  Serial.print(".");
                }
                 
               
                // Wifi connecté
                Serial.println("WiFi connecté");
                // Démmarrage du serveur.
                server.begin();
                Serial.println("Serveur demarré !");
                
                // Affichage de l'adresse IP
                Serial.print("Utiliser cette adresse URL pour la connexion :");
                Serial.print("http://");
                Serial.print(WiFi.localIP());
               
                Serial.println("/");
              // client = server.available();
              }
                
              void loop()
              {
              /**************************************************commande manuelle ouverture**********************
              CdeManuOuv= digitalRead (OuvManu);
              if (CdeManuOuv==0) {
              Serial.println(CdeManuOuv); 
              valOuv= digitalRead (switchOuv);
              Serial.println(valOuv);
              while (valOuv== 1) { 
              valOuv= digitalRead (switchOuv);
              analogWrite(CdeOuv,400);
              }
              
               //delay(10);
               //valOuv= digitalRead (switchOuv);
              if (valOuv==0) {
               analogWrite(CdeOuv,0);
               Serial.println( " La porte est ouverte");
               }
              }
               delay(100);
              
              
              /**************************************************commande manuelle fermeture**********************
              CdeManuFer= digitalRead (FerManu);
              if (CdeManuFer ==0) {
                Serial.println(CdeManuFer); 
              valFer= digitalRead (switchFer);
              Serial.println(valFer);
              //temps=millis(); 
               while (valFer== 1) { 
              //if (millis()>temps+intervalManu){
               //   break;}
                valFer= digitalRead (switchFer);
               analogWrite(CdeFer,400);
               delay (10);
               }
               analogWrite(CdeFer,0);
               Serial.println( " La porte est fermé");
              
               delay(100);  
              }*/
              
               
              WiFiClient client;
                 
                // Vérification si le client est connecter.
                client = server.available();
                if (!client)
                {
                  return;}
                  else{
                    Serial.println ("perte de connection wifi");
                   // reboot
                  }  
                
                
                // Attendre si le client envoie des données ...
                Serial.println("nouveau client");
                while(!client.available()){
                  delay(10);
                }
                
                String request = client.readStringUntil('\r');
                Serial.println(request);
                client.flush();
                for (int i = 0; i <= 8; i++) {
              valFer= digitalRead (switchFer);
                }
               for (int i = 0; i <= 8; i++) {  
              valOuv= digitalRead (switchOuv);
               }
                   
               // commandeouverture************************************************************
               if (request.indexOf("/PORTE=ON") != -1)  {
              valFer= digitalRead (switchFer); 
              valOuv= digitalRead (switchOuv); 
              Serial.print ("fer :");
              Serial.println(valFer);
               if (valOuv=1 && valFer==0){//**************************************************
               analogWrite(CdeOuv,1023);
               Serial.println( " La porte s'ouvre");
               delay(10500);}
               while(valOuv=1){ 
               valOuv= digitalRead (switchOuv);
               analogWrite(CdeOuv,400);
               }
               delay(10);
               analogWrite(CdeOuv,0);
               delay(100);
                
               Serial.println("la porte est ouverte auto");
               }
               
               // commandeFermeture****************************************************************
              if (request.indexOf("/PORTE=OFF") != -1)  {
              valOuv= digitalRead (switchOuv); 
              valFer= digitalRead (switchFer); 
              Serial.print ("ouv :");
              Serial.println(valOuv);
               if (valOuv==0 && valFer==1){//****************************************************
               analogWrite(CdeFer,1023);
               Serial.println( " La porte se ferme");
               delay(10500);}
                while (valFer= 1) { 
               valFer= digitalRead (switchFer);
               analogWrite(CdeFer,400);
               }
               delay (10);
               analogWrite(CdeFer,0);
               Serial.println( " La porte est fermé auto");
               delay(100);  
               }
               
                  
                 // Réponse
                client.println("HTTP/1.1 200 OK");
                client.println("Content-Type: text/html");
                client.println("");
                client.println("<!DOCTYPE HTML>");
                client.println("<html>");
                client.println("<body style=background-color:#b8ff70;font-size:300%>");
                client.println("<br><br><br><br><br>");
                client.println("<center>");
                //client.println("<vertical-align: middle>");
                //client.println("<a href=\"/PORTE=ON\"\"><button>OUVRIR </button></a><br><br><br><br />");
               // client.println("<a href=\"/PORTE=OFF\"\"><button>FERMER </button></a><br />");
               client.println("<a href=\"/PORTE=ON\"\"><button style=background-color:#26b72b;border-color:white;font-weight:normal;font-size:500%;>OUVRIR</button></a><br><br><br><br><br><br>");
               client.println("<a href=\"/PORTE=OFF\"\"><button style=background-color:#26b72b;border-color:white;font-weight:normal;font-size:500%;>FERMER</button>");
                client.println("</body>");
                client.println("</html>");
              
                delay(10);
                Serial.println("Client deconnecté");
                Serial.println("");
                delay(100);
              }

              le retour moniteur


              Connecting to garage-1
              ...........WiFi connecté
              Serveur demarré !
              Utiliser cette adresse URL pour la connexion :http://192.168.1.15/
              perte de connection wifi
              nouveau client
              GET /PORTE=ON HTTP/1.1
              fer :1

              Soft WDT reset

              >>>stack>>>

              ctx: cont
              sp: 3ffffd60 end: 3fffffc0 offset: 01b0
              3fffff10:  00002000 00000261 3ffee568 40202b8c 
              3fffff20:  3ffee530 3ffee52c 3ffee568 00000000 
              3fffff30:  3ffee530 3ffe84e8 00000001 4020131c 
              3fffff40:  00000000 00000000 ff00004e 40202b01 
              3fffff50:  00000000 3ffefff4 402053e8 00000000 
              3fffff60:  00001388 0000b4c5 00000000 3ffefff4 
              3fffff70:  3ffefabc 0016001f ff3d4554 40202bd8 
              3fffff80:  00000004 3ffee534 3ffee568 40201130 
              3fffff90:  00000000 00000000 00000001 3ffee5d0 
              3fffffa0:  3fffdad0 00000000 3ffee5a0 402032b4 
              3fffffb0:  feefeffe feefeffe 3ffe852c 40100515 
              <<<stack<<<

               ets Jan  8 2013,rst cause:2, boot mode:(3,6)

              load 0x4010f000, len 1384, room 16
              tail 8
              chksum 0x2d
              csum 0x2d
              vac02aff5
              ~ld

              Connecting to garage-1
              ..................WiFi connecté
              Serveur demarré !
              Utiliser cette adresse URL pour la connexion :http://192.168.1.15/
              perte de connection wifi
              nouveau client
              GET /PORTE=ON HTTP/1.1
              fer :1

              Soft WDT reset

              >>>stack>>>

              • Partager sur Facebook
              • Partager sur Twitter
                11 janvier 2020 à 1:22:47

                D'après ce que ça affiche, ça bloque vers la ligne 142 dans:

                while(valOuv=1){
                 valOuv= digitalRead (switchOuv);
                 analogWrite(CdeOuv,400);
                }

                Tu as encore mis un = au lieu de == dans le while qui bloque donc indéfiniment, et ça déclenche le watchdog de l'esp8266 ("soft wdt reset"), un timer qui sert à réinitialiser l'esp8266 quand il plante ou que le code utilisateur prend trop de temps.

                De plus si cette boucle sert à attendre que la porte s'ouvre ou se ferme, en fonction du temps que ça prend, il faudra peut-être ajouter un "delay(0);" dans cette boucle et l'autre ligne 163: delay, même avec un paramètre à 0, rend la main temporairement à la partie WiFi, ce qui permet au WiFi de fonctionner correctement (parce qu'il est géré par le même processeur que le reste du code, donc il faut parfois lui allouer du temps manuellement), et ça réinitialise le timer du watchdog pour qu'il ne réinitialise pas la puce. 

                • Partager sur Facebook
                • Partager sur Twitter
                  11 janvier 2020 à 4:35:34

                  ok, j'ai ajouté des delay(0) dans les boucles d'attente et cà ne plante plus, j'irai au garage quand il fera jour pour essayer en reel

                  merci de ton aide, mais comment determine tu la ligne qui plante?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 janvier 2020 à 14:46:54

                    Claudio91 a écrit:

                    ok, j'ai ajouté des delay(0) dans les boucles d'attente et cà ne plante plus, 

                    Et remplacé les = par == dans les conditions des while ? 

                    merci de ton aide, mais comment determines tu la ligne qui plante?

                    C'est surtout parce que ton programme affiche des trucs sur le moniteur série. Il s'arrête après "fer: 1", donc il va au moins jusqu'aux lignes 135-136:

                    Serial.print ("fer :");
                    Serial.println(valFer);

                    Ce qui permet de savoir que valFer vaut 1 donc dans les lignes suivantes, la boucle while est la seule partie qui peut s’exécuter:

                    if (valOuv=1 && valFer==0){//**************************************************
                      analogWrite(CdeOuv,1023);
                      Serial.println( " La porte s'ouvre");
                      delay(10500);
                    }
                    while(valOuv=1){
                      valOuv= digitalRead (switchOuv);
                      analogWrite(CdeOuv,400);
                    }
                    delay(10);
                    analogWrite(CdeOuv,0);
                    delay(100);
                       
                    Serial.println("la porte est ouverte auto");
                    

                    Et comme il y a un Serial.println après cette boucle qui ne s'affiche pas, on sait que le plantage a eu lieu avant cette ligne.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 janvier 2020 à 19:11:48

                      ah ok, oui oui j'ai corrigé les "=" par "==" y a t'il une explication concernant la tombée du watch dog comme ces lignes:

                      ets Jan  8 2013,rst cause:2, boot mode:(3,6)

                      load 0x4010f000, len 1384, room 16
                      tail 8

                      Je n'ai rien trouvé de probant sur Google...

                      J'essaierai tout çà demain car aujourd'hui j'ai eu des pb de cablages çà devient une usine à gaz entre les alim 24v, 5v le driver bridge du moteur le wemos  les boutons poussoirs les led...et l'interconnexion de tout çà, c'est loin d'etre industriel! bref à force de monter et demonter cà a fini par lacher, je viens juste de finir de réparer, donc essai demain

                      Bonsoir,

                      bon cà à l'air de fonctionner, sur table, mais si je perds le wifi pour une raison quelconque je ne sais comment le récupérer lorsqu'il reviendra, faudrait il que je fasse un fonctionnement dégradé qui de temps en temps fasse une interrogation vers le réseau  et comment? ou bien faire un reset soft (ce n'est pas terrible)?

                      -
                      Edité par Claudio91 12 janvier 2020 à 17:39:34

                      • Partager sur Facebook
                      • Partager sur Twitter

                      impossible de lire une entrée wemos D1

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      • Editeur
                      • Markdown