Table des matières:
- Étape 1: ce dont vous avez besoin
- Étape 2: Créer un référentiel pour contenir les micrologiciels binaires
- Étape 3: Créer les binaires
- Étape 4: créer le flux de serveur
- Étape 5: ajouter la logique du serveur
- Étape 6: ajouter du code au croquis pour demander une mise à jour
- Étape 7: Enfin, lancez la mise à jour
Vidéo: Configurer un serveur de mise à jour automatique ESP8266 : 7 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:10
De nombreuses personnes utilisent maintenant l'ESP8266 sous ses nombreuses formes (ESP-01S, Wemos D1, NodeMCU, Sonoff, etc.) pour les systèmes domotiques. Si vous écrivez votre propre code (comme je le fais), la mise à jour de chacun d'eux séparément, même via OTA (over the air), devient un peu fastidieux.
Mon propre système, par exemple, a 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV et un NodeMCU qui partagent une base de code commune, donc c'est 33 appareils en tout à mettre à jour quand je fais un simple code monnaie.
Mais il existe un moyen plus simple: un "serveur de mise à jour". L'excellent noyau Arduino IDE + ESP8266 possède une bibliothèque pour faire la plupart du travail (ESP8266httpUpdate), mais vous devez savoir comment configurer votre propre serveur pour le faire fonctionner.
Ce Instructable vous montre comment utiliser un serveur NODE-RED, mais la même logique s'applique à toute technologie de serveur de votre choix, par ex. Apache + PHP etc.
Étape 1: ce dont vous avez besoin
- IDE Arduino
- noyau ESP8266
- Toute carte de développement ESP8266 avec 1M ou plus de RAM flash
- Un serveur Web (même un humble Raspberry Pi fera l'affaire - c'est ce que j'utilise)
- (facultatif) outil mkspiffs si vous souhaitez mettre à jour automatiquement une image du système de fichiers SPIFFS
Étape 2: Créer un référentiel pour contenir les micrologiciels binaires
Sur mon serveur, j'ai un dossier appelé /home/pi/trucFirmware qui contient les différents firmwares de périphériques et images SPIFFS
Je conserve un binaire séparé pour chaque type de matériel (à partir d'un seul fichier source avec quelques #defines) et lorsqu'une nouvelle version est prête, j'utilise la commande de menu Arduino IDE "Sketch/Export compiled Binary" pour chaque périphérique cible. Notez que même bien qu'il existe 5 types de matériel différents, il n'y a que deux binaires SPIFFS: une version 1M et une version 4M - construites avec l'outil mkspiffs - puisque tous les appareils ont un flash 1M ou 4M.
Étape 3: Créer les binaires
À l'aide de l'option de menu Arduino IDE sketch/Exporter le binaire compilé, créez le micrologiciel qui sera téléchargé sur l'appareil lorsqu'il le demandera au serveur de mise à jour.
Si vous avez besoin d'un binaire SPIFFS, vous devrez installer l'outil mkspiffs.
Une fois que vous l'avez, la construction du binaire SPIFFS est simple. J'ai un fichier batch d'une ligne pour la version 1M qui prend le numéro de version en paramètre (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
et un autre pour la version 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Je copie ensuite tous les binaires compilés et les fichiers SPIFFS.binary dans le référentiel
Étape 4: créer le flux de serveur
J'utilise NODE-RED, mais la logique simple sera la même sur n'importe quelle technologie/langage de serveur.
a) Définissez une URL qui écoutera la requête ESP8266httpUpdate. Mon raspberryPi serevr est sur 192.168.1.4 et écoute sur le port 1880 pour / update avec le type de matériel ajouté. Donc, si je vais demander un binaire pour un Wemos D1 Mini, l'url se termine par:
192.168.1.4:1880/update/d1_mini
b) Créez du code pour gérer la logique suivante:
ESP8266: "Bonjour, j'utilise la version a.b.c du firmware, avez-vous une version plus récente ?"Serveur: « Laissez-moi voir… ah oui j'ai a.b.d - le voici… »
Si une version plus récente existe, le serveur l'envoie simplement sous forme de charge de données binaires dans la réponse http. La classe ESP8266httpUpdate effectue la partie délicate de la copie du binaire en mémoire, en changeant l'adresse de démarrage du micrologiciel pour le nouveau code plutôt que (si demandé) en redémarrant l'appareil pour exécuter le nouveau code.
Si par contre il n'y a pas de version supérieure, il répond par une erreur http 304 qui dit effectivement: "Je n'ai rien pour vous" et votre code continue de s'exécuter normalement.
Étape 5: ajouter la logique du serveur
Le premier nœud du flux "écoute" une requête http vers l'url https://192.168.1.4:1880/update avec le type d'appareil ajouté. Il le transmet au nœud de fonction "Construire le chemin de recherche" qui a le code javascript suivant:
msg.type=msg.req.params.type;var h=msg.req.headers; msg.version=h["x-esp8266-version"];
msg.mode=h["x-esp8266-mode"];
if(msg.mode=="sketch"){ msg.payload="/home/pi/trucFirmware/*.ino."+msg.type+".bin"; } else { var sz=h['x-esp8266-chip-size']; msg.payload="/home/pi/trucFirmware/spiffs_*_"+(sz/1048576)+"M.bin"; } renvoie le message;
Cela configure simplement le chemin approprié avec un caractère générique pour la fonction sys qui suit, qui s'exécute simplement
ls - r
La sortie est ensuite transmise au nœud de fonction « Comparer les versions »:
var f=msg.payload.split("\n")[0];msg.filename=f;
if(msg.mode=="sketch"){
f=f.replace("/home/pi/trucFirmware/truc_", ""); f=f.replace(".ino."+msg.type+".bin", ""); } else { f=f.replace("/home/pi/trucFirmware/spiffs_", ""); f=f.replace(/_\dM\.bin/, ""); }
if(msg.version < f){
node.warn("mise à niveau requise");
node.warn("retournera "+msg.filename); renvoyer le message; } node.warn("pas de mise à jour"); msg.statusCode=304; msg.payload=;
renvoyer le message;
Le nœud de commutation s'assure alors que soit le message 304 « aucune mise à jour nécessaire » est envoyé, soit le nouveau binaire réel est renvoyé et renvoyé au dispositif.
Étape 6: ajouter du code au croquis pour demander une mise à jour
L'esquisse doit contenir le code suivant afin qu'il se mette à jour automatiquement la prochaine fois que vous augmenterez le numéro de version:
#comprendre
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE est défini plus tôt en fonction de diverses définitions au moment de la compilation // qui définissent finalement le type de matériel, par ex. #define THIS_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"THIS_DEVICE; // c'est mon serveur Raspberry Pi, le 1880 est le port NODE-RED par défaut // /update est l'url que j'ai choisi pour que le serveur "écoute", suivi du type de périphérique … bool actualUpdate(bool sketch=false) { String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(false); if(sketch){ ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // ****************** C'est la ligne qui "fait l'affaire" } else { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf("MISE À JOUR RÉUSSIE");
renvoie vrai; } else { if(ret==HTTP_UPDATE_FAILED){
Serial.printf("Echec de la mise à niveau");
} } } renvoie faux; }
Étape 7: Enfin, lancez la mise à jour
Au démarrage, ou peut-être en réponse à un message MQTT (comme je le fais), exécutez le code suivant:
if(_actualUpdate(true)) ESP.restart();
// ou pour SPIFFS…
if(_actualUpdate(false)) ESP.restart();
L'appareil se mettra à jour et redémarrera en exécutant le dernier code du serveur. C'est beaucoup plus simple pour moi que de mettre à jour manuellement 33 appareils !
De nombreuses autres informations utiles sur la domotique, l'IOT et la programmation de l'ESP8266 sont disponibles sur mon blog.
Conseillé:
(MISE À JOUR - IL Y A UN LÉGER PROBLÈME) CONTRLEUR DE JEU USB POUR PC : 10 étapes (avec photos)
(MISE À JOUR - IL Y A UN LÉGER PROBLÈME) CONTRLEUR DE JEU USB POUR PC : UN CONTRLEUR DE JEU POUR TOUT JEU (PRESQUE)
Recevez une notification par e-mail lorsqu'une chaîne sur ThingSpeak n'a pas été mise à jour pendant un certain temps : 16 étapes
Recevez une notification par e-mail lorsqu'une chaîne sur ThingSpeak n'a pas été mise à jour pendant un certain temps : histoire de fondJ'ai six serres automatisées réparties à Dublin, en Irlande. En utilisant une application de téléphonie mobile sur mesure, je peux surveiller à distance et interagir avec les fonctionnalités automatisées de chaque serre. Je peux ouvrir/fermer manuellement la victoire
Ventilateur ESP8266 POV avec horloge et mise à jour du texte de la page Web : 8 étapes (avec images)
Ventilateur POV ESP8266 avec horloge et mise à jour du texte de la page Web : il s'agit d'un ventilateur POV (Persistance de la vision) à vitesse variable qui affiche l'heure par intermittence et deux messages texte pouvant être mis à jour "à la volée". Le ventilateur POV est également un serveur Web à page unique qui vous permet de modifier les deux textes moi
Mise à jour du micrologiciel Esp8266 : 7 étapes
Mise à jour du micrologiciel Esp8266 : le module ESP8266 est un module sans fil bon marché. Il dispose d'un SOC (système sur puce) capable de fournir le wifi à n'importe quel microcontrôleur/microprocesseur. L'esp8266 peut être utilisé de deux manières. Esp8266 autonome Esp8266 avec raspberry pi ou arduino ou
Snowmanthesizer - Chose par jour - Jour 2 : 8 étapes (avec photos)
Snowmanthesizer - Thing a Day - Jour 2 : L'autre soir, je découpais d'interminables feuilles d'autocollants de robots pour faire plaisir à tous les enfants. Oui, juste en train de trancher, en m'occupant de mes affaires, et à ce moment-là, notre chef intrépide Eric me met dans les mains trois objets en plastique étranges. Il m'informe que