Où sommes nous ?

Retour

Mise à jour par WiFi / OTA

La solution la plus évidente pour programmer un ESP (en C++) est de passer par la console série, soit par l'IDE, soit par des moyens détournés. Maintenant, le but des ESP est d'avoir des sondes déportées et le besoin se fait rapidement sentir de faire des mises à jour à distance ... c'est le but de l'Over The Air / OTA où elles se font par WiFi.

Pour que cela fonctionne, il faut absolument que la cible ait suffisamment de mémoire pour stocker 2 fois le binaire. Dans le cas de l'ESP8266, vu la taille du code gérant le WiFi, cela exclut les modèles ayant moins d'1Mb de Flash.

Côté programmation

Il y a beaucoup de tutos sur le web concernant l'ArduinoOTA, je ne vais pas réinventer la roue, on va donc faire vite .

La première chose est évidement d'inclure ... les includes qui vont bien.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h> // Publication Avahi
#include <WiFiUdp.h> // L'OTA
#include <ArduinoOTA.h>

L'initialisation dans la fonction setup()

void setup(){

Si nous avons beaucoup de sondes sur le réseau, il est préférable de les identifier par un nom plus parlant qu' "esp8266-<identifier>", ça se fait pas la commande

ArduinoOTA.setHostname("SondePiscine");

et pour tracer les activités OTA, on peut utiliser les callbacks suivants

void onStart(OTA_CALLBACK(fn));
void onEnd(OTA_CALLBACK(fn));
void onProgress(OTA_CALLBACK_PROGRESS(fn));
void onError(OTA_CALLBACK_ERROR (fn));

Dans le cas de ma sonde de piscine, je n'en utilise qu'une qui m'enverra un message en cas d'erreur.

    ArduinoOTA.onError([](ota_error_t error) {
        String msg = "Error :";
        msg += error;
        switch( error ){
        case OTA_AUTH_ERROR:
            msg += " (Auth Failed)"; break;
        case OTA_BEGIN_ERROR:
            msg += " (Begin Failed)"; break;
        case OTA_CONNECT_ERROR:
            msg += " (Connect Failed)"; break;
        case OTA_RECEIVE_ERROR:
            msg += " (Receive Failed)"; break;
        case OTA_END_ERROR:
            msg += " (End Failed)"; break;
        };

        logmsg( msg );
      });

On rajoutera un peu de sécurité en ajoutant un mot de passe

ArduinoOTA.setPassword((const char *)"123");

Il ne reste plus qu'à activer l'OTA

    ArduinoOTA.begin();
}

Et dans la boucle principale loop()

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

Programmation par l'IDE

Les sondes se déclarent sur ne réseau en utilisant le protocole Avahi/Bonjour et comme les messages de broadcast ne sont généralement pas retransmises à travers les routeurs, il faut qu'elles soient sur le même réseau que la machine faisant tourner l'IDE Arduino.


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2018
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.