123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- #include "Arduino.h"
- #include "ArduinoOTA.h"
- #include "WiFi.h"
- #include "wifi.h"
- #include "storage.h"
- #include "httpd.h"
- String ssid = "";
- String password = "";
- String otaPassword = "";
- String hostname = "max80";
- bool inOTA = false;
- static void start_services(void)
- {
- my_httpd_start();
- }
- static String wifi_local_ip(void)
- {
- return WiFi.localIP().toString();
- }
- static void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info)
- {
- bool retry = false;
- bool connected = false;
- switch (event) {
- case ARDUINO_EVENT_WIFI_READY:
- printf("[WIFI] Interface ready\n");
- break;
- case ARDUINO_EVENT_WIFI_SCAN_DONE:
- printf("[WIFI] Completed scan for access points\n");
- break;
- case ARDUINO_EVENT_WIFI_STA_START:
- printf("[WIFI] Client started\n");
- break;
- case ARDUINO_EVENT_WIFI_STA_STOP:
- printf("[WIFI] Clients stopped\n");
- break;
- case ARDUINO_EVENT_WIFI_STA_CONNECTED:
- printf("[WIFI] Connected to access point\n");
- break;
- case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
- printf("[WIFI] Disconnected from WiFi access point\n");
- retry = true;
- break;
- case ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
- printf("[WIFI] Authentication mode of access point has changed\n");
- break;
- case ARDUINO_EVENT_WIFI_STA_GOT_IP:
- printf("[WIFI] Obtained IP address: %s\n", wifi_local_ip().c_str());
- connected = true;
- break;
- case ARDUINO_EVENT_WIFI_STA_LOST_IP:
- printf("[WIFI] Lost IP address and IP address is reset to 0\n");
- retry = true;
- break;
- case ARDUINO_EVENT_WPS_ER_SUCCESS:
- printf("[WIFI] WiFi Protected Setup (WPS): succeeded in enrollee mode\n");
- break;
- case ARDUINO_EVENT_WPS_ER_FAILED:
- printf("[WIFI] WiFi Protected Setup (WPS): failed in enrollee mode\n");
- break;
- case ARDUINO_EVENT_WPS_ER_TIMEOUT:
- printf("[WIFI] WiFi Protected Setup (WPS): timeout in enrollee mode\n");
- break;
- case ARDUINO_EVENT_WPS_ER_PIN:
- printf("[WIFI] WiFi Protected Setup (WPS): pin code in enrollee mode\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_START:
- printf("[WIFI] Access point started\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_STOP:
- printf("[WIFI] Access point stopped\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_STACONNECTED:
- printf("[WIFI] Client connected\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
- printf("[WIFI] Client disconnected\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
- printf("[WIFI] Assigned IP address to client\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
- printf("[WIFI] Received probe request\n");
- break;
- case ARDUINO_EVENT_WIFI_AP_GOT_IP6:
- printf("[WIFI] AP IPv6 is preferred\n");
- break;
- case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
- printf("[WIFI] STA IPv6 is preferred\n");
- connected = true;
- break;
- case ARDUINO_EVENT_ETH_GOT_IP6:
- printf("[ETH] Ethernet IPv6 is preferred\n");
- connected = true;
- break;
- case ARDUINO_EVENT_ETH_START:
- printf("[ETH] Ethernet started\n");
- break;
- case ARDUINO_EVENT_ETH_STOP:
- printf("[ETH] Ethernet stopped\n");
- break;
- case ARDUINO_EVENT_ETH_CONNECTED:
- printf("[ETH] Ethernet connected\n");
- break;
- case ARDUINO_EVENT_ETH_DISCONNECTED:
- printf("[ETH] Ethernet disconnected\n");
- retry = true;
- break;
- case ARDUINO_EVENT_ETH_GOT_IP:
- printf("[ETH] Obtained IP address: %s\n", wifi_local_ip().c_str());
- connected = true;
- break;
- default:
- break;
- }
- /* Maybe need to do these in a different thread? */
- if (connected) {
- start_services();
- }
- if (retry) {
- WiFi.disconnect();
- WiFi.begin();
- }
- }
- void SetupWiFi() {
- ssid = GetWifiSSID();
- password = GetWifiPassword();
- hostname = GetHostname();
- inOTA = false;
- printf("[INFO] Setting up WiFi\n");
- printf("[INFO] SSID: %s\n", ssid.c_str());
- WiFi.onEvent(WiFiEvent);
- if (WiFi.getMode() != WIFI_STA) {
- WiFi.mode(WIFI_STA);
- delay(10);
- }
- if (WiFi.SSID() != ssid || WiFi.psk() != password) {
- printf("[INFO] WiFi config changed.\n");
- // ... Try to connect to WiFi station.
- WiFi.begin(ssid.c_str(), password.c_str());
- } else {
- WiFi.begin();
- }
- WiFi.setAutoReconnect(true);
- WiFi.setHostname(hostname.c_str());
- }
- void SetupOTA() {
- // Start OTA server.
- ArduinoOTA.setHostname((const char *)hostname.c_str());
- ArduinoOTA.onStart([]() {
- inOTA = true;
- printf("[INFO] OTA Update Start\n");
- });
- ArduinoOTA.onEnd([]() {
- printf("[INFO] OTA Update End\n");
- });
- ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
- printf("[INFO] Progress: %u%%\n", (unsigned int)((progress*100ULL)/total));
- });
- ArduinoOTA.onError([](ota_error_t error) {
- printf("[ERROR] %u: ", error);
- if (error == OTA_AUTH_ERROR) printf("Auth failed\n");
- else if (error == OTA_BEGIN_ERROR) printf("Start Failed\n");
- else if (error == OTA_CONNECT_ERROR) printf("Connection failed\n");
- else if (error == OTA_RECEIVE_ERROR) printf("Receive Error\n");
- else if (error == OTA_END_ERROR) printf("End Fail\n");
- });
- ArduinoOTA.begin();
- }
|