ArduinoOTA pour ESP32 ou ESP8266. Mise à jour sans fil (OTA) depuis l’IDE Arduino

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

La librairie ArduinoOTA est une librairie qui permet de mettre à jour le programme Arduino (et ESP8266, ESP32) sans fil en Wi-Fi. C’est une librairie essentielle lorsqu’on développe des objets connectés. Elle permet de mettre à jour le programme sans avoir à démonter le micro-contrôleur (Arduino, ESP8266, ESP32) pour le connecter à son ordinateur.

 

Cette librairie initialement développée pour mettre à jour les programmes Arduino, elle est parfaitement supportée par les ESP8266 et ESP32. Pour ce tutoriel, nous allons aborder uniquement le cas des ESP8266.

Installer la librairie ArduinoOTA pour ESP8266 sur l’IDE Arduino

La librairie ArduinoOTA est intégrée dans la librairie des cartes ESP8266. Il n’y a donc rien de plus à installer. Si vous débutez avec les ESP, voici comment installer le librairies et le support des cartes ESP. Ouvrez les préférences (depuis le menu Arduino) et ajoutez à la liste des packages celui-ci

http://arduino.esp8266.com/stable/package_esp8266com_index.json

 

IDE Arduino 1.6.8 esp8266 package

Ensuite, allez dans le gestionnaire de carte et cherchez esp8266, puis cliquez sur installer.

IDE Arduino 1.6.x ajouter carte esp8266

Après l’installation, de nouveaux exemples ont été ajoutés dans le menu des exemples. Sélectionnez votre carte ESP8266 pour faire apparaître les exemples disponibles. Ouvrez l’exemple BasicOTA qui se trouve dans le sous-menu ArduinoOTA.

arduinoota 0 basicota example

 

Pour qui l’IDE Arduino puisse compiler le code, il faut que Python 2.7 (attention, pas Python 3.5) soit installé sur la machine de développement (GitHub). Pour les utilisateurs Windows, il faut cocher l’option “Add python.exe to Path” durant l’installation. Merci à Jeff pour l’info

ota ide arduino python configuration

Ce programme contient tout ce qu’il faut pour gérer la mise à jour sans fil dans vos projets ESP.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "..........";
const char* password = "..........";

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  ArduinoOTA.setHostname("Demo OTA ESP8266");

  // No authentication by default
  ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  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");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  ArduinoOTA.handle();
}

Avant de teléverser le programme, modifiez les variables ssid (réseau Wi-Fi sur lequel se connecter) et password (mot de passe).

Ici, le programme utilise la librairie ESP8266WiFi pour se connecter au réseau. Vous pouvez également utiliser la librairie WiFiManager présentée précédemment.

A LIRE AUSSI :
ESP8266. Comment utiliser la librairie WiFiManager pour gérer les connexions WiFi

Une fois que la connexion est établie, il est possible de définir des paramètres complémentaires (optionnels) :

  • setPort() : par défaut le port de communication est le 8266. Il n’est pas très utile de la changer sauf à ce qu’il soit déjà utiliser. Par exemple pour un projet intégrant de la communication UDP.
  • setHostname() : c’est probablement l’option la plus importante. Elle permet d’attribuer un nom à l’ESP8266. Si vous avez beaucoup d’objets sur votre réseau, il sera beaucoup plus facile de l’identifier par son nom que par un identifiant construit automatiquement à partir du numéro de série.
  • setPassword() : permet de demander un mot de passe depuis l’IDE Arduino avant d’exécuter une mise à jour. Pratique si vous travaillez à plusieurs ou dans un établissement scolaire.

Quatre autres méthodes permettent de brancher des traitements dans les cas suivants :

  • onStart() : code à exécuter au démarrage de la mise à jour
  • onEnd() : idem à la fin
  • onProgress() : durant la progression
  • onError() : et en cas d’erreur

Vous n’aurez pas besoin d’ajouter des traitements dans la plupart des cas. Ces fonctions permettent surtout de rester informé du bon déroulement des opérations.

A la fin du setup, une fois que toutes les fonctions ont été définies, on démarre la prise en charge de la mise à jour sans fil en appelant la méthode begin().

Enfin, pour que tout fonctionne, il est nécessaire d’appeler la méthode ArduinoOTA.handle() dans la boucle loop().

Tester la mise à jour sans fil

Téléversez le programme et ouvrez le Terminal pour vérifier que l’ESP8266 est correctement connecté au réseau Wi-Fi.

arduinoota 1 ide arduino ip address

L’IDE Arduino détecte automatiquement les appareils supportant la mise à jour à distance. Ils sont ajoutés à la liste des ports dans une nouvelle section appelée Network ports.

arduinoota 2 esp8266 wifi update wireless arduino code

Il semble que la version 1.8.x comporte un bug qui empêche la mise à jour des appareils. Si votre ESP n’apparaît pas quelques secondes après le démarrage de l’ESP, il suffit de redémarrez l’IDE Arduino.

Pour mettre à jour le programme, il suffit de sélectionner l’ESP comme port à la place du port série habituel. Puis téléverser le programme comme d’habitude. Ici, comme un mot de passe est obligatoire, une fenêtre de saisie apparaît dans l’IDE. Il n’est demandé qu’une seule fois.

arduinoota 5 saisie mot de passe type password ide arduino

On peut suivre le bon déroulement (ou l’échec) de la mise à jour à distance directement depuis l’IDE Arduino.

arduinoota 4 ide arduino done uploading

Il n’est pas possible d’ouvrir le moniteur série avec la mise à sans fil. Il faudra prévoir une petite interface Web. Lisez ce tutoriel pour comprendre comment ajouter un serveur Web et une interface HTML à une projet ESP8266. Pour allez plus loin, voici une série d’articles qui traite du sujet

Autres tutoriels ESP8266

Voici d’autres projets et tutoriels pour continuer sur le même sujet

ESP8266, Serveur Web (Interface)

Mises à jour

4/09/2017 Installation de Python 2.7 pour les utilisateurs Windows

Avez-vous aimé cet article ?
[Total: 1 Moyenne: 4]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

8 Commentaires
  1. Bonjour,

    Super tuto, Merci beaucoup !
    J’ai connecté l’ESP8266-07 via “iHaospace ESP8266 Burner Fixture Test Board Minimum System Development Board” et non via un arduino.

    Quand j’essaye de passer par le port, j’ai les messages :
    Authenticating…OK
    13:15:24 [ERROR]: No response from device

    Q : Est ce que l’OTA permet de permettre à jour un ESP8266-07 à distance sans utiliser les boutons de reset et prog habituels ?

    • Bonsoir Phil. Pour mettre à jour en OTA, il faut déjà pré-installé un programme qui supporte cette fonctionnalité et je ne sais pas ce qui est pré-chargé dans votre ESP8266. Il faut mettre l’ESP8266 en mode bootload en appuyant sur Reset et Boot à la mise sous tension, ensuite ça devrait fonctionner.

      • Merci PROJETSDIY pour le retour.

        depuis le post effectué, j’ai beaucoup cherché sur le web et testé. Y a plein d’info.
        Mais c’est pas bien bien documenté in fine.
        Le programme d’exemple BasicOTA fonctionne

        Mais plusieurs questions / remarques :
        – on peut trouver une déclaration comme :
        MDNSResponder mdns;
        mais sans plus d’explication, utile ? absolument nécessaire ? ne sert à rien ?

        ce type de déclaration .. sort toujours en erreur :
        if (!mdns.begin(“”)) { // Start the mDNS responder for esp8266.local
        Serial.println(“Error setting up MDNS responder!”);
        }
        Serial.println(“mDNS responder started”);
        sous linux le programme à utiliser pour afficher les périphériques qui répondent au protocole “bonjour”
        fedora : avahi-browse –all
        ubuntu : avahi-discover
        il semblerait que dans la partie “loop”, si le programme est trop long etc etc alors l’OTA n’est pas détecté et y a l’erreur bien connu sur le web : [ERROR]: No response from device.
        void loop() {
        ArduinoOTA.handle();
        }

        • Avec plaisir Phil. Oui c’est toujours le même problème, les techniques évoluent et on doit s’y retrouver entre les vieux tutos, les tutos qui reprennent les exemples livrés avec les librairies 🤐, les mises à jours… j’essai de tenir à jour mes tutos
          Si vous pouvez m’en dire un peu plus sur votre projet, je pourrais mieux cibler comment vous orienter.
          Pour répondre à vos questions :
          mdns permet de diffuser un nom de machine pour retrouver plus facilement l’ESP8266 sur le réseau local. Ce n’est pas obligatoire, on peut s’en sortir avec l’IP et même la fixer. J’ai échoué à l’utiliser également, je n’ai pas été plus loin, peut être que la librairie est obsolète.
          Effectivement, plutot que de “pousser” la mise à jour depuis l’IDE Arduino ou un serveur, vous pourriez interroger au démarrage un serveur ou faire une page HTML pour le faire manuellement depuis l’ESP8266. Si ça vous intéresse je peux ajouter le sujet dans ma todo list.

  2. Merci beaucoup pour ce tuto, sous ubuntu 20.04 la commande a utiliser dans un terminal est :
    sudo apt install python2.
    Après installation pour verifier la version python installée on peut taper dans le terminal:
    python2 -V

  3. Merci pour le tuto, très pratique.
    J’avais une erreur car il faut que python 2.7 soit installé en ajoutant Add python.exe à l’installation comme préciser ici.
    http://esp8266.github.io/Arduino/versions/2.0.0/doc/ota_updates/ota_updates.html

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.