From ee77bb4e78f198500b4ddd49250152e3c4952131 Mon Sep 17 00:00:00 2001 From: MiroZ Date: Mon, 22 Jul 2024 13:52:16 -0700 Subject: [PATCH] mqtt client id is now a mac address, fixing issue of not being able to have more than one tag connected at the time. Logo and html is updated. Tag will now correctly go into and stay in provision for 2 minutes before reset if it wasn't able to connect to wifi --- html/logo.png | Bin 63909 -> 26338 bytes html/provision.html | 6 +++--- main/App.cpp | 2 ++ main/MqttService.cpp | 15 +++++++++------ main/ProvisionSoftAP.cpp | 17 +++++++++++++++++ main/ProvisionSoftAP.h | 6 ++++++ main/Wifi.cpp | 12 ++++++++++++ main/Wifi.h | 3 +++ 8 files changed, 52 insertions(+), 9 deletions(-) diff --git a/html/logo.png b/html/logo.png index 56687b424477e8a7ac01dc287cea1345fda4d348..e88cb7d13980a209525125a63ced421167bfd259 100755 GIT binary patch delta 11557 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%0A~6KKkWVZb@@UX` ipgpi`MDF|l2LRKI5)pvg;Xd#H0000 -

Timmah's special WiFi configuration and stuff

+

Welcome to WellHub Wifi intialization


-

Timmah has ben successfully configured and it is ready for normal use.
You can now close this window.

+

WellHub has ben successfully configured and it is ready for normal use.
You can now close this window.

-

Timmah was not able to connect to selected WiFi. Please check the spelling and password.

+

WellHub was not able to connect to selected WiFi. Please check the spelling and password.

Please wait, scanning local WiFi...

diff --git a/main/App.cpp b/main/App.cpp index efeb3dd..6fcf808 100644 --- a/main/App.cpp +++ b/main/App.cpp @@ -77,6 +77,8 @@ void App::init() needs_provision = false; } + else + m_wifi->pause(true); } if(needs_provision) diff --git a/main/MqttService.cpp b/main/MqttService.cpp index 8aa7e0b..5bd328c 100644 --- a/main/MqttService.cpp +++ b/main/MqttService.cpp @@ -46,18 +46,21 @@ void MqttService::task() uint8_t len = 0; if(m_app_if.getBuffer()->getBlock(buffer, len)) { + char top[64]; + uint8_t mac[6]; + WiFi.macAddress(mac); + while (!m_mqtt_client->connected()) { + sprintf(top, "wh_%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + ESP_LOGI(TAG, "connecting to mqtt broker, dev id '%s'...", SETTINGS.mqtt.device_id); - if (m_mqtt_client->connect("Esp32 client", SETTINGS.mqtt.device_id, NULL)) + if (m_mqtt_client->connect(top, SETTINGS.mqtt.device_id, NULL)) { ESP_LOGI(TAG, "connected"); - uint8_t mac[6]; - WiFi.macAddress(mac); - - char top[64]; - + sprintf(top, "/%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + ESP_LOGI(TAG, "Subscribing to %s", top); if(m_mqtt_client->subscribe(top)) ESP_LOGI(TAG, "subscribed"); diff --git a/main/ProvisionSoftAP.cpp b/main/ProvisionSoftAP.cpp index 1d95db8..0921085 100755 --- a/main/ProvisionSoftAP.cpp +++ b/main/ProvisionSoftAP.cpp @@ -42,10 +42,12 @@ void ProvisionSoftAP::wifiEvent(arduino_event_id_t event, arduino_event_info_t i switch (event) { case ARDUINO_EVENT_WIFI_AP_STACONNECTED: + esp_timer_stop(m_timer); ESP_LOGI(TAG, "station " MACSTR " joined, AID=%d", MAC2STR(info.wifi_ap_staconnected.mac), info.wifi_ap_staconnected.aid); break; case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED: + ESP_ERROR_CHECK(esp_timer_start_periodic(m_timer, INACTIVE_TIMER)); ESP_LOGI(TAG, "station " MACSTR " left", MAC2STR(info.wifi_ap_stadisconnected.mac)); m_webSocket->closeAll(); break; @@ -175,12 +177,27 @@ void ProvisionSoftAP::start(const char * ssid, const char * password) } } +void ProvisionSoftAP::timerCallback(void* arg) +{ + esp_restart(); +} + void ProvisionSoftAP::start() { uint8_t mac[6]; WiFi.macAddress(mac); char ssid[33]; + esp_timer_create_args_t timer; + timer.arg = this; + timer.callback = &timerCallback; + timer.dispatch_method = ESP_TIMER_TASK; + timer.skip_unhandled_events = true; + timer.name = "provision reset timer"; + + ESP_ERROR_CHECK(esp_timer_create(&timer, &m_timer)); + ESP_ERROR_CHECK(esp_timer_start_periodic(m_timer, INACTIVE_TIMER)); // 5 min + sprintf(ssid, "Wellhub-%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); start(ssid, "12345678"); } diff --git a/main/ProvisionSoftAP.h b/main/ProvisionSoftAP.h index 20d7313..6e0d822 100755 --- a/main/ProvisionSoftAP.h +++ b/main/ProvisionSoftAP.h @@ -11,9 +11,12 @@ #include #include #include +#include #include "ReaderWriter.h" #include "Settings.h" +#define INACTIVE_TIMER (2*60*1000*1000) + class ProvisionSoftAP { private: @@ -26,6 +29,9 @@ private: ReaderWriter * m_rwriter = nullptr; + esp_timer_handle_t m_timer; + static void timerCallback(void* arg); + private: char m_ssid[32] = {0}; char m_pwd[32] = {0}; diff --git a/main/Wifi.cpp b/main/Wifi.cpp index c9f2ea6..2eb037f 100644 --- a/main/Wifi.cpp +++ b/main/Wifi.cpp @@ -64,11 +64,23 @@ void Wifi::task() { m_wifi_status = WIFI_STATUS::PENDING; m_wifi_status = startConnecting(); + + delay(500); + + while(m_pause) + { + delay(100); + } } delay(15000); } } +void Wifi::pause(bool pause) +{ + m_pause = pause; +} + /// @brief Connect to provisioned wifi /// @param index index of wifi in settings /// @return WIFI_STATUS::CONNECTED/NOT_CONENCTED connected diff --git a/main/Wifi.h b/main/Wifi.h index b9f04ec..aabc8c1 100644 --- a/main/Wifi.h +++ b/main/Wifi.h @@ -36,6 +36,7 @@ protected: WIFI_STATUS startConnecting(); WIFI_STATUS connectTo(int index); int scan(); + bool m_pause = false; public: Wifi(); @@ -45,6 +46,8 @@ protected: public: int start(); + void pause(bool pause); + WIFI_STATUS status() { return m_wifi_status; } WIFI_STATUS waitForConnection(); };