NODEMCU und OTA

Ich hänge (mal wieder) am OTA. Irgendwie komme ich nicht weiter. Ich habe mal aus den Beispielen ArduinoOTA das BasicOTA vorgenommen. Sieht so aus:

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

#ifndef STASSID
#define STASSID "meine SSID"
#define STAPSK  "mein Password"
#endif

const char* ssid = STASSID;
const char* password = STAPSK;

void setup() {
  Serial.begin(74880);
  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("myesp8266");

  // 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);
  });
  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();
}

Über COM 7 hochgeladen verbindet es sich ohne Probleme mit meinem Server und hat die IP 192.168.0.27. Nachdem im Sketch ArduinoOTA.setHostname("myesp8266"); steht müsste es sich ja auch so am Router eintragen. Aber wenn ich in die Fritzbox reinschaue steht dort ESP-D6BC4A mit der IP 192.168.0.27.
Auch unter Port in der IDE 1.8.8 steht nichts von der 192.168.0.27, ein anderer, funktionierender ESP steht drin (der .0.41). Mehrere Neustarts haben nichts geändert.
Was kann da falsch sein?

Also meine OTA laufen auch über die IP. Den hostname habe ich nirgendwo gesehen.

Gruß Tommy

Bei meinem Sketch für den Solarlogger sehe ja den Name und die ip, nur beim Beispiel geht es nicht und ich sehe nicht warum...
Eigentlich ist mein Ziel dass ich OTA im STA-mode und AP-Mode machen kann. Aber wenn das eine schon nicht richtig geht... :confused: :confused:

Also obiges Beispiel zeigt bei mir nach Neustart der IDE myesp8266 at 192.168.xx.yy an.
In der Box wird aber bei mir immer der Name mit ESP-letzte 3 Stellen der MAC angezeigt. Auch wenn ich den WiFi-hostname setze.

Gruß Tommy

Edit: Versionen: IDE 1.8.5 + ESP8266 2.4.2

Hallo,
so, jetzt sehe ich die ganze Sache etwas klarer: Ich habe 2 Sketche mit OTA die laufen. Und bei beiden läuft ein Webserver im STA-Mode.

WiFi.mode(WIFI_STA);
WiFi.hostname("BattMon");
WiFi.begin(MYSSID, PASSWORD);

Und diesen WIFI Hostname zeigt logischerweise die Fritz-Box und interessanterweise auch die IDE an und das hat mich etwas auf die falsche Spur gesetzt.

@Tommy: Hast du OTA auch schon im AP-Netz gemacht? Das ist ja eigentlich mein Ziel....

Nein, habe ich noch nicht. Meine Box zeigt den Hostnamen nicht an. Bei OTA wird er aber auch schon angezeigt, wenn er nur an OTA gesetzt ist und nicht an WiFi.

Gruß Tommy

Hallo nochmals,

jetzt klappt es relativ gut, ab und zu muss ich wohl die IDE neu laden oder auch den Rechner (WIN10) neu booten damit Name und IP Bei den Ports auftauchen.
Aber es geht nicht im AP-Mode.

WiFi.mode(WIFI_AP);
Serial.print(WiFi.softAP("BASIC_OTA_1_AP") ? " Ready, IP " : " Failed! ");
Serial.println(WiFi.softAPIP().toString());

Das Netzt ist aktiv, ich kann mich damit verbinden, aber unter Port in der IDE taucht nichts auf. Hat da doch noch jemand eine Idee? Ich habe eine NODEMCU am laufen, die normalerweise kein WLAN sieht, und da wäre es absolut praktisch wenn da OTA auch ginge.

Das Problem scheint erst ganz frisch gelöst worden zu sein.

Gruß Tommy

Hallo Tommy,

dann sitzt das Problem mal nicht vor meinem Rechner :slight_smile: .

Aber... kann ich das Problem jetzt hier für mich lösen oder muss ich da warten bis die ESP8266mDNS.h geändert wird? Ich suche die gerade hier bei mir - wo steckt die denn überhaupt ? :o :o

Nachtrag:
Im Original-Sketch werden diese Libs verwendet:

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

Wenn ich diese 3 auskommentiere geht OTA (im STA-Mode) trotzdem. Was machen denn diese Libs ?

noch einen Nachtrag:
seit ein paar Tagen kommt beim Start der IDE 1.8.8 im unteren Teil die Fehlermeldung
Fehler beim Herunterladen von http://arduino.esp8266.com/stable/package_esp8266com_index.json
Kann das auch damit zusammenhängen? Die Meldung ist nach dem ersten kompilieren weg und kommt dann erst beim nächsten Start wieder.

http://arduino.esp8266.com/stable/package_esp8266com_index.json macht einen redirect auf http://arduino.esp8266.com/versions/2.5.0/package_esp8266com_index.json.

Ich weiß nicht, ob die IDE 1.8.8 da mitkommt. In der 1.8.5 gibt es bei der "stable"-URL keine Fehlermeldung.
Das sagt aber nur, dass die IDE nicht nachschauen kann, ob es neue Versionen gibt.

Gruß Tommy

Edit: Die 1.8.5 bietet mir nach einiger Zeit auch die Aktualisierung auf 2.5.0 an

Tommy56:
Das Problem scheint erst ganz frisch gelöst worden zu sein.

Gruß Tommy

@Tommy,

:smiley: :smiley: Alles gut, klappt. Ich habe die LEAmDNS_Control.cpp gefunden und geändert und das war es dann. Danke für den Tipp.
Ich verstehe nur nicht (ganz), wie die LEAmDNS_Control.cpp eigentlich den Weg in meinen Sketch finden! Und wird dieser Fehler wohl über ein Update beseitigt?
Kannst du mir da noch was dazu sagen?

Nö, leider nicht. Ich bin nur über Google auf die Meldung gestoßen.

Gruß Tommy

Hallo,

uk1408:
Ich verstehe nur nicht (ganz), wie die LEAmDNS_Control.cpp eigentlich den Weg in meinen Sketch finden! Und wird dieser Fehler wohl über ein Update beseitigt?
Kannst du mir da noch was dazu sagen?

ohne jetzt nachzusehen: sie dürfte Bestandteil des SDK/Arduino Paketes sein und wird mit Deinem Projekt eben mitcompiliert wenn sie gebraucht wird.
Die Korrektur ist zumindest bei github schon im aktuellen Build gelandet (kann man dort nachverfolgern, wenn man unbedingt will...). In der nächsten stable des ESP9266-Packs für den Arduino wird es also gefixt sein.
In den kommenden Betas und im aktuellen Build von github entsprechend schneller.

Ich selbst nutze aber nur die stable-Versionen, man kämpft sonst speziell bei den ESPs gern mit neuen Bugs.

Gruß aus Berlin
Michael