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.
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
#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
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.
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 ?
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
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.
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 . 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
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é".