Mises à jour ESP8266 NodeMCU OTA (Over-the-Air) – ElegantOTA Arduino IDE

Mises à jour ESP8266 NodeMCU OTA (Over-the-Air) – ElegantOTA Arduino IDE

Ce tutoriel montre comment effectuer des mises à jour OTA (over-the-air) sur vos cartes ESP8266 NodeMCU à l’aide de la bibliothèque ElegantOTA (version V3) avec l’IDE Arduino. Cette bibliothèque configure un serveur Web qui vous permet de mettre à jour le firmware (une nouvelle esquisse) de votre carte sans fil. De cette façon, vous n’avez pas besoin d’une connexion entre l’ESP8266 et votre ordinateur pour télécharger un nouveau croquis.

Mises à jour ESP8266 NodeMCU OTA (Over-the-Air) – Bibliothèque ElegantOTA avec Arduino IDE

À la fin de ce didacticiel, vous serez en mesure d’ajouter facilement des fonctionnalités OTA à vos projets de serveur Web avec l’ESP8266 pour télécharger un nouveau firmware sans fil à l’avenir.

Table des matières

Tout au long de ce didacticiel, nous aborderons :

Nous vous recommandons de suivre toutes les étapes du tutoriel pour comprendre le fonctionnement de la bibliothèque ElegantOTA et comment vous pouvez l’utiliser dans vos projets. Pour montrer comment procéder, nous allons télécharger des fichiers pour créer différents projets de serveur Web.

Programmation ESP8266 OTA (Over-the-Air)

La mise à jour OTA (Over-the-Air) est le processus de chargement d’un nouveau micrologiciel sur la carte ESP8266 à l’aide d’une connexion Wi-Fi plutôt que d’une communication série. Cette fonctionnalité est extrêmement utile en cas d’absence d’accès physique à la carte ESP8266. Vous n’avez pas besoin d’une connexion entre votre ordinateur et le tableau pour télécharger un nouveau code.

Serveur Web Async ElegantOTA Comment ça marche ESP8266

Il existe différentes manières d’effectuer des mises à jour OTA. Dans ce didacticiel, nous expliquerons comment procéder à l’aide de la bibliothèque ElegantOTA (version V3 — il s’agit du successeur de la bibliothèque obsolète AsyncElegantOTA). À notre avis, c’est l’un des moyens les meilleurs et les plus simples d’effectuer des mises à jour OTA.

La bibliothèque ElegantOTA crée un serveur Web auquel vous pouvez accéder sur votre réseau local pour télécharger de nouveaux micrologiciels ou fichiers sur le système de fichiers (SPIFFS ou LittleFS). Les fichiers que vous téléchargez doivent être au format .bin. Nous vous montrerons plus tard dans ce tutoriel comment convertir vos fichiers au format .bin.

Le seul inconvénient de la programmation OTA est que vous devez ajouter le code pour OTA dans chaque croquis que vous téléchargez afin de pouvoir utiliser OTA à l’avenir. Dans le cas de la bibliothèque ElegantOTA, elle ne comprend que trois lignes de code.

Bibliothèque éléganteOTA

Logo élégantOTA

Voici quelques fonctionnalités intéressantes de cette bibliothèque :

  • Il est compatible avec la bibliothèque ESP8266WebServer.h intégrée et avec plusieurs forks de la bibliothèque ESPAsyncWebServer.
  • Il vous suffit d’ajouter trois lignes de code pour ajouter des fonctionnalités OTA à votre serveur Web « normal » ;
  • Il vous permet de mettre à jour non seulement le nouveau firmware de la carte, mais également les fichiers du système de fichiers ESP8266 (LittleFS ou SPIFFS) ;
  • Il fournit une interface de serveur Web belle et moderne ;
  • Il est disponible en version professionnelle payante qui ajoute plus de fonctionnalités.

Mises à jour OTA avec la bibliothèque ElegantOTA – Résumé rapide

Pour ajouter des fonctionnalités OTA à vos projets à l’aide de la bibliothèque ElegantOTA, suivez ces étapes :

1) Installez les bibliothèques ElegantOTA, ESPAsyncTCP et ESPAsyncWebServer ;

2) Incluez la bibliothèque ElegantOTA en haut du croquis Arduino :

#include ;

3) Ajoutez la ligne suivante dans la configuration avant server.begin();

ElegantOTA.begin(&server);

4) Dans la boucle(), ajoutez la ligne suivante :

ElegantOTA.loop();

5) Ouvrez votre navigateur et accédez à http:///update, où se trouve votre adresse IP ESP8266 pour accéder à la page du serveur Web pour les mises à jour OTA.

Continuez à lire le didacticiel pour connaître les étapes plus détaillées.

Comment fonctionne le programme de mise à jour Web OTA ?

Le premier croquis doit être téléchargé à l’aide d’une connexion série. Ce croquis doit inclure le code permettant de configurer OTA Web Updater, vous permettant de télécharger de nouveaux croquis via un navigateur Web.

L’OTA Web Updater crée un serveur Web sur lequel vous pouvez télécharger des croquis sans fil.

Si votre code n’inclut pas de routine OTA, vous ne pourrez pas utiliser le serveur Web pour télécharger de nouveaux croquis sans fil.

Après cela, assurez-vous que chaque croquis que vous téléchargez inclut des routines OTA afin de pouvoir continuer à mettre à jour la carte sans fil à l’avenir.

Installation de la bibliothèque ElegantOTA

Pour installer la bibliothèque ElegantOTA dans l’IDE Arduino, accédez à Sketch > Inclure la bibliothèque > Gérer les bibliothèques, recherchez ElegantOTA et installez la bibliothèque ElegantOTA d’Ayush Sharma.

Installation de l'IDE Arduino de la bibliothèque ElegantOTA

Activation du mode asynchrone

Pour que la bibliothèque ElegantOTA fonctionne en mode asynchrone (avec la bibliothèque ESPAsyncWebServer), vous devez suivre la procédure suivante.

1) Accédez au répertoire de vos bibliothèques Arduino.

2) Ouvrez le dossier ElegantOTA puis ouvrez le dossier src.

3) Localisez la macro ELEGANTOTA_USE_ASYNC_WEBSERVER dans le fichier ElegantOTA.h et définissez-la sur 1 comme suit :

define ELEGANTOTA_USE_ASYNC_WEBSERVER 1
la bibliothèque Elegantota active le mode asynchrone

4) Enregistrez les modifications dans le fichier ElegantOTA.h.

5) Vous pouvez désormais utiliser ElegantOTA en mode asynchrone pour vos mises à jour OTA et avec la bibliothèque ESPAsyncWebServer.

Installer les bibliothèques ESPAsyncTCP et ESPAsyncWebServer

Pour tester les exemples de ce didacticiel, vous devez également installer les bibliothèques ESPAsyncTCP et ESPAsyncWebServer.

Remarque : la bibliothèque ElegantOTA fonctionne avec différentes versions forkées des bibliothèques de serveur Web ESPAsyncWebServer et ESPAsyncTCP, vous n’avez donc pas nécessairement besoin d’utiliser les mêmes que celles que nous utilisons.

Suivez les instructions suivantes pour installer ces bibliothèques.

Cliquez sur les liens ci-dessous pour télécharger les dossiers .zip des bibliothèques.

Ces bibliothèques ne peuvent pas être installées via Arduino Library Manager, vous devez donc copier les fichiers .zip de la bibliothèque dans le dossier des bibliothèques d’installation Arduino. Alternativement, dans votre IDE Arduino, vous pouvez accéder à Sketch > Inclure une bibliothèque > Ajouter une bibliothèque .zip et sélectionner les bibliothèques que vous venez de télécharger.

Exemple de base ElegantOTA ESP8266

Commençons par un exemple basique (basé sur l’un des exemples de la bibliothèque). Le code suivant crée un simple serveur Web avec l’ESP32. L’URL root affiche du texte et l’URL /update affiche l’interface permettant de mettre à jour le micrologiciel et le système de fichiers.

Copiez le code suivant sur votre IDE Arduino.

View raw code

Insert your network credentials and the code should work straight away.

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Comment fonctionne le code ?

Commencez par inclure les bibliothèques requises.

#include 
#include 
#include 
#include 
#include 

Insérez vos informations d'identification réseau dans les variables suivantes afin que l'ESP32 puisse se connecter au Wi-Fi sur votre réseau local.

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Créez un objet AsyncWebServer sur le port 80 :

AsyncWebServer server(80);

Dans setup(), initialisez le Serial Monitor :

Serial.begin(115200);

Initialiser le Wi-Fi :

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

Ensuite, gérez les demandes des clients. Les lignes suivantes, envoyez du texte Salut ! Je suis ESP8266 lorsque vous accédez à l'URL root (/) :

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
  request->send(200, "text/plain", "Hi! I am ESP8266.");
});

Si votre serveur Web doit traiter davantage de requêtes, vous pouvez les ajouter (nous vous le montrerons dans l'exemple suivant).

Initialisez le serveur :

server.begin();

Ensuite, ajoutez la ligne suivante pour démarrer ElegantOTA :

ElegantOTA.begin(&server);    // Start ElegantOTA

Dans la boucle(), ajoutez la ligne suivante :

ElegantOTA.loop();

Accéder au serveur Web

Après avoir téléchargé le code sur la carte, ouvrez le moniteur série à un débit en bauds de 115 200. Appuyez sur le bouton RST intégré de l'ESP8266. Il devrait afficher l'adresse IP de l'ESP comme suit (la vôtre peut être différente) :

ESP8266 Serveur Web ElegantOTA Obtention de l'adresse IP du moniteur série

Sur votre réseau local, ouvrez votre navigateur et saisissez l'adresse IP ESP8266. Vous devriez accéder à la page Web root (/) avec du texte affiché.

OTA de base du serveur Web NodeMCU ESP8266

Désormais, si vous souhaitez modifier le code de votre serveur web via OTA, rendez-vous sur l'adresse IP ESP suivie de /update. La page Web suivante devrait se charger.

Page du serveur Web ElegantOTA ESP8266

Pour télécharger du nouveau code sur votre carte ou des fichiers sur le système de fichiers, vous devez les télécharger au format .bin. Suivez la section suivante pour savoir comment générer un fichier .bin à partir de votre croquis dans l'IDE Arduino.

Téléchargez un nouveau code sur l'ESP8266 via OTA

Chaque fichier que vous téléchargez via OTA doit être au format .bin. Vous pouvez générer un fichier .bin à partir de votre croquis à l'aide de l'IDE Arduino.

Une fois votre esquisse ouverte, il vous suffit de sélectionner la carte ESP8266 que vous utilisez dans Outils > Carte, puis d'aller dans Esquisse > Exporter le binaire compilé. Un fichier .bin sera généré à partir de votre croquis.

Arduino IDE, fichier bin d'exportation

Le fichier généré sera enregistré sous votre dossier de projet dans une série d'autres dossiers. Le fichier avec l'extension .ino.bin est celui que vous devez télécharger sur votre tableau à l'aide de la page Web ElegantOTA.

Télécharger une nouvelle esquisse de serveur Web via OTA – Exemple

Imaginez qu'après avoir téléchargé le croquis précédent, vous souhaitiez en télécharger un nouveau qui vous permet de contrôler une LED via une interface Web comme ce projet. Voici les étapes à suivre :

1. Copiez le code suivant sur votre IDE Arduino. N'oubliez pas d'insérer vos informations d'identification réseau.

/*********
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp8266-nodemcu-ota-elegantota-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Softwar
*********/

// Import required libraries
#include 
#include 
#include 
#include 
#include 

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

bool ledState = 0;
const int ledPin = 2;

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
AsyncWebSocket ws("/ws");

const char index_html[] PROGMEM = R"rawliteral(


  ESP Web Server
  
  
  
ESP Web Server




  
  
    
      

Output - GPIO 2

state: %STATE%

Toggle

)rawliteral"; void notifyClients() { ws.textAll(String(ledState)); } void handleWebSocketMessage(void *arg, uint8_t *data, size_t len) { AwsFrameInfo *info = (AwsFrameInfo*)arg; if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT) { data[len] = 0; if (strcmp((char*)data, "toggle") == 0) { ledState = !ledState; notifyClients(); } } } void onEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { switch (type) { case WS_EVT_CONNECT: Serial.printf("WebSocket client #%u connected from %s\n", client->id(), client->remoteIP().toString().c_str()); break; case WS_EVT_DISCONNECT: Serial.printf("WebSocket client #%u disconnected\n", client->id()); break; case WS_EVT_DATA: handleWebSocketMessage(arg, data, len); break; case WS_EVT_PONG: case WS_EVT_ERROR: break; } } void initWebSocket() { ws.onEvent(onEvent); server.addHandler(&ws); } String processor(const String& var){ Serial.println(var); if(var == "STATE"){ if (ledState){ return "ON"; } else{ return "OFF"; } } return String(); } void setup(){ // Serial port for debugging purposes Serial.begin(115200); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } // Print ESP Local IP Address Serial.println(WiFi.localIP()); initWebSocket(); // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send(200, "text/html", index_html, processor); }); // Start server server.begin(); ElegantOTA.begin(&server); // Start ElegantOTA } void loop() { ws.cleanupClients(); digitalWrite(ledPin, !ledState); ElegantOTA.loop(); }

Afficher le code brut

Il s'agit du même code que celui utilisé dans ce projet, mais il contient les lignes de code nécessaires pour gérer ElegantOTA :

#include 
ElegantOTA.begin(&server);
ElegantOTA.loop();

2. Enregistrez votre croquis : Fichier > Enregistrer et donnez-lui un nom. Par exemple : ESP8266_WebServer_LED_OTA.

3. Générez un fichier .bin à partir de votre esquisse. Tout d’abord, sélectionnez le modèle de carte que vous utilisez dans Outils > Carte. Ensuite, allez dans Sketch > Exporter le binaire compilé.

Arduino IDE, exporter le fichier bin

Accédez à votre dossier de croquis. Vous devriez avoir un dossier de construction. Dans ce dossier, vous aurez un autre dossier lié à votre modèle de carte. Ouvrez ce dossier. Il y aura plusieurs fichiers. Vous devez télécharger le fichier avec l'extension ino.bin.

fichier bin pour les mises à jour ESP8266 OTA

4. Maintenant, vous devez télécharger ce fichier à l'aide de la page ElegantOTA. Accédez à votre adresse IP ESP suivie de /update. Assurez-vous que l'option du micrologiciel est sélectionnée. Cliquez sur Choisir un fichier et sélectionnez le fichier .ino.bin que vous venez de générer.

ESP8266 ElegantOTA Téléchargement du nouveau firmware

5. Après quelques secondes, vous devriez recevoir un message de réussite. Ensuite, cliquez sur le bouton Retour.

ESP8266 ElegantOTA Téléchargement du nouveau micrologiciel réussi

6. Vous pouvez maintenant accéder à l'URL root (/) pour accéder au nouveau serveur Web. C'est la page que vous devriez voir lorsque vous accédez à l'adresse IP ESP sur l'URL root (/).

Serveur Websocket ESP8266 - sorties de contrôle

Vous pouvez cliquer sur le bouton pour allumer et éteindre la LED intégrée de l'ESP8266.

LED embarquée ESP8266 NodeMCU allumée

Comme nous avons également ajouté des fonctionnalités OTA à ce nouveau serveur Web, nous pourrons télécharger une nouvelle esquisse ultérieurement si nécessaire. Il vous suffit de vous rendre sur l'adresse IP ESP8266 suivie de /update.

Félicitations, vous avez téléchargé un nouveau code sur votre ESP8266 via Wi-Fi à l'aide d'ElegantOTA.

Conclusion

Dans ce didacticiel, vous avez appris comment ajouter des fonctionnalités OTA à vos projets de serveur Web Async à l'aide de la bibliothèque ElegantOTA sur la carte ESP8266. Cette bibliothèque est simple à utiliser : il vous suffit d'ajouter trois lignes de code à votre projet.

Nous espérons que vous avez trouvé ce tutoriel utile.

Apprenez-en davantage sur l'ESP8266 grâce à nos ressources :

Merci d'avoir lu.

Apprenez l'histoire de Raspberry Pi à travers cette vidéo :

YouTube video

  • ESP8266 Pro Module,ESP8266 Pro 4 Mo NodeMcu WLAN Carte de développement basée sur la série ESP8266EX CP2104 Carte de développement WiFi avec connecteur d'antenne Externe pour Arduino(3PCS)
  • AZDelivery 3 x D1 Mini NodeMCU Lua avec ESP8266-12F Module WLAN CH340G Compatible avec Arduino incluant Un E-Book!