Programmazione via OTA di un ESP con NodeMCU

Salve

Sto provando a fare un programma con la possibilità di scaricarlo via OTA, ho programmato l'esempio BasicOTA via seriale e poi sto cercando di riprogrammarlo via rete.

Ho messo tutte le librerie ed ho provato una serie di correzioni relative all'errore di python3 che ho trovato in diversi forum in merito all'errore qui sotto.

Ma niente non ci riesco, la scheda la vedo come porta, ma adesso non riesco neanche a ricompilare il programma.

Non ci salto più fuori!!

cosa mi consigliate di fare??

Grazie!

Nota:
ho porvato sia su PC con windows10 sia su Mac, ma ho gli stessi probemi.

Qui metto l'errore:

Più di una libreria trovata per "ArduinoOTA.h"
env: python3: No such file or directory
Usata: /Users/Mecco/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.1/libraries/ArduinoOTA
Non usata: /Users/Mecco/Documents/Arduino/libraries/ArduinoOTA
exit status 127
Errore durante la compilazione per la scheda Generic ESP8266 Module.

e qui vi metto il codice del programma.... casomai ci fosse un motivo di codice:

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com
  Arduino IDE example: Examples > Arduino OTA > BasicOTA.ino
*********/

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

// Replace with your network credentials
const char* ssid = "GGhelfa";
const char* Password = "Supergino";
IPAddress ip(192, 168, 1, 25);


unsigned long TT=0;
bool BB=true;

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.config(ip);
  
  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("myesp8266");

  // 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());
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  ArduinoOTA.handle();

  if (millis()>TT) {
    TT=millis() + 300;
    BB= !BB;
    digitalWrite(LED_BUILTIN, BB);
    
  }
  
  
}

Beh ... questa riga dice tutto:

env: python3: No such file or directory

... è capitato anche a me che lavoro su macOS ... il link simbolico che si trova in /packages/esp8266/tools/python3/3.7.2-post1/python3 NON punta all'eseguibile di python3 che è installato sulla tua macchina e quindi ... NON lo trova e senza ... NON compili.

Prova anche scaricando l'ultima versione dell'IDE (1.8.13) e l'ultima versione del "core" ESP8266 ... ::slight_smile:

Poi hai anche un problemino di librerie duplicate, ma intato risolvi il problema del link simbolico.

Guglielmo

Se la cosa dovesse capitare a qualche d'un altro, una possibile soluzione è:

  1. cercare dove sulla propria macchina è installato python3 ... da terminale dare: which python3 e ricordare il percorso che si ottiene.

  2. spostarsi con il comando "cd" nella cartella del package relativo all'esp8266 con nome simile a: "esp8266/tools/python3/3.7.2-post1/" e cancellare il file "python3".

  3. creare un nuovo link simbolico che punta al persorso precedentemente trovato. Da terminale dare: ln -s percorso_trovato_in_precedenza python3 ... verrà creato un nuovo file python3 che punta al percorso esatto.

A me ha risolto.

Guglielmo