112 lines
3.1 KiB
C++
112 lines
3.1 KiB
C++
#include "ArduinoUtils.h"
|
|
#if defined(ARDUINO)
|
|
#include <Arduino.h>
|
|
#include <ESP8266WiFi.h>
|
|
#include <ESP8266httpUpdate.h>
|
|
|
|
bool StartWifi(const char *wifiSsid, const char *wifiPassword,
|
|
bool hotspotFallback) {
|
|
#if UNO_R4 || ARDUINO_ARCH_RP2040
|
|
if (WiFi.status() == WL_NO_MODULE) {
|
|
Serial.println("WiFi not present, WiFiSync is disabled");
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#if ESP32
|
|
printf("Connecting to WiFi %s\n", wifiSsid);
|
|
#else
|
|
Serial.print("Connecting to WiFi ");
|
|
Serial.println(wifiSsid);
|
|
#endif
|
|
|
|
// Connect to Wifi
|
|
WiFi.begin(wifiSsid, wifiPassword);
|
|
uint32_t notConnectedCounter = 0;
|
|
bool connected = false;
|
|
bool hotSpotEnabled = false;
|
|
|
|
while (WiFi.status() != WL_CONNECTED && !hotSpotEnabled) {
|
|
#if ESP32
|
|
printf(".");
|
|
#else
|
|
Serial.print(".");
|
|
#endif
|
|
delay(500);
|
|
|
|
notConnectedCounter++;
|
|
if (notConnectedCounter > 20 && hotspotFallback) {
|
|
#if ESP32
|
|
printf("\nCould not connect to home network.\n");
|
|
#else
|
|
Serial.println();
|
|
Serial.println("Could not connect to home network");
|
|
#endif
|
|
WiFi.disconnect();
|
|
if (hotspotFallback) {
|
|
#if ESP32
|
|
WiFi.mode(WIFI_OFF);
|
|
WiFi.mode(WIFI_AP);
|
|
IPAddress wifiMyIp(192, 168, 4, 1);
|
|
WiFi.softAPConfig(wifiMyIp, wifiMyIp, IPAddress(255, 255, 255, 0));
|
|
|
|
WiFi.softAP(hotspotSSID, hotspotPassword);
|
|
#elif UNO_R4 || ARDUINO_ARCH_RP2040
|
|
WiFi.beginAP(hotspotSSID);
|
|
#endif
|
|
printf("Setup WiFi hotspot...\n");
|
|
// printf("ssid = %s, password = %s\n", hotspotSSID, hotspotPassword);
|
|
#if ARDUINO_ARCH_RP2040
|
|
String ipAddress = WiFi.localIP().toString();
|
|
#else
|
|
String ipAddress = WiFi.softAPIP().toString();
|
|
#endif
|
|
char buf[20];
|
|
ipAddress.toCharArray(buf, 20);
|
|
printf("IP address: %s\n", buf);
|
|
hotSpotEnabled = true;
|
|
}
|
|
}
|
|
}
|
|
connected = notConnectedCounter <= 20;
|
|
|
|
if (connected) {
|
|
char buf[20];
|
|
String ipAddress = WiFi.localIP().toString();
|
|
ipAddress.toCharArray(buf, 20);
|
|
#if ESP32 || ESP8266
|
|
printf("\nWifi connected, IP address: %s\n", buf);
|
|
#else
|
|
Serial.println();
|
|
Serial.println("Wifi connected");
|
|
#endif
|
|
#if ESP32
|
|
printf("Checking credentials in flash\n");
|
|
wifiPreferences.begin(PREFERENCES_NAMESPACE);
|
|
wifiPreferences.getBytes(STORAGE_KEY_WIFI, &credentials,
|
|
sizeof(credentials));
|
|
if (strcmp(wifiSsid, credentials.ssid) != 0 ||
|
|
strcmp(wifiPassword, credentials.password) != 0) {
|
|
printf("Updating credentials in flash...");
|
|
const int ssidLen = strlen(wifiSsid);
|
|
if (ssidLen < 32) {
|
|
memcpy(credentials.ssid, wifiSsid, ssidLen);
|
|
credentials.ssid[ssidLen] = '\0';
|
|
}
|
|
|
|
const int pwdLen = strlen(wifiPassword);
|
|
if (pwdLen < 32) {
|
|
memcpy(credentials.password, wifiPassword, pwdLen);
|
|
credentials.password[pwdLen] = '\0';
|
|
}
|
|
wifiPreferences.putBytes(STORAGE_KEY_WIFI, &credentials,
|
|
sizeof(credentials));
|
|
printf(" completed.\n");
|
|
}
|
|
wifiPreferences.end();
|
|
#endif
|
|
}
|
|
|
|
return (!hotSpotEnabled);
|
|
}
|
|
#endif |