Pour faire suite aux précédents articles :
Projet Wemos et Wifi et Wemos , voici comment activer l’OTA ( Over The Air ) , qui permet de faire les mises à jour par wifi , sans avoir besoin de brancher votre module par cable usb. Très pratique , pour les objets connectés ou autres modules , pas forcément proche d’un PC.
Si on reprend l’article précèdent , on s’est arrêté à la mise en place du WIFI et d’un serveur WEB. Nous allons ajouter les services OTA.
Pour cela, nous allons récupérer la bibliothèque , directement sur le Github ArduinoOTA.
Puis, il suffit de la copier dans le dossier bibliothèque.
Afin d’intégrer les services OTA , il suffit d’ajouter :
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
Puis dans la section Setup :
ArduinoOTA.setHostname(« EspTestOTA »); // si pas précisé , le nom par défaut sera constitué par esp8266-[ChipID]
ArduinoOTA.begin();
et enfin dans la boucle loop
ArduinoOTA.handle();
Si l’on ajoute ces lignes à l’article précèdent, on obtient le code source suivant :
include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
// WIFI Manager , afin de gérer la connexion au WIFI de façon plus intuitive
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
///includes nécessaires au fonctionnement de l'OTA :
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
ESP8266WebServer server(80); // serveur WEB sur port 80
// définition du numero de LED interne
int led = 2; // led built IN
void setup() {
Serial.begin(115200); // on démarre le moniteur serie
//******** WiFiManager ************
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
//Si besoin de fixer une adresse IP
//wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
//Forcer à effacer les données WIFI dans l'eprom , permet de changer d'AP à chaque démarrage ou effacer les infos d'une AP dans la mémoire ( à valider , lors du premier lancement)
//wifiManager.resetSettings();
//Récupère les identifiants ssid et Mot de passe dans l'eprom et essaye de se connecter
//Si pas de connexion possible , il démarre un nouveau point d'accés avec comme nom , celui définit dans la commande autoconnect ( ici : AutoconnectAP )
wifiManager.autoConnect("AutoConnectAP");
//Si rien indiqué le nom par défaut est ESP + ChipID
//wifiManager.autoConnect();
// ****** Fin config WIFI Manager ************
//******* OTA ***************
// Hostname defaults to esp8266-[ChipID]
ArduinoOTA.setHostname("ESPTEST");
ArduinoOTA.begin();
//********* Fin OTA ***************
Serial.println("");
// on attend d'être connecté au WiFi avant de continuer
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// on affiche l'adresse IP attribuée pour le serveur DSN
Serial.println("");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// on définit les points d'entrée (les URL à saisir dans le navigateur web) et on affiche un simple texte
server.on("/", [](){
server.send(200, "text/plain", "Page d'accueil");
});
server.on("/led", []() {
String Etat=server.arg("etat");
if (Etat == "on") digitalWrite(led, LOW);
else if (Etat == "off") digitalWrite(led, HIGH);
server.send(200, "text/plain", "la led est " + Etat);
});
// on démarre le serveur web
server.begin();
pinMode(led, OUTPUT); // Initialise la broche "led" comme une sortie
digitalWrite(led, HIGH);
}
void loop() {
// à chaque itération, la fonction handleClient traite les requêtes
server.handleClient();
// Surveillance des demandes de mise à jour en OTA
ArduinoOTA.handle();
}[adsense]Il suffit maintenant de redémarrer l’interface IDE , et vous devriez voir apparaître dans la liste des ports disponibles votre module en OTA.

Si le port n’apparaît pas , fermer l’application IDE Arduino , éteindre le module ( débranché ). Puis, rebranché le module , attendre une dizaine de secondes et relancer l’application IDE arduino.
L’inconvénient en mode OTA , c’est que nous n’avons pas de remontée d’info , car le moniteur série n’est pas disponible.
Il y a la possibilité de passer par la bibliothèque remotedebug ( via telnet ) , mais je n’ai pas eu encore l’occasion de la tester . Vous pouvez avoir plus d’info sur cette bibliothèque en suivant ce lien. RemoteDebug
Dans l’exemple qui suit j’ai choisi de signaler le début et la fin de la mise à jour OTA par un changement d’état sur la led Interne.
Afin de pouvoir suivre l’avancement des mises à jour , il y a quatre fonctions implémentées .
OnStart , OnProgress , OnEnd et OnError .
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
digitalWrite(led, HIGH); // allume led au début du transfert
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
//Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
digitalWrite(led, LOW); // éteint à la fin de la mise à jour
});
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");
});Dans cette exemple , j’ai choisi d’allumer la LED interne lors du début de la mise à jour , et de l’éteindre lors de la fin. J’utilise donc , les fonctions OnStart et OnEnd.
A ajouter dans le setup.
Maintenant , on a toutes les bases , pour faire des projets interéssants.

2 commentaires sur “Activer OTA sur ESP8266 ( WEMOS ou autres )”