Mécanisme pour appuyer sur un bouton commandé par smartphone via wifi

Bonjour à tous,
Voici le projet que je dois réaliser en tant que débutant. Le but est de pouvoir appuyer sur un bouton pression sur un tableau de commande grâce à mon smartphone. Cet appui permettra de fermer mes poules à distance. J’ai réfléchis au projet et j’ai commandé :

  • arduino uno
  • 1 module wifi ch340 basé sur Esp8266
  • 1 module wifi avec relais 5v basé sur Esp8266

Donc en théorie le projet consisterait:

  • appui sur un bouton via mon smartphone ou page internet
  • envoi du code à l’arduino uno via le module wifi connecté
  • soit activation d’une sortie 3,3v ou 5v direct vers le mécanisme d’ouverture contenant un servo moteur de modèle réduit
  • soit activation d’un relais 5v pour mise en route du servo moteur
  • pilotage de l’ouverture du servo moteur via une sortie numérique de la carte arduino avec temporisation de 3 à 4 secondes. C’est le temps qu’il faut appuyer sur la porte du poulaillier pour ouvrir ou fermer.
  • ensuite inverser le sens du courant au servo moteur pour revenir en position jusqu’a une certaine position.

Tout ça en tant que débutant arduino mais je suis débrouillard et informaticien de formation (formation ya 25 ans ! Lol)

  • code à écrire et réussir à faire fonctionner tout cela
  • mécanisme poussoir à créer avec une tige et un objet amortisseur au bout pour éviter l’appui trop fort qui pourrait endommager le tableau de commande
    Donc voilà je suis preneur de vos conseils et avis.

Merci à tous ceux qui m’aideront :wink:

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

C'est ambitieux mais pas irréalisable. Tu peux commencer par reproduire ce projet :

Essaye de comprendre comment il fonctionne, ensuite tu pourras l'adapter à ton besoin.

Tout d’abord désolé pour l’erreur de publication c’est la 1ere fois que je publie je ferai attention la prochaine fois.

Merci à toi Lesept j’avais effectivement repéré ceci et je vais tester cela dans un premier temps. J’attend de recevoir le matos pour tester.

Bonjour à tous,

Bon je galère quand même avec le module ESP-01 relais. Je l'ai programmé via une arduino uno et indiqué mon réseau wifi + code. Le module apparait bien dans la liste wifi sous le nom AI-THINKER_D8D017, j'arrive à me connecter dessus en le sélectionnant mais lorsque je me remets sur mon réseau Freebox, impossible de me connecter dessus en saisissant l'adresse IP depuis un navigateur internet ? d'ailleurs en me connectant sous ma freebox elle ne le reconnait pas dans les baux actifs DHCP ? J'ai l'impression que le module n'est pas connecté au réseau ? Je ne sais plus quoi faire ? Une idée ? Merci à tous

Tu utilises le code cité dans le message au-dessus?
Quels messages as-tu dans le moniteur série?

Désolé je n'ai pas eu le temps de finir mon message j'ai été dérangé.

A priori impossible de se connecter au esp8266 car à la fin de la programmation j'ai ce message :

A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet header

J'ai utilisé le code présent dans la vidéo mais depuis j'ai essayé un autre code que je publie dans le message suivant.

Merci de ton aide.

#include <ESP8266WiFi.h>
 
const char* ssid = "effacé"; // fill in here your router or wifi SSID
const char* password = "effacé"; // fill in here your router or wifi password
 #define RELAY 0 // relay connected to  GPIO0
WiFiServer server(80);
 
void setup() 
{
  Serial.begin(115200); // must be same baudrate with the Serial Monitor
 
  pinMode(RELAY,OUTPUT);
  digitalWrite(RELAY, LOW);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://192.168.4.2/");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
void loop() 
{
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) 
  {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available())
  {
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
  int value = LOW;
  if (request.indexOf("/RELAY=ON") != -1)  
  {
    Serial.println("RELAY=ON");
    digitalWrite(RELAY,LOW);
    value = LOW;
  }
  if (request.indexOf("/RELAY=OFF") != -1)  
  {
    Serial.println("RELAY=OFF");
    digitalWrite(RELAY,HIGH);
    value = HIGH;
  }
  
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  this is a must
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head><title>ESP8266 RELAY Control</title></head>");
  client.print("Relay is now: ");
 
  if(value == HIGH) 
  {
    client.print("OFF");
  } 
  else 
  {
    client.print("ON");
  }
  client.println("<br><br>");
  client.println("Turn <a href=\"/RELAY=OFF\">OFF</a> RELAY<br>");
  client.println("Turn <a href=\"/RELAY=ON\">ON</a> RELAY<br>");
    client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}

En lisant sur internet ils indiquaient qu'il fallait downgrader le ESP8266. J'ai essayé et downgradé de 3.1 à 2.0 mais désormais j'ai cette anomalie :

Le croquis utilise 215942 octets (49%) de l'espace de stockage de programmes. Le maximum est de 434160 octets.
Les variables globales utilisent 33936 octets (41%) de mémoire dynamique, ce qui laisse 47984 octets pour les variables locales. Le maximum est de 81920 octets.
warning: espcomm_sync failed
error: espcomm_open failed
Failed uploading: uploading error: exit status 0xffffffff

J’ai trouvé cela qui a l’air très intéressant et adapté à ma situation je vais tester :

C'est bon cela fonctionne en suivant ce tuto. Comme je passait par la carte arduino uno pour la programmation je n'avais pas mis la sortie reset sur la masse pour éviter que la uno travaille. Je pense que c'est cela en tout cas ce tuto et ce programme fonctionne parfaitement. merci !

Tout marche impeccable. Il n’y a que les caractères car c’est écrit tout petit… je vais chercher comment améliorer la présentation et la taille des écritures.

A priori sur batterie ça va être compliqué… d’après ce que j’ai lu l’esp-01 consomme 72 mah donc sur 4 piles de 1000 mah ça ne durera pas longtemps… :

4000/72 = 55 heures… sachant qu’il faut minimum 250 mah pour fonctionner…

Il y a un mode deep sleep mais je n’ai pas étudié encore… donc à mon avis je vais passer sur alimentation 5v…

Bonjour,

J’ai effectivement passé le module sous alimentation 5v donc cette partie est réglée mais il me reste un problème à régler et j’aurai besoin d’aide:

Le esp-01 semble se déconnecter au bout d’un certain temps. Le lendemain soir je n’arrive plus à le commander et je suis obligé de le débrancher et rebrancher pour qu’il refonctionne à nouveau. Je ne suis pas un spécialiste du programme mais je ne vois rien dans les lignes de codes qui commanderait une mise en veille ?

Merci de votre avis.
Fred

est-ce qu'il pourrait avoir raté une reconnexion au réseau et rester planté dans une boucle infinie?
tu pourrais le savoir SI l'appareil est branché sur serial.

Pour des essais, j'avais prévu un clignotement/allumage de led pendant la connexion

digitalWrite(Led_de_verif, HIGH);
while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
digitalWrite(Led_de_verif, LOW);

Si tout va bien, à peine le temps de voir la lumière.
Si ça reste allumé: problème dans la connexion.

bonsoir @fredoetisa

pas évident à exploiter avec une carte ESP-01, pas de problème pour endormir l'ESP8266 mais ,sans une modification très délicate de la carte, pas de réveil automatique de l'ESP8266 par lui même au bout d'un intervalle de temps programmé.

d’après ce que j’ai lu l’esp-01 consomme 72 mah

Attention ! 72 mA est la valeur du courant moyen, WiFI inactif, avec le WiFi en service le courant varie dans de grande proportions , environ 120mA avec des pointes brèves vers 350mA, raison pour laquelle les fabricants de cartes (D1 mini, NodeMCU...) mettent des régulateurs 3,3V 500mA (ou 1A ) et de bons condensateurs de filtrage

Le esp-01 semble se déconnecter au bout d’un certain temps. Le lendemain soir je n’arrive plus à le commander et je suis obligé de le débrancher et rebrancher pour qu’il refonctionne à nouveau

Une des possibilités : alimentation faiblarde , l'ESP8266 resette tout seul et redémarre 'de travers' en chargeant mal le code à parir de la mémoire Flash externe et se piège dans une boucle sans fin (du vécu !)

L'alimentation est un point très important à respecter pour un fonctionnement sûr des ESP8266 (et ESP32), dasn le cas des ESP-01 c'est à l'utilisateur de faire le nécessaire.

Bonjour, merci de vos retours, désolé pour les délais de réponse j’étais en déplacement.

Branché sur serial c’est quoi ? Désolé mais je débute en arduino. J’ai un petit écran, est ce possible de le connecter à un esp-01 ? J’ai une arduino uno également.

Alimentation 1200 mah donc je ne pense pas que ce soit cela…

Branché sur serial c'est quoi ?

Cela veut dire que la carte envoie des informations via le câble USB qui s'affichent ensuite dans le serial moniteur, un outil qui permet de visualiser des données envoyés par la carte, que tu peux activer en cliquant sur outil -> moniteur série.
Dans le code, pour activer le moniteur série, du initialise la vitesse du moniteur série avec la commande Serial.begin(115200); mais tu peux aussi mettre la vitesse (9600); mais là c'est vraiment lent :grin: . Attention, ça tu le fais dans le Setup, pas dans le loop !
Après quand tu veux activer le moniteur ( dans le loop ) , tu tapes la commande Serial.print();. Si tu veux que ça revienne a la ligne, tu fais Serial.println(); ( avec LN au bout ) Pour mettre du texte, tu mets le texte en guillemets dans les parenthèses, et si tu veux mettre des variables, tu mets ta variable dans les parenthèses, mais sans guillemets :wink:

Cordialement
Pandaroux007 :fox_face:

salut, pas de soucis, tu réponds quand tu veux, et les bonnes (et aussi les mauvaises) idées t'attendent gentiment.

Je parlais du serial pour "serial monitor" c'est la fenetre qui s'ouvre dans l'IDE arduino pour exporter des données à l'aide de la commande Serial.print();

C'est un moyen pratique quand tu veux exporter des valeurs (une accélération, le résultat d'une opération) mais aussi du texte à des moments précis du code. On s'en sert beaucoup pour le débuger un code.
Basiquement, le code en construction est "bardé" de Serial.print("là ça a marché"); qui te permette de valider que les opérations se déroulent comme prévu, ou si elles n'apparaissent pas, de détecter l'endroit du code qui pose problème.
Dans l'exemple que je te proposais, je pose un Serial.print PENDANT les essais de connexions au wifi (et ça affiche des points ..... de manière très classe au fur et à mesure que le temps passe).

si tu ouvres ton serial monitor et que tu vois s'afficher:
.............................................................................................................................
tu peux te dire que l'arduino est bloqué à l'étape de connexion. Ca ne te dit pas pourquoi (erreur de login/mot de passe; il a pas trouvé le réseau etc...) mais par contre tu es sur qu'il n'a pas réussi à aller plus loin et tu concentres tes efforts sur cette partie là.
tu as sans doute déjà vu la formule Serial.println("Hello world"); dans les exemples ici et là. C'est une bonne habitude à prendre. Si le message ne s'affiche pas, c'est quasiment équivalent à "le code n'a meme pas démarré".