Esp32 OTA

Bonjour,

J’utilise un esp32 doit devkit v1. J’essaie d’utiliser l’exemple BasicOTA:

#include <WiFi.h>
#include <ESPmDNS.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 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();
}

Le code téléverse bien mais l’esp32 n’apparaît pas dans les ports. J’ai essayé de redémarrer l’IDE plusieurs fois mais sans succès. J’ai installé python 2.7 mais ça ne change rien.

L’exemple OTAWebUpdater fonctionne mais je le trouve moins pratique:

#include <WiFi.h>
#include <ESPmDNS.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 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();
}

Merci pour votre aide

Bonjour

Sur la page de référence de l'extension ESP8266 (mais c'est identique pour ESP32) on peut lire ceci :

Note: If the OTA port does not show up, exit Arduino IDE, open it again and check if the port is there. If it is not, check your firewall and router settings. The OTA port is advertised using mDNS service. To check if the port is visible by your PC, you can use an application like Bonjour Browser.

Quel est le système d'exploitation utilisé ?

al1fch:
Bonjour

Sur la page de référence pour ESP8266 (mais c'est identique pour ESP32) on peut lire ceci :Quel est le systeme d'exploiation utilisé ?

Windows 10

Je possède bien un firewall mais je ne suis pas sûr qu'il bloque quoi que ce soit en local

il se pourrait qu'une manipulation soit nécessaire pour mDNS dans le cas de Windows 10
(Je suis maintenant rarement utilisateur de Windows 10 et ne peut être affirmatif !)

mDNS is a multicast UDP service that is used to provide local network service and host discovery.
mDNS is installed by default on most operating systems or is available as separate package.

On Mac OS it is installed by default and is called Bonjour

Apple releases an installer for Windows that can be found on Apple’s support page.

On Linux mDNS is provided by avahi and is usually installed by default.

source : mDNS Service - ESP32 - — ESP-IDF Programming Guide latest documentation

Ca ne change rien. J’ai essayé avec le logiciel Bonjour de chez Apple mais apparemment il est plus destiné à repérer des imprimantes réseaux.

Selon vous, ce serait plus un problème de pc/système d'exploitation ou d'installation réseau?

ça y ressemble mais je ne connais pas assez Windows10 pour proposer un test de bon fonctionnemment du protocole mDNS

l'ordinateur avec l'IDE et l'ESP32 sont bien sur le même réseau local ?

relancer l'ordinateur avec l'IDE sous Windows10 après avoir installé Bonjour ? (ses fonctions s'étendent maintenant au delà des imprimantes réseau d'après ce qu'on peut lire)

autre piste : problème du côté de l'installation de python 2.7 (path) ou de conflit entre versions de python installées?

al1fch:
ça y ressemble mais je ne connais pas assez Windows10 pour proposer un test de bon fonctionnemment du protocole mDNS

l'ordinateur avec l'IDE et l'ESP32 sont bien sur le même réseau local ?

relancer l'ordinateur avec l'IDE sous Windows10 après avoir installé Bonjour ? (ses fonctions s'étendent maintenant au delà des imprimantes réseau d'après ce qu'on peut lire)

autre piste : problème du côté de l'installation de python 2.7 (path) ou de conflit entre versions de python installées?

Peu de monde sur ce forum utilise Windows...

Oui même réseau

J'ai quand même supprimé python 3.8 pour être sûr mais ça ne change rien

Bon je n'ai toujours pas réussi.

Je vais essayer sur un mac

to0n7:
J'ai quand même supprimé python 3.8 pour être sûr mais ça ne change rien

J'aurais supprimé le 2.7.

Si le port esp32-ota n'apparaît pas dans le menu ports, cela n'a rien à voir avec un problème PYTHON.

Sur mon UBUNTU avec IDE 1.8.11 l'OTA fonctionne comme ceci :

python /home/riton/.arduino15/packages/esp32/hardware/esp32/1.0.4/tools/espota.py -i 192.168.1.24 -p 3232 --auth= -f /tmp/arduino_build_158113/BasicOTA.ino.bin

python (python2.7 sur ma machine) est appelé et non pas python3.

Par contre si je lance la commande en shell avec python3 le téléchargement fonctionne aussi.
A mon avis, 2.7 ou 3.X : pas d'importance. espota.py est compatible python2 et python3.

Deuxième remarque : je n'ai pas besoin de redémarrer l'IDE après le chargement de la première appli par USB.
Le port apparaît aussitôt que l'ESP32 est connecté.

Si le port esp32-ota n'apparaît pas dans le menu ports, cela n'a rien à voir avec un problème PYTHON.

C'est aussi mon avis (j'avais rayé dans un message précédent la mention de Python)
Python n'intervient içi que lorsque l'utilisateur clique sur le port OTA, mais pas pour faire apparaître ce port.

le problème rencontré par to07n me parait être un problème réseau (mDNS)

Il y a de fortes chances. Mais je ne connais pas Windows (divorce prononcé entre nous en 2006 :confused: ).

Il paraît que sous Windows la commande arp existe : commandes-ip-relatives-aux-reseaux-sous-windows#arp

arp -a permet de lister les machines sur le réseau.

$ arp -a
livebox.home (192.168.1.1) à 4c:09:b4:02:e9:87 [ether] sur eno1
domoticz.home (192.168.1.134) à b8:27:eb:9b:78:e9 [ether] sur eno1
? (192.168.1.155) à sur eno1
pc54.home (192.168.1.24) à 3c:71:bf:f1:43:7c [ether] sur eno1

Ici 192.168.1.24 est l’adresse d’un ESP32.

Il est à noter que l'exemple OTAWebUpdater fait des choses autour de mDNS, ce qui n'est pas le cas de BasicOTA.

Je viens d'essayer l'exemple OTA. J'ai suivi ce tuto qui dit qu'il faut python 2.7. Je n'ai que python 3.8.2.

Bonne nouvelle: ça marche du premier coup!

Mauvaise nouvelle: moi aussi, j'utilise linux...

Pourquoi j'aurais viré le 2.7:

Mauvaise nouvelle: moi aussi, j'utilise linux...

:sunglasses:

Bonsoir,

Merci pour vos réponses.
Je viens d'essayer sur un mac. Même pas besoin d'installer python cela fonctionne.
J'avais déjà dit que j'arrêterais Windows :smiley:

Merci pour votre aide