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