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

Table des matières

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

9 Commentaires
  1. Bonjour,
    Le nom de l’ESP par l’OTA, c’est très pratique pour le retrouver dans l’interface Arduino.
    Mais je vous propose de doubler ce nom pour le WiFi, l’explorateur de réseau vous donnera le doux nom de votre ESP.

    const char* ssid = “……….”;
    const char* password = “……….”;
    const char* hostname = “MyIOT-ESP”; // Nom de l’équipement, du module ESP

    WiFi.mode(WIFI_STA);
    Wifi.hostname(hostname); // Apparaitra sous se nom dans la liste des équipements de votre Box
    WiFi.begin(ssid, password);

    // Hostname defaults to esp8266-[ChipID]
    ArduinoOTA.setHostname(hostname); // On utilise le nom de l’équipement pour être homogène

    NB : Ces lignes devraient aussi être ajoutée à tous les exemples utilisant WiFi.begin(), pédagogie…

    const char* hostname = “MyIOT-ESP”; // Nom de votre équipement, de votre module ESP
    Wifi.hostname(hostname); // Apparaitra sous se nom dans la liste des équipements de votre Box

  2. 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.

  3. 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

  4. 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.

Calculateurs
×
Calculateur loi d'Ohm
Tension (U) - en Volt
Courant (I) - en Ampère
Résistance (R) - en Ohms
Puissance (P) - en Watts

Ce calculateur permet de calculer les relations entre le courant, la tension, la résistance et la puissance dans les circuits résistifs.

Saisir au moins deux valeurs puis cliquer sur calculer pour calculer les valeurs restantes. Réinitialisez après chaque calcul.

Rappel sur la Loi d'Ohm
La loi d'Ohm explique la relation entre la tension, le courant et la résistance en déclarant que le courant traversant un conducteur entre deux points est directement proportionnel à la différence de potentiel entre les deux points.
La loi d'Ohm s'écrit U = IR, où U est la différence de tension, I est le courant en ampère et R est la résistance en Ohms (symbole Ω).
Loi d'Ohm (U=RI)
×
Déchiffrer le code couleur d'une résistance à 4 bandes
Bande 1 Bande 2 Multiplicateur Tolérance
   

Résistance:  

1 000 Ω ±5%

Comment déchiffrer le code couleur d'une résistance à 4 anneaux
Formule : ab*cΩ ±d%
Les deux premières bandes (a, b) permettent de déterminer le chiffre significatif. La première bande correspond au chiffre de la dizaine, le second anneau le chiffre de l'unité. Par exemple Brun(1), Noir (0) donne le nombre 10.
La troisième bande (c) est un coefficient multiplicateur. Par exemple, l'anneau rouge est un coefficient multiplicateur de 100, ce qui donne 10 X 100 = 1000Ω.
Le quatrième anneau (d) indique la tolérance de la valeur nominale de la résistance. Par exemple l'anneau Or correspond à ±5%. Donc le fabricant de la résistance s'engage à ce que sa valeur soit comprise entre 950 Ω et 1050 Ω.
Déchiffrer code couleur 4 bandes
×
Déchiffrer le code couleur d'une résistance à 5 bandes
Bande 1 Bande 2 Bande 3 Multiplicateur Tolérance

Résistance:  

1 000 Ω ±5%

Comment déchiffrer le code couleur d'une résistance à 5 anneaux
Formule : abc*dΩ ±e%
Les trois premières bandes permettent de déterminer le chiffre significatif. La première bande correspond au chiffre de la dizaine, le second anneau le chiffre de l'unité. Par exemple Brun(1), Noir (0), Noir (0) donne le nombre 100
La quatrième bande est un coefficient multiplicateur. Par exemple, l'anneau brun correspond au coefficient multiplicateur 10, ce qui donne 100 X 10 = 1000Ω.
Le cinquième anneau indique la tolérance de la valeur nominale de la résistance. Par exemple l'anneau Or correspond à ±5%. Donc le fabricant de la résistance s'engage à ce que la valeur de la résistance soit comprise entre 950 Ω et 1050 Ω.
Déchiffrer code couleur 5 bandes
×
Calculateur de résistance série pour une ou plusieurs LED
Tension d'alimentation en Volt
Tension directe en Volt
Courant en mA
Résistance calculée en Ω
Puissance estimée en W

Ce calculateur permet de déterminer la résistance requise pour piloter une ou plusieurs LED connectées en série à partir d'une source de tension à un niveau de courant spécifié.

Remarque. Il est préférable d'alimenter le circuit avec une puissance nominale comprise entre 2 et 10 fois la valeur calculée afin d'éviter la surchauffe
Couleur Longueur d'onde (nm) Tension (V) pour LED ⌀3mm Tension(V) pour LED ⌀5mm
Rouge 625-630  1,9-2,1 2,1-2,2
Bleu 460-470 3,0-3,2 3,2-3,4
Vert 520-525 2,0-2,2 2,0-2,2
Jaune 585-595 2,0-2,2 3,0-3,2
Blanc 460-470 3,0-3,2 1,9-2,1
Résistance en série pour une ou plusieurs LED
×
Calculateur durée de vie d'une batterie
Capacité de la batterie
Consommation de l'appareil ou objet connecté

Ce calculateur estime la durée de vie d'une batterie, en fonction de sa capacité nominale et du courant ou de la puissance qu'une charge en tire.

La durée de vie de la batterie est une estimation idéalisée. La durée de vie réelle peut varier en fonction de l'état de la batterie, de son âge, de la température, du taux de décharge et d'autres facteurs. C'est le mieux que vous pouvez espérer obtenir.

Autonomie de la batterie = capacité de la batterie en mAh / courant de charge en mA

Durée de vie batterie
Publicité
À lire aussi
Composants
Sur le Forum
Domotique et objets connectés à faire soi-même
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.