Domotique Volet Roulant

Bonjour à tous,

j'ai réalisé un projet domotique pour commander mes volets roulant grâce à un NodeMcu et une application Android, et je suis confronté à un problème.

Voilà lorsque j'appuie sur la flèche du Haut de mon smatphone pour faire monter mon volet roulant, celui-ci répond bien et il monte bien, mais si j'appuie par accident sur la flèche du bas pendant qu'il monte, une fois sa course terminé vers le haut, il commencera à exécuter le 2ème ordre à savoir redescendre.

donc je voudrai savoir comment on peut faire pour q'il ne prenne en compte aucun autre ordre et ceux jusqu'à la fin de son programme. j’espère avoir été clair dans mon explication...

merci pour votre aide et voici mon programme:

#include <ESP8266WiFi.h>

String req;
const char* ssid = "xxxxxxxxxxxxx"; // Nom du réseau de ma Wifi
const char* password = "xxxxxxxxxxxxx"; // Code de mon réseau Wifi

WiFiServer server(80);

void setup() {
Serial.begin(115200);
delay(10);

WiFi.disconnect();
delay(3000);

pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
digitalWrite(0, 0);
digitalWrite(1, 0);

Serial.println();
Serial.println();
Serial.print("Vous êtes connecté à: ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("....");
}
Serial.println("");
Serial.println("WiFi connecté");

// Démarrer le serveur
server.begin();
Serial.println("Le serveur est prêt");

Serial.println("l'Adresse IP de Votre NodeMcu est le:");
Serial.println(WiFi.localIP());
}

void loop() {
// Vérifier si un client est connecté
WiFiClient client = server.available();
if (!client) {
return;
}

// Attendez que le client envoie des données
Serial.println("Nouveau client");
while(!client.available()){
delay(1);
}

// Lire la première ligne de la demande
req = (client.readStringUntil('\r'));
Serial.println(req);
client.flush();

// Correspondre à la demande
if (req.indexOf("/Volet1/Monter") != -1)
{client.stop();
digitalWrite(0, 1);
delay(3000);
digitalWrite(0, 0);}

if (req.indexOf("/Volet1/Descendre") != -1)
{client.stop();
digitalWrite(1, 1);
delay(3000);
digitalWrite(1, 0);}

client.flush();

// Envoyer la réponse au client
delay(1);
Serial.println("Client déconnecté");
}

J'ai perdu l'habitude du NodeMCU, mais il semble que tu as connecté le relais qui commande ton VR sur les pins 0 et 1, qui sont normalement réservées à la communication série. Ce n'est peut-être pas le cas avec le NodeMCU. A vérifier. Si c'est le cas, il vaudrait mieux les connecter sur d'autres sorties...

Je pense qu'il faudrait faire le flush avant le stop :

  // Correspondre à la demande
  if (req.indexOf("/Volet1/Monter") != -1) {
    client.flush();
    client.stop();
    digitalWrite(0, 1);
    delay(3000);
    digitalWrite(0, 0);
  }


  if (req.indexOf("/Volet1/Descendre") != -1) {
    client.flush();
    client.stop();
    digitalWrite(1, 1);
    delay(3000);
    digitalWrite(1, 0);
  }

3 secondes, ça me semble court pour monter ou descendre un volet, non ?

Au passage, deux remarques :

  • Ton message est mal positionné : demande au modérateur de le déplacer dans la bonne section (ici c'est les projets terminés) : bouton "Report to moderator"
  • Ton code doit être entre balises CODE (le bouton </> quand tu écris ou modifies le message) et pas QUOTE : modifie ça, c'est plus facile à lire surtout pour ceux qui utilisent un smartphone.

Enfin, lis les messages épinglés du forum, ça ne fait pas de mal.
A+