#include "wifi_util.h" #include "config.h" #include "util.h" // -> time.h #include "led_effects.h" #include "sensor_console.h" #if defined(ESP8266) # include #elif defined(ESP32) # include #endif namespace config { // WiFi config. See 'config.h' if you want to modify those values. const char *wifi_ssid = WIFI_SSID; const char *wifi_password = WIFI_PASSWORD; #ifdef WIFI_TIMEOUT const uint8_t wifi_timeout = WIFI_TIMEOUT; // [s] Will try to connect during wifi_timeout seconds before failing. #else const uint8_t wifi_timeout = 60; // [s] Will try to connect during wifi_timeout seconds before failing. #endif } namespace wifi { char local_ip[16]; // "255.255.255.255\0" void scanNetworks() { Serial.println(); Serial.println(F("WiFi - Scanning...")); bool async = false; bool showHidden = true; int n = WiFi.scanNetworks(async, showHidden); for (int i = 0; i < n; ++i) { Serial.print(F(" * '")); Serial.print(WiFi.SSID(i)); Serial.print(F("' (")); int16_t quality = 2 * (100 + WiFi.RSSI(i)); Serial.print(util::min(util::max(quality, 0), 100)); Serial.println(F(" %)")); } Serial.println(F("Done!")); Serial.println(); } void showLocalIp() { Serial.print(F("WiFi - Local IP : ")); Serial.println(wifi::local_ip); Serial.print(F("WiFi - SSID : ")); Serial.println(WIFI_SSID); } bool connected() { return WiFi.status() == WL_CONNECTED; } // Initialize Wi-Fi void connect(const char *hostname) { sensor_console::defineCommand("wifi_scan", scanNetworks, F("(Scans available WiFi networks)")); sensor_console::defineCommand("local_ip", showLocalIp, F("(Displays local IP and current SSID)")); //NOTE: WiFi Multi could allow multiple SSID and passwords. WiFi.persistent(false); // Don't write user & password to Flash. WiFi.mode(WIFI_STA); // Set ESP to be a WiFi-client only #if defined(ESP8266) WiFi.hostname(hostname); #elif defined(ESP32) WiFi.setHostname(hostname); #endif Serial.print(F("WiFi - Connecting to ")); Serial.println(config::wifi_ssid); WiFi.begin(config::wifi_ssid, config::wifi_password); // Wait for connection, at most wifi_timeout seconds for (int i = 0; i <= config::wifi_timeout && (WiFi.status() != WL_CONNECTED); i++) { led_effects::showRainbowWheel(); Serial.print("."); } if (connected()) { led_effects::showKITTWheel(color::green); Serial.println(); Serial.print(F("WiFi - Connected! IP address: ")); IPAddress address = WiFi.localIP(); snprintf(local_ip, sizeof(local_ip), "%d.%d.%d.%d", address[0], address[1], address[2], address[3]); Serial.println(local_ip); } else { //TODO: Allow sensor to work as an Access Point, in order to define SSID & password? led_effects::showKITTWheel(color::red); Serial.print(F("Connection to WiFi failed! Status : ")); Serial.println(WiFi.status()); } } }