Um die Programmierung von IoT-Devices auch ohne Leitungsverbindung zu ermöglichen, kann der WMOS Mikrocontroller mit kleiner Anstrenung auch over the air (WIFI) programmiert werden.
Zur Realisierung der OTA-Programmierung muss das Programm einmalig mit Code ergänzt werden, der im laufenden Betrieb die Programmierung über die WIFI-Verbindung ermöglicht.
#include <ESP8266WiFi.h> #include <ArduinoOTA.h> #include <PubSubClient.h> #include <DHT.h> [...] void setupWifi() { [...] // default port is 8266 // ArduinoOTA.setPort(8266); //default hostname is esp8266-[ChipID] ArduinoOTA.setHostname(HOST_NAME.c_str()); // add password for authentication // ArduinoOTA.setPassword((const char *)"123"); ArduinoOTA.onStart([]() { Serial.println("Start"); }); ArduinoOTA.onEnd([]() { Serial.println("End"); }); 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(); } // initWIFI void loop() { ArduinoOTA.handle(); [...] }
Nach der Programmierung des Mikrocontrollers über die USB-Leitung mit oben angeführten Programm, wird in der Arduino-Entwicklungsumgebung automatisch ein Netzwerk-Programmierport angeboten.
Die folgende Programmierung kann dann bereits OTA erfolgen.