80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
#include "wifi_util.h"
|
|
|
|
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);
|
|
}
|
|
|
|
// 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 (WiFi.status() == WL_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.println(F("Connection to WiFi failed"));
|
|
}
|
|
}
|
|
}
|