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.
