C'est un programme crucial qui illustre l'implémentation de la mise à jour du micrologiciel
Over-The-Air (OTA) via un navigateur web, une fonctionnalité essentielle pour la
maintenance à distance.
☁️ Programme 14 : Analyse de la Mise à Jour Firmware
par Interface Web ([Link])
Ce programme utilise la classe Update et l'interface HTTP POST du serveur web pour
recevoir un fichier binaire (.bin) et le flasher directement sur la mémoire de l'ESP8266.
1. Inclusions et Déclarations
Ligne de Code Explication Technique et Focus/Valeur
Rôle
#include <ESP8266WiFi.h>, Inclusions standard pour la Couches de base du
<WiFiClient.h>, connectivité réseau, le réseau.
<ESP8266WebServer.h>, serveur HTTP et le service
<ESP8266mDNS.h> de nommage local (mDNS).
#include <Updater.h> L'inclusion essentielle. Fonctionnalité OTA.
Fournit la classe Update qui
gère l'écriture dans la
mémoire flash, y compris la
vérification de l'intégrité et
le redémarrage.
const char* host = Définit le nom d'hôte Nom d'hôte réseau.
"esp8266-webupdate"; mDNS. L'appareil sera
accessible via
[Link]
ocal.
ESP8266WebServer Instanciation de l'objet
server(80); serveur sur le port 80.
const char* serverIndex = Contenu HTML Intégré. Frontend d'Upload.
"<form method='POST' Chaîne de caractères
action='/update' définissant le formulaire
enctype='multipart/form-d minimal pour l'upload.
ata'><input type='file' L'attribut
name='update'><input enctype='multipart/form-d
type='submit' ata' est obligatoire pour
value='Update'></form>"; l'upload de fichiers.
2. Fonction setup()
Ligne de Code Explication Technique et Focus/Valeur
Rôle
[Link](WIFI_AP_STA); Configure le Wi-Fi en mode Mode de fonctionnement
Station (pour se connecter Wi-Fi.
au réseau local) et Access
Point (AP) simultanément
(bien que le mode STA
suffirait pour cet exemple).
[Link](host); Démarre le service mDNS. Résolution de nom (accès
facile).
[Link](\"/\") ... Routage GET Racine. Sert Affichage du formulaire.
[Link](200, le formulaire HTML intégré
\"text/html\", serverIndex); (serverIndex) lorsque l'URI
de la racine est demandée.
[Link](\"/update\", Routage POST Crucial. Point d'entrée OTA.
HTTP_POST, ...) Enregistre le gestionnaire
pour la requête HTTP
POST sur l'URI /update.
Cette requête sera initiée
par la soumission du
formulaire d'upload.
3. Le Gestionnaire POST (/update)
C'est une fonction Lambda qui contient deux parties : la fonction de réponse finale et la
fonction de traitement de l'upload.
A. Fonction de Réponse Finale (Exécutée à la fin de la requête POST)
Ligne de Code Explication Technique et Focus/Valeur
Rôle
[]() { ... }, Début de la première
fonction Lambda (la
fonction de réponse).
[Link]("Conne Indique au client que la Fermeture de la
ction", "close"); connexion HTTP doit être connexion.
fermée après cette
réponse. Essentiel après
l'upload.
[Link](200, Envoie le statut 200 OK au Statut de l'opération.
"text/plain", client. Le message est
([Link]()) ? conditionnel : si
"FAIL" : "OK"); [Link]() retourne
true (erreur pendant le
flashage), envoie FAIL,
sinon OK.
[Link](); Redémarrage Imminent. Activation du nouveau
Le microcontrôleur firmware.
redémarre immédiatement
pour charger le nouveau
micrologiciel.
B. Fonction de Traitement de l'Upload (Exécutée pendant la requête POST)
Cette deuxième fonction Lambda (l'argument final de [Link]) est un callback appelé par la
librairie ESP8266WebServer à chaque étape du processus de réception des données binaires.
Ligne de Code Explication Technique et Focus/Valeur
Rôle
HTTPUpload& upload = Récupère la référence à Accès au flux de
[Link](); l'objet HTTPUpload qui données.
encapsule l'état actuel et le
tampon de données du
fichier binaire en cours
d'upload.
if ([Link] == Début de l'Upload.
UPLOAD_FILE_START) Marque le début de la
réception des données
binaires du fichier.
uint32_t maxSketchSpace = Calcule l'espace maximal Calcul de l'espace
([Link]() disponible pour le nouveau mémoire.
- 0x1000) & 0xFFFFF000; programme (sketch) dans
la Flash, en excluant une
petite marge.
if Initialisation de l'OTA. Préparation du flasheur.
() { ... } à jour. L'argument indique
la taille maximale à flasher.
Si cela échoue (taille
invalide, etc.), une erreur
est levée.
else if ([Link] == Réception de Données.
UPLOAD_FILE_WRITE) Cette étape est appelée
répétitivement à mesure
que les paquets de
données arrivent.
if ([Link]([Link], Écriture Flash. Écrit le Écriture séquentielle en
[Link]) != tampon de données Flash.
[Link]) { ... } entrant ([Link])
directement dans la
mémoire Flash. Si la
quantité de données
écrites ne correspond pas
à la quantité reçue, une
erreur d'écriture est
signalée.
else if ([Link] == Fin de l'Upload. Toutes les
UPLOAD_FILE_END) données ont été reçues.
if ([Link](true)) { ... } Finalisation de l'OTA. Vérification et validation.
Termine l'opération de
flashage, valide l'intégrité
du nouveau micrologiciel
(checksum) et prépare le
redémarrage. L'argument
true indique que le
redimensionnement du
nouveau micrologiciel doit
être automatique.
yield(); Cède le contrôle de Maintien de la réactivité.
l'exécution pour permettre
aux tâches système de
s'exécuter, essentiel
pendant les opérations
bloquantes comme
l'écriture en Flash.
4. Fonction loop()
Ligne de Code Explication Technique et Focus/Valeur
Rôle
[Link](); Routine de maintenance Cœur de l'exécution.
pour traiter les requêtes
HTTP entrantes.