[Tuto] Programmation d’un ESP32 Basic Over The Air (OTA) avec l’IDE arduino

Le but de ce tutoriel est de programmer un esp32 pour pouvoir téléverser du code sans être relié physiquement à la carte. 

Ce tutoriel repose sur l’utilisation du code fourni dans la bibliothèque esp32 : Basic OTA, ainsi l’ordinateur avec lequel le code sera téléversé doit être connecté au même réseau WiFi que notre carte. 

tutoriel réalisé à l’aide du tutoriel de last minute engineers 

Matériel :

1 carte esp 32 (modèle Node32s)

Installation de Python 2.7.15

  1. Cliquez ici et téléchargez la version  qui correspond à votre système d’exploitation. Pour windows, favorisez la version MSI installer 
  2. cochez la case ‘install for all users’
  3. Dans la partie  “ Customise Python 2.7.15”, activez l’option add Python.exe to path : 

Initialisation :

1.Téléchargez la dernière version de l’IDE Arduino.

2. Si vous utilisez la carte mentionnée ci dessus, vous allez devoir ajouter la carte dans la liste des cartes prises en charge par l’IDE Arduino. Ouvrez l’IDE, « Fichier » → « Préférences » et dans « URL de gestionnaire de cartes supplémentaires » ajoutez le lien suivant : https://dl.espressif.com/dl/package_esp32_index.json

3. Allez ensuite dans le gestionnaire de carte et tapez esp 32 : téléchargez la version 1.0.0 de esp by Espressif system. Cela peut prendre quelques minutes. A la fin vous devez avoir le résultat ci contre :

4. Modifiez l’onglet outils pour qu’il corresponde à l’image ci dessous : 

Vous pouvez connaître le port COM de votre carte à l’aide d’un gestionnaire de périphérique. 

5. Copiez collez le code fourni

// Code exemple fournit dans la bibliothèque esp 32 espressif
// Ajout d'un programme pour vérifier le fonctionnement du téléversement à distance.
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

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

//variabls for blinking an LED with Millis
/*const int led = 2; 
// ESP32 Pin to which onboard LED is connected
unsigned long previousMillis = 0;  // will store last time LED was updated
const long interval = 1000;  // interval at which to blink (milliseconds)
int ledState = LOW;*/ // ledState used to set the LED

void setup() {

//pinMode(led, OUTPUT);  
  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 3232
  // ArduinoOTA.setPort(3232);

  // Hostname defaults to esp3232-[MAC]
  // ArduinoOTA.setHostname("myesp32");

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA
    .onStart([]() {
      String type;
      if (ArduinoOTA.getCommand() == U_FLASH)
        type = "sketch";
      else // U_SPIFFS
        type = "filesystem";

      // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
      Serial.println("Start updating " + type);
    })
    .onEnd([]() {
      Serial.println("\nEnd");
    })
    .onProgress([](unsigned int progress, unsigned int total) {
      Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    })
    .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();
  //loop to blink without delay
 /*unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
  // save the last time you blinked the LED
  previousMillis = currentMillis;
  // if the LED is off turn it on and vice-versa:
  ledState = not(ledState);
  // set the LED with the ledState of the variable:
  digitalWrite(led,  ledState);
  }*/
}

6. Renseignez votre identifiant WiFi et votre mot de passe : 

const char* ssid = "-----"; // nom du réseau
const char* password = "-----";// mot de passe

7.Téléversez le code. Il peut être nécessaire de maintenir le bouton Boot  de la carte enfoncé durant cette étape. 

8. Ouvrez le moniteur série ( en appuyant sur la petite loupe en haut à gauche) et appuyez sur le bouton EN de la carte. 

Voici l’affichage que vous devez obtenir. Sur la dernière ligne, vous pourrez observer votre adresse IP, notez la car vous en aurez besoin pour la suite. 

Si l’affichage du moniteur série ne correspond pas à l’image ci dessus, veuillez à nouveau appuyer sur le bouton EN. 

Téléversement d’un nouveau croquis Over-The-Air

Pour permettre le téléversement OTA, la séquence d’initialisation que nous venons de compiler doit toujours être présente. Ainsi, pour des questions de simplicité, nous allons rajouter du code dans notre exemple. 

Pour s’assurer que le téléversement sans fil fonctionne, nous allons  réaliser un programme faisant clignoter la led interne de notre carte. 

1.Décommentez  les lignes 14 à 17, la ligne 21 ainsi que les lignes 83 à 91. 

Les plus observateur d’entre vous auront remarqué que le code dans la fonction loop() est un peu plus compliqué que nécessaire. Cela est dû au fait qu’en programmation OTA, il est déconseillé d’utiliser la fonction delay(). En effet, lorsque cette fonction est utilisée sur un ESP32, la carte se met en pause. Si la prochaine requête OTA est générée pendant que notre carte est en pause, le programme va manquer la requête et ne pourra s’exécuter correctement. 

2. Changez le port dans l’onglet Outils de l’IDE. Une nouvelle catégorie intitulée port réseau devrait être disponible.

L’adresse IP doit correspondre à celle qui était affichée lors de la phase d’initiation.  Si vous ne trouvez pas le port, il peut être nécessaire de redémarrer l’IDE.

3. Téléversez le nouveau code; Une led bleue doit clignoter à une fréquence de 1Hz. Si tel est le cas, le programme a été téléversé à distance, vous avez réussi. 


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *