moved ota into separate files

This commit is contained in:
interfisch 2022-07-25 13:16:07 +02:00
parent 799f21ab56
commit 285f138485
3 changed files with 123 additions and 115 deletions

View File

@ -1,50 +1,6 @@
#include <Arduino.h>
#include <WiFi.h>
#include <ArduinoOTA.h>
#include "simpleota.h"
#define OTA_WIFI_SSID "Chaos-West temp alternative"
#define OTA_WIFI_PASSWORD ""
#define OTA_WAIT_TIMEOUT 1000 // in 0.1s increments -> 10s
void normal_setup();
void checkOTA();
bool initOTA();
enum OTA_MODE {
NONE,
SEARCHING,
WAITING,
UPDATING
} otaMode;
uint16_t otaWaitCounter;
void checkOTA() {
otaMode = SEARCHING;
Serial.println("looking for OTA WiFi...");
// WARNING: to allow ESP-NOW work, this WiFi must be on Channel 1
if (OTA_WIFI_PASSWORD!="") {
WiFi.begin(OTA_WIFI_SSID, OTA_WIFI_PASSWORD); //wifi with password
}else{
WiFi.begin(OTA_WIFI_SSID); //open wifi
}
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("no OTA WiFi found, proceed normal boot");
otaMode = NONE;
WiFi.disconnect();
return;
}
otaMode = WAITING;
}
void normal_setup() {
}
void setup() {
Serial.begin(115200);
@ -60,78 +16,9 @@ void setup() {
}
bool initOTA() {
if (otaMode == WAITING) {
Serial.println("connected to OTA WiFi. Waiting for firmware...");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
ArduinoOTA
.onStart([]() {
otaMode = UPDATING;
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);
})
.onEnd([]() {
Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
int prog = (progress / (total / 100));
Serial.printf("Progress: %u%%\r", prog);
})
.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();
return 1; //ota ok
}else{
return 0; //not using ota
}
}
bool ota_loop() {
if (otaMode != NONE) {
ArduinoOTA.handle();
if(otaMode == WAITING) {
static long mil = millis();
static boolean huehott = false;
if(millis() - mil > 100) {
huehott = !huehott;
mil = millis();
otaWaitCounter++;
if(otaWaitCounter >= OTA_WAIT_TIMEOUT) {
Serial.println("OTA wait timeout, proceeding normal boot");
otaMode = NONE;
normal_setup();
}
}
}
return true;
} else {
return false;
}
}
void loop() {
if (ota_loop()) {
if (loopOTA()) {
return; //just wait for ota
}

View File

@ -1 +1,98 @@
#include "simpleota.h"
uint16_t otaWaitCounter;
OTA_MODE otaMode;
void checkOTA() {
otaMode = SEARCHING;
Serial.println("looking for OTA WiFi...");
// WARNING: to allow ESP-NOW work, this WiFi must be on Channel 1
if (OTA_WIFI_PASSWORD!="") {
WiFi.begin(OTA_WIFI_SSID, OTA_WIFI_PASSWORD); //wifi with password
}else{
WiFi.begin(OTA_WIFI_SSID); //open wifi
}
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("no OTA WiFi found, proceed normal boot");
otaMode = NONE;
WiFi.disconnect();
return;
}
otaMode = WAITING;
}
bool initOTA() {
if (otaMode == WAITING) {
Serial.println("connected to OTA WiFi. Waiting for firmware...");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
ArduinoOTA
.onStart([]() {
otaMode = UPDATING;
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);
})
.onEnd([]() {
Serial.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
int prog = (progress / (total / 100));
Serial.printf("Progress: %u%%\r", prog);
})
.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();
return 1; //ota ok
}else{
return 0; //not using ota
}
}
bool loopOTA() {
if (otaMode != NONE) {
ArduinoOTA.handle();
if(otaMode == WAITING) {
static long mil = millis();
static boolean huehott = false;
if(millis() - mil > 100) {
huehott = !huehott;
mil = millis();
otaWaitCounter++;
if(otaWaitCounter >= OTA_WAIT_TIMEOUT) {
Serial.println("OTA wait timeout, proceeding normal boot");
otaMode = NONE;
}
}
}
return true;
} else {
return false;
}
}

View File

@ -1,4 +1,28 @@
#ifndef simpleota_h
#define simpleota_h
#include <Arduino.h>
#include <WiFi.h>
#include <ArduinoOTA.h>
#define OTA_WIFI_SSID "Chaos-West temp alternative"
#define OTA_WIFI_PASSWORD ""
#define OTA_WAIT_TIMEOUT 1000 // in 0.1s increments -> 10s
void checkOTA();
bool initOTA();
bool loopOTA();
enum OTA_MODE {
NONE,
SEARCHING,
WAITING,
UPDATING
};
extern OTA_MODE otaMode;
extern uint16_t otaWaitCounter;
#endif