Note: the logo is only in my local fork - not in this PR. This PR has the default ESpConnect logo of course.
Here is the code rewrite of ESPConnect I did and which I am using.
Supports staying in AP Mode
Display WiFi signal
Supports Async mode (loop) and blocking mode (like old behaviour)
ESP32 only - I wont' even work on a 8266 variant - don't ask me ;-)
ESPConnect network stack can be reconfigured live with ESPConnect.end() followed by ESPConnect.begin()
Debug
-D ESPCONNECT_DEBUG
Usage
Add: -D ESPCONNECT_V2
See API doc for more info.
ESPConnect.setAutoRestart(false); // true to switch back to old behaviour
ESPConnect.setBlocking(false); // true to switch back to old behaviour
ESPConnect.setCaptivePortalTimeout(Config.getInt(KEY_CAPTURE_PORTAL_TIMEOUT));
ESPConnect.setWiFiConnectTimeout(Config.getInt(KEY_WIFI_CONNECTION_TIMEOUT));
// using this being() method will use auto-load and auto-save internal code for apMode flag and wifi creds
ESPConnect.begin(&Mycila::HTTPd.server,
Config.get(KEY_HOSTNAME),
AppInfo.name + "-" + AppInfo.id,
Config.get(KEY_ADMIN_PASSWORD));
// using this being() method WON'T use auto-load and auto-save internal code for apMode flag and wifi creds: up to the user to handle saving (that's what I am using)
ESPConnect.begin(&HTTPd.server,
Config.get(KEY_HOSTNAME),
AppInfo.name + "-" + AppInfo.id,
Config.get(KEY_ADMIN_PASSWORD),
{Config.get(KEY_WIFI_SSID), Config.get(KEY_WIFI_PASSWORD), Mycila::Config.getBool(KEY_AP_MODE_ENABLE)});
If using aync (non-blocking) mode, you need to call loop()
Events
You can listen to events like that. If not using auto restart, you need to listen to events to decide what to fo when reaching a final state!
Example:
ESPConnect.listen([&](ESPConnectState previous, ESPConnectState state) {
Mycila::Logger.debug(TAG, "NetworkState: %s => %s", ESPConnect.getStateName(previous), ESPConnect.getStateName(state));
switch (state) {
case ESPConnectState::STA_CONNECTED:
Mycila::Logger.info(TAG, "Connected to WiFi %s with IP address %s", ESPConnect.getWiFiSSID().c_str(), ESPConnect.getIPAddress().toString().c_str());
break;
case ESPConnectState::AP_CONNECTED:
Mycila::Logger.info(TAG, "Access Point %s started with IP address %s", ESPConnect.getWiFiSSID().c_str(), ESPConnect.getIPAddress().toString().c_str());
break;
case ESPConnectState::STA_DISCONNECTED:
Mycila::Logger.warn(TAG, "Disconnected from WiFi %s", ESPConnect.getWiFiSSIDConfigured().c_str());
_events.push(AppEvent::NETWORK_DISCONNECTED);
break;
case ESPConnectState::NETWORK_DISABLED:
Mycila::Logger.info(TAG, "Disable Network...");
break;
case ESPConnectState::STA_CONNECTING:
Mycila::Logger.info(TAG, "Connecting to WiFi %s (timeout: %u seconds)...", ESPConnect.getWiFiSSIDConfigured().c_str(), ESPConnect.getWiFiConnectTimeout());
break;
case ESPConnectState::AP_CONNECTING:
Mycila::Logger.info(TAG, "Starting Access Point %s...", ESPConnect.getAccessPointSSID().c_str());
break;
case ESPConnectState::PORTAL_STARTING:
Mycila::Logger.info(TAG, "Starting Captive Portal %s for %u seconds...", ESPConnect.getAccessPointSSID().c_str(), ESPConnect.getCaptivePortalTimeout());
break;
case ESPConnectState::PORTAL_STARTED:
Mycila::Logger.info(TAG, "Captive Portal started at %s with IP address %s", ESPConnect.getWiFiSSID().c_str(), ESPConnect.getIPAddress().toString().c_str());
break;
case ESPConnectState::PORTAL_COMPLETE: {
bool ap = ESPConnect.isAPMode();
if (ap) {
Mycila::Logger.info(TAG, "Captive Portal: Access Point configured");
// SAVE CONFIG
Mycila::Config.setBool(KEY_AP_MODE_ENABLE, true);
} else {
Mycila::Logger.info(TAG, "Captive Portal: WiFi configured");
// SAVE CONFIG
Mycila::Config.setBool(KEY_AP_MODE_ENABLE, false);
Mycila::Config.set(KEY_WIFI_SSID, ESPConnect.getWiFiSSIDConfigured());
Mycila::Config.set(KEY_WIFI_PASSWORD, ESPConnect.getWiFiPassword());
}
// TRIGGER ESP RESTART
_restartThrottle.setEnable(true);
break;
}
case ESPConnectState::PORTAL_TIMEOUT:
Mycila::Logger.warn(TAG, "Captive Portal: timed out.");
// TRIGGER ESP RESTART
_restartThrottle.setEnable(true);
break;
case ESPConnectState::STA_TIMEOUT:
Mycila::Logger.error(TAG, "Unable to connect to SSID: %s", ESPConnect.getWiFiSSIDConfigured().c_str());
break;
case ESPConnectState::STA_RECONNECTING:
Mycila::Logger.info(TAG, "Trying to reconnect to WiFi %s", ESPConnect.getWiFiSSIDConfigured().c_str());
break;
default:
break;
}
});
Note: the logo is only in my local fork - not in this PR. This PR has the default ESpConnect logo of course.
Here is the code rewrite of ESPConnect I did and which I am using.
ESPConnect.end()
followed byESPConnect.begin()
Debug
-D ESPCONNECT_DEBUG
Usage
Add:
-D ESPCONNECT_V2
See API doc for more info.
If using aync (non-blocking) mode, you need to call
loop()
Events
You can listen to events like that. If not using auto restart, you need to listen to events to decide what to fo when reaching a final state!
Example: