You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
1.9 KiB
C++

#include "wlan.h"
#include "settings.h"
const char *deviceName = "paperdash-display";
RTC_DATA_ATTR int wifiFailedCount = 0;
void initClientMode(const char *ssid, const char *password);
void initAPMode();
void setupWlan()
{
Serial.println("setup Wlan");
// load wifi settings
String ssid = NVS.getString("wifi.ssid");
String password = NVS.getString("wifi.password");
if (!ssid.isEmpty() && !password.isEmpty() && wifiFailedCount <=3)
{
// client mode
initClientMode(ssid.c_str(), password.c_str());
}
else
{
// ap mode
initAPMode();
}
WiFi.setHostname(deviceName);
Serial.println("setup Wlan - done");
}
void initClientMode(const char *ssid, const char *password)
{
uint8_t tryCount = 5;
long startMills = millis();
Serial.print(" Connecting to: ");
Serial.print(ssid);
Serial.print(" ");
// connecting
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
if (!tryCount--)
{
// TODO is this correct?
wifiFailedCount++;
if (wifiFailedCount > 3) {
Serial.println(" wifi is not reachable...");
initAPMode();
return;
} else {
tryCount = 5;
WiFi.disconnect();
Serial.println(" wifi reset...");
delay(500);
WiFi.begin(ssid, password);
}
}
}
Serial.println(" ...connected");
Serial.print(" IP address: ");
Serial.println(WiFi.localIP());
if (!MDNS.begin(deviceName)) {
Serial.println("Error setting up MDNS responder!");
}
// Add service to MDNS-SD
MDNS.addService("http", "tcp", 80);
MDNS.addServiceTxt("http", "tcp", "paperdash", "epd");
Serial.print(" connected in: ");
Serial.println(millis() - startMills);
}
void initAPMode()
{
Serial.println(" init AP (Access Point)");
//WiFi.disconnect();
WiFi.softAP("paperdash.io");
IPAddress IP = WiFi.softAPIP();
Serial.print(" AP IP address: ");
Serial.println(IP);
}