OTA - Over the Air - ESP Programmieren über WLAN

Hast du auch schon einmal ein Projekt fertiggestellt und erst viel später festgestellt, das ein Fehler im Programm ist oder eine Funktion ergänzt werden könnte?

Dann heißt es: alles wieder auseinanderbauen, Programmieradapter anschließen, programmieren, wieder zusammenbauen und hoffen diesmal fehlerfrei programmiert zu haben oder die neue Funktion läuft problemlos.

Findige Programmierer haben für so einen Fall ein Programm geschrieben, das wir für die ESP-Module (ESP8266 und ESP32) nutzen können und mit dem wir die integrierte WLAN-Schnittstelle zum Programmieren benutzen kann. Das Programm nennt sich ArduinoOTA.

Um die OTA Funktion nutzen zu können, müssen wir zuerst eine Bibliothek einbinden, dazu gehen wir in die Bibliotheksverwaltung unter Sketch > Bibliothek einbinden > Bibliotheken verwalten

In der Bibliotheksverwaltung geben wir oben rechts "OTA" als Suchbegriff ein, wählen in der Liste ArduinoOTA aus und installieren das Paket. Nach kurzer Zeit erscheint INSTALLED wenn alles funktioniert hat.

 

Als nächsten Schritt benötigen wir für die Programmierung noch Python. OTA schreibt in diesem Fall die Version 2.7 vor. Keinesfalls die 3.x verwenden, diese funktioniert, zumindest aktuell, nicht.

Python kann man sich auf python.org herunterladen. Hier der Link dazu:

https://www.python.org/downloads/

Die Software steht auch für MAC und Linux zur Verfügung.

Nach dem herunterladen installieren wir die Software. Wir klicken uns durch die Software und müssen, ganz wichtig, bei Costomize Python "Add python.exe to Path" aktivieren, damit dies auch mit installiert wird.

Anschließend muss der Rechner neu gestartet werden, weil es sonst in der Arduino-Software zu Fehler kommt (Python nicht gefunden).

Nachdem nun alles soweit vorbereitet ist, können wir ein ESP8266-01S mit OTA flashen und benutzen.

Wir starten die Arduino IDE und gehen unter Datei > Beispiele > ArduinoOTA > BasicOTA

Gleich am Anfang müssen wir unsere WLAN-Informationen eintragen:

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

Diesen ganzen Code müssen wir in Zukunft mit in unser Programm einbauen und ganz wichtig die Zeile ArduinoOTA.handle(); nicht enfernen. Sollte das passiert sein, muss der nächste Programmiervorgang wieder mit Programmer über die Serielle Schnittstelle geschehen.

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

Optional können wir auch dem Gerät einen Namen geben:

  ArduinoOTA.setHostname("myesp8266");

 Oder auch ein Passwort setzen:

  ArduinoOTA.setPassword("admin");

 Diese beiden Zeilen sind unter void setup auskommentiert.

 

Wenn nun das programmieren über den alten Weg abgeschlossen ist und der ESP8266 mit dem WLAN verbunden ist, sehen wir in der Arduino-Software unter Ports einen neuen Eintrag (evtl. ist ein Neustart der Arduino-Software notwendig):

 

Unter der Menügruppe Netzwerk-Schnittstellen ist ein ESP8266-ac96ae at 192.168.31.117 zu finden. Der kryptische Name "ac96ae" ist ein Teil MAC-Adresse des Moduls. Dieses Modul wählen wir nun aus.

Jetzt kann die Arduino-Software genauso wie bisher genutzt werden, nur das die Programmierung nun nicht mehr über die Serielle COM-Schnittstelle geschieht, sondern direkt über das Netzwerk. Das heißt aber auch, das wir nun versehentlich aus der Ferne ein falsches Modul programmieren können! Deswegen sollte man eindeutige Namen unter dem Hostname und evtl. ein sicheres Passwort verwenden.

Wir wünschen dir viel Spass beim Programmieren und gutes gelingen bei deinen Projekten.

 

10 Kommentare

Deepthroat

Deepthroat

Danke – Perfekte Anleitung – Hat alles inkl. PW funktioniert! Ich brauchte nur 5 Minuten um zu kapieren, das ich keine Verbindung bekomme weil die Stromversorgung übers USB-Kabel und nicht WLAN kommt :-)
Wenn ich das jetzt in meine restliche SW integriert bekomme fehlt mir nur noch eins: Ich möchte die IP-Adressen der CPUs an Hand der MAC-Adressen fest setzen – Und solange der Speicherplatz reicht auch die Funktionen der SW. Dann habe ich nur einen Quelltext für ca. 10 CPUs…

Dilly

Dilly

Hi, klappt super, aaber:
1.
Die IDE bekommt das Gerät nur angezeigt, wenn es neu gestartet wird WÄHREND die IDE läuft.
Anders gesagt, ein bereits laufendes Gerät muss resettet werden während die IDE gestartet ist.
OK, nervig, aber damit kann ich leben.
2.
ich habe hier viele Geräte am Start und in der IDE wird immer nur EIN Gerät angezeigt.
Um ein anderes zu bekommen müsste ich alle Geräte außer dem gewünschten Gerät abschalten!
Das geht nicht wirklich, da ich die Hausautomation damit steuere und im ganzen Haus Dutzende verteilt sind.
Mache ich was falsch? Oder ist das ein Bug? Oder ein Feature?

Devid

Devid

Danke für die Verständliche Anleitung. Hat auf Anhieb funktioniert :)
Ich finde der Upload ist sogar um einiges schneller als über USB Kabel.

Thomas

Thomas

Danke für die leicht verständlich Anleitung. Hat gut funktioniert.

Es scheint aber so, dass die Netzwerk-Schnittstelle nach dem Neustart der Arduino IDE “vergessen” wird bzw. der Sketch sich nicht mehr korrekt zu erkennen gibt. D.h. spätere Änderungen sind nur möglich, wenn man die Hardware neu startet.

wuppi

wuppi

Hi,
bei mir läuft das ganze jetzt stabil.
Ich habe folgendes benutzt:
1. Arduino SW 1.8.5, bei den neueren Versionen scheint es Probleme zu geben.
2. Python 2.7.15
3. ESP Boardverwalter 2.6.3
4. Flash Frequency 26MHz (default sind 40MHz; damit kam es zu unkontrollierten Aussetzern beim WLan und Abstürzen des OTA)

Karsten

Karsten

Jaaa, wirklich sehr interessant. Bei mir erscheint leider noch nicht einmal der Port. Habe schon (fast) alles versucht, neueste Arduino IDE 1.8.10, anderer Laptop, andere Windows-Version, anderen ESP. Bin leicht am Verzweifeln. Und nein, es ist nicht Python 3 installiert, damit soll es ja auch nicht funktionieren. PC und ESP zigmal neu gestartet. Jemand noch einen Tipp ?? Danke !

Reinhard

Reinhard

Leider funktioniert das bei mir nur soweit, dass der Port unter den Werkzeugen erscheint, die Nodemcu ist im WLAN Netz angemeldet, aber beim Versuch neu zu flshen kommt immer nur (in der IDE) : No response from device.

Bekommt man hier vllt. doch mal Hilfe???

Andreas

Andreas

Hallo,
das mit dem Netzwerkport funktioniert jetzt, warum auch immer.
Jetzt muss ja der Serielle Monitor noch über Telnet abgeholt werden. Mit Putty oder Kitty bekommen ich keine Verbindung zustande. Irgendie ist kein Port am ESP geöffnet. Wofür ist im Sketch der “ArduinoOTA.setPort(8266)” ?
Sehe keine Auswirkung auf dessen Änderung der Ports. Hochladen geht auch ohne und für Telnet ist anscheinend kein Port geöffnet. Hab auch mit einem Portscanner durchsucht ohne Erfolg. Der Standardport für Telnet, 23 , klappt auch nicht.
In Putty wir ja nur Telnet, IP Adresse und Port vorgegeben, klappt trotzdem nicht. Muss das Passwort noch irgendwo hin?
Wer kann da helfen?

Andreas

Andreas

Hi, kein Tip?
bekomme im Monitor nur die Meldung
“still running since xxx seconds” alle 5s.
Was muss ich tun um den Netzwerkport zu sehen?

Andreas

Andreas

Hi, sehr interressanter Sketch.
Bei mir fehlt aber unter “Port” der Netzwerkport. Sehe nur COMx
Woran kann es liegen? Der ESP ist im Wlan angemeldet.
Als Python habe ich das Modul Windows x86 MSI installer 2.7.15 gewählt.
Hab Win7 64b.
Muss ich mit Python noch was machen? Arduino SW 1.8.5 &Rechner ist neugestartet.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert