ota.cpp: stabilize and speedup wifi login

This commit is contained in:
cyberman54 2021-03-23 23:09:52 +01:00
parent d43657be23
commit 2854f2dd13

View File

@ -21,7 +21,8 @@
using namespace std;
const BintrayClient paxexpress(PAXEXPRESS_USER, PAXEXPRESS_REPO, PAXEXPRESS_PACKAGE);
const BintrayClient paxexpress(PAXEXPRESS_USER, PAXEXPRESS_REPO,
PAXEXPRESS_PACKAGE);
// usage of paxexpress: see https://github.com/paxexpress/docs
// Connection port (HTTPS)
@ -41,6 +42,15 @@ inline String getHeaderValue(String header, String headerName) {
void start_ota_update() {
uint8_t mac[6];
char clientId[20];
// hash 6 byte MAC to 4 byte hash
esp_eth_get_mac(mac);
const uint32_t hashedmac = myhash((const char *)mac, 6);
snprintf(clientId, 20, "paxcounter_%08x", hashedmac);
const char *host = clientId;
switch_LED(LED_ON);
// init display
@ -65,8 +75,28 @@ void start_ota_update() {
ESP_LOGI(TAG, "Starting Wifi OTA update");
ota_display(1, "**", WIFI_SSID);
WiFi.disconnect(true);
WiFi.config(INADDR_NONE, INADDR_NONE,
INADDR_NONE); // call is only a workaround for bug in WiFi class
// see https://github.com/espressif/arduino-esp32/issues/806
WiFi.setHostname(host);
WiFi.mode(WIFI_STA);
WiFi.begin();
// Connect to WiFi network
// workaround applied here to bypass WIFI_AUTH failure
// see https://github.com/espressif/arduino-esp32/issues/2501
// 1st try
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() == WL_DISCONNECTED) {
delay(500);
}
// 2nd try
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(WIFI_SSID, WIFI_PASS);
delay(500);
}
uint8_t i = WIFI_MAX_TRY;
int ret = 1; // 0 = finished, 1 = retry, -1 = abort
@ -74,7 +104,6 @@ void start_ota_update() {
while (i--) {
ESP_LOGI(TAG, "Trying to connect to %s, attempt %u of %u", WIFI_SSID,
WIFI_MAX_TRY - i, WIFI_MAX_TRY);
delay(10000); // wait for stable connect
if (WiFi.status() == WL_CONNECTED) {
// we now have wifi connection and try to do an OTA over wifi update
ESP_LOGI(TAG, "Connected to %s", WIFI_SSID);
@ -89,6 +118,7 @@ void start_ota_update() {
if (WiFi.status() == WL_CONNECTED)
goto end; // OTA update finished or OTA max attemps reached
}
delay(10000); // wait for stable connect
WiFi.reconnect();
}