0% ont trouvé ce document utile (0 vote)
12 vues6 pages

Mise à Jour Firmware OTA via Web

Programme 14

Transféré par

philophiloss46
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues6 pages

Mise à Jour Firmware OTA via Web

Programme 14

Transféré par

philophiloss46
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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.


(![Link](maxSketch Prépare le système de mise
Space)) { ... } à 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.

Vous aimerez peut-être aussi