Je tenais a remercier la communauté d'avoir répondu à ma première question hier soir et en voici une autre.
J'ai trouvé un petit tuto (ESP8266 + ArduinoOTA: Uploadez vos programmes par WiFI) pour faire une mise à jour en OTA, car mon projet en cours est dans une boîte de dérivation électrique et quand je fais des correctifs ou amélioration, j'ai pas envie d'ouvrir la boîte à chaque fois, déconnecter mon câble USB, qui n'est pas un câble DATA car il y a un interrupteur, mettre un câble DATA, connecter sur un PC, etc..
J'ai découvert cette fonction OTA, par hasard, qui est parfait pour moi, car mon projet est connecté à mon WiFi.
Mais je sais pas trop comment le mettre dans mon code actuel, enfin je pense avoir une idée avec les exemples donnés, mais je sais pas où mettre la fonction du mot du passe, car oui même si le réseau wifi est sécurisé par un filtrage MAC c'est pas fiable à 100%, où dois-je mettre la fonction du mot de passe dans mon croquis ?
J'ai une carte D1 Mini (v2 je crois) et je sais pas si c'est possible avec cette carte de faire des mises à jour OTA, je pense que oui, vu que c'est un ESP8266, mais bon voilà je débute ^^
pour le mot de passe facultatif , son activation éventuelle est positionnée (dans l'exemple basicOTA livré avec l'IDE Arduino) en ligne 32 et il suffit de supprimer le // de début de ligne pour l'activer dans le code
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_FS
type = "filesystem";
}
// NOTE: if updating FS this would be the place to unmount FS using FS.end()
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
Se met entre setup() et loop() ?
Mais je sais pas où mettre ceci:
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
C'est dans setup() ? Car dans l'exemple il ne mette pas
Oui tu as raison c'est moi qui est mal calculé les { } en effet c'est dans setup() par contre ça va fonctionner avec le hash MD5 ? Car c'est quand même un peu plus sécurisé comme cela
Ok je vais essayer avec cela pour voir, sinon j'ai un doute sur le ArduinoOTA.handle(); qui est dans le loop(), je dois le mettre au tout début ou à la fin de tout mon code que j'ai écrit ?
s'il est dans loop() il sera exécuté à chaque tour de boucle, peu importe le moment à priori... laises le au début pour ne pas l'oublier et le mettre visuellement bien en évidence !!
al1fch:
s'il est dans loop() il sera exécuté à chaque tour de boucle, peu importe le moment à priori... laises le au début pour ne pas l'oublier et le mettre visuellement bien en évidence !!
Ok, oui je fais toujours une argumentation pour m'y retrouver quand je repasse plus tard après, une habitude que j'ai prise en codant en PHP/SQL
Donc vu que j'ai une fonction qui fait que mon loop() est lancé tout les 6 secondes, il va donc vérifier toute les 6 secondes si une mise à jour est envoyée, donc si rien de tels, il fera rien de ce que j'ai compris. Je vais le mettre au début comme tu me le conseille
Voilà j'ai fais et envoyé le croquis sur le D1 mini, pas eu d'erreur mais par contre le IDE ne le trouve pas sur le réseau
Je suis sur un PC connecté avec un câble ethernet sur une livebox, c'est peut-être pour ça non ?
Alors, pour les personnes qui découvrent comme moi, je vais expliquer pourquoi j'ai eu des soucis.
Mon IDE ne voyant toujours pas mon ESP8266 D1 mini, je me suis dit que cela venait que mon PC de développement était connecté en ethernet sur ma box. J'ai donc installé IDE sur un PC qui se connecte en WiFi. J'ai tout installé, mis à jour et je ne voyais pas mon ESP8266... J'ai regardé dans la bibliothèque et là j'ai vu que le ArduinoOTA n'était pas installé.
J'ai donc été sur le PC de développement et j'ai constaté la même chose... J'ai dit installé la bibliothèque, fait un nouveau téléversement sur mon ESP8266, fermer IDE et relancé...
Et la miracle je le voit !!
Vu que la ligne #DEFINE de <ArduinoOTA.h> était orange, je me disais c'est bon pas de soucis, de plus le compilage ne m'a dit aucune erreur, je me suis pas douté de cela...
Bref là je le vois, il me reste à testé un autre téléversement pour voir si c'est OK
al1fch:
hash MD5, c'est "étudié pour" et ça doit fonctionner
Juste pour te dire que dans mon cas, le MD5 ne fonctionne pas, je tape le bon mot de passe et ça me dit à chaque fois erreur...
Authenticating...OK
20:36:13 [ERROR]: No response from device
Authenticating...OK
Uploading...
20:36:33 [ERROR]: Error Uploading
Authenticating...OK
Uploading....
20:36:54 [ERROR]: Error Uploading
J'ai fais sans le hash donc et j'ai le même soucis...
Authenticating...OK
Uploading....
20:44:19 [ERROR]: Error Uploading
Authenticating...OK
Uploading...
20:44:38 [ERROR]: Error Uploading
Authenticating...FAIL
20:44:45 [ERROR]: Authentication Failed
Authenticating...OK
Uploading....
20:45:08 [ERROR]: Error Uploading
Authenticating...OK
Uploading...
20:45:40 [ERROR]: Error Uploading
Ma portion de code en question
// Mise à jour OTA
// Nom réseau de la carte
ArduinoOTA.setHostname("MeteoCast_SQB");
// Mot de passe d'accès OTA
ArduinoOTA.setPassword("monmotdepasse");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_FS
type = "filesystem";
}
// NOTE: if updating FS this would be the place to unmount FS using FS.end()
Serial.println("Démarrage de la mise à jour " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nFin");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progression: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Erreur[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Authentification échouée");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Démarrage échoué");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connexion échouée");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Réception échouée");
} else if (error == OTA_END_ERROR) {
Serial.println("Fin échouée");
}
});
ArduinoOTA.begin();
// Affichage de la connexion au WIFI
Serial.print(" Connecté - IP Réseau Local: ");
Serial.println(WiFi.localIP());
lcd.setCursor(14,0); //
lcd.print(char(7)); // Affichage sur le LCD de la connexion
Je rajoute l'information de la carte, c'est "Crazepony-UK D1 Mini NodeMcu 4M Bytes Lua WIFI Development Board ESP8266 ESP-12F" et joins des photos, car je comprends pas trop... Je choisi la carte LOLIN (wemos) D1 R2&mini mais est-ce que c'est ça ? ça téléverse bien en USB mais en OTA, je fais comme il faut ça bug toujours à l'upload mais ça fait relancer la carte...
Si c'est à cause d'une fonction bloquante, je ne suis pas sûr que cela soit compatible avec l'OTA.
La loop doit être plus court...
Oui effectivement c'était pour faire une pause mais je peux m'en passer, je l'ai supprimé mais j'ai toujours le même soucis, j'ai cherché sur le forum et une personne avait eu le même soucis, ça plantait à l'upload. Une personne avait faire une installation de python et le soucis était réglé, moi ça règle pas à moins qu'il faut reboot le pc, une autre c'était un problème d'alimentation, mais là sur mes test je suis avec un powerbank qui peut délivrer 2.4A, j'ai tout essayé c'est toujours pareil
Ok merci, je regarde votre projet, j'avoue pas tout comprendre mais je pense avoir fait pareil, en faisant des copier/coller de l'exemple, mais à chaque upload j'avoir une erreur et la carte à l'air de reboot.. Je sais pas trop pourquoi..
En passant une bonne partie de la nuit, j'ai vu que c'était une erreur: RST CAUSE: 4, BOOT MODE:(3,6)
J'ai essayé avec autre chose 8266httpupdateserver mais alors là ça fait planté en continue la carte...
Voilà ce que j'ai après avoir fait comme dans le projet de volet roulant...
Je vais péter une pile sérieux...
Le croquis utilise 323628 octets (30%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
Les variables globales utilisent 30040 octets (36%) de mémoire dynamique, ce qui laisse 51880 octets pour les variables locales. Le maximum est de 81920 octets.
Authenticating...OK
Uploading...
15:54:31 [ERROR]: Error Uploading
15:54:46 [ERROR]: No Answer
Authenticating...OK
Uploading...
15:54:53 [ERROR]: Error Uploading
15:55:08 [ERROR]: No Answer
Authenticating...OK
Uploading...
15:55:14 [ERROR]: Error Uploading
Voilà ce que je vois sur termite, j'ai recherché et beaucoup parle de chute de tension qui provoque cela lors de mise à jour OTA.
Pour toute personne ayant le même problème, assurez-vous que votre appareil est alimenté par une source d'alimentation de 3,3 V capable de fournir au moins 200 mA de courant. N'oubliez pas non plus d'ajouter un condensateur de 10 uF sur les rails et de positionner l'ESP8266 aussi près que possible du condensateur. J'avais aussi le problème ci-dessus jusqu'à ce que j'ajoute le condensateur; maintenant tout est solide comme le roc.
Si cela ne fonctionne toujours pas, le reflasher peut être une bonne idée.
RST CAUSE: 4,
Un 4 dans ce type de message spontané au redémarrage correspond à un reset par le chien de garde , pas un un défaut d'alimentation.
Tu as quelque part un boucle qui monopolise trop longtemps l'ESP8266 et ne permet pas au WiFi prendre la main régulièrement la main en tâche de fond lorsque c'est nécessaire pour maintenir la conection au point d'accès.
un conseil
1)mettre au point un programme perso sans OTA , tournant sans pb
2)prendre en mains l'OTA avec l'exemple basique
3)ajouter ensuite l'OTA au programme perso