-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWiFiUtils.cpp
More file actions
110 lines (94 loc) · 3.13 KB
/
WiFiUtils.cpp
File metadata and controls
110 lines (94 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <WiFiUtils.h>
wifi_connection_status setupWifiConnection(const String ssid, const String password, const String hostName,
WiFiMode wifiMode, int maxTries) {
if (hostName.length() > 0) {
Serial.print("setting hostname: ");
Serial.println(hostName);
WiFi.hostname(hostName);
}
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println(" ...");
WiFi.mode(wifiMode);
int currentTry = 0;
while (WiFi.status() != WL_CONNECTED && (currentTry < maxTries || maxTries == 0)) {
station_status_t status = wifi_station_get_connect_status();
Serial.println(status);
if (status == STATION_WRONG_PASSWORD) {
Serial.println("Wrong password for connection...");
return WRONG_PASSWORD;
}
if (WiFi.status() == WL_NO_SSID_AVAIL) {
Serial.println("WiFi SSID not found...");
return SSID_NOT_FOUND;
}
currentTry += 1;
Serial.println("Waiting for connection...");
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Connection established!");
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
return CONNECTED;
}
return CONNECTION_NOT_POSSIBLE;
}
boolean testWifiConnection(const String ssid, const String password, int maxTries) {
WiFi.begin(ssid, password);
Serial.print("Testing connection to: ");
Serial.println(ssid);
Serial.print("With password: ");
Serial.println(password);
int currentTry = 0;
while (WiFi.status() != WL_CONNECTED && currentTry < maxTries) {
Serial.println("Waiting for connection...");
delay(1000);
currentTry++;
}
delay(500);
boolean wifiConnected = WiFi.status() == WL_CONNECTED;
if (wifiConnected) {
Serial.println("Connecting succeeded!");
} else {
Serial.println("Connecting failed!");
}
return wifiConnected;
}
DNSServer setupSoftAccessPointWithDnsServer(String ssid, String domainName) {
Serial.print("Setting soft-AP ... ");
Serial.println(WiFi.softAP(ssid) ? "Ready" : "Failed!");
Serial.print("Soft-AP IP address = ");
Serial.println(WiFi.softAPIP());
const byte DNS_PORT = 53;
DNSServer dnsServer;
dnsServer.setErrorReplyCode(DNSReplyCode::ServerFailure);
dnsServer.start(DNS_PORT, domainName, WiFi.softAPIP());
return dnsServer;
}
bool checkWifiStatus(const String ssid, const String password, const String hostname, WiFiMode wifiMode,
int maxReconnectTries) {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Attempting to connect to WiFi");
WiFi.disconnect();
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
wifi_connection_status connectionStatus =
setupWifiConnection(ssid, password, hostname, wifiMode, maxReconnectTries);
return connectionStatus == CONNECTED;
}
return true;
}
Pinger pinger;
boolean pingServer(String server) {
IPAddress invalid(255, 255, 255, 255);
IPAddress serverIP;
WiFi.hostByName(server.c_str(), serverIP);
Serial.print("Resolved server url: " + server + " to ip: ");
Serial.println(serverIP);
if (serverIP == invalid) {
return false;
}
return pinger.Ping(serverIP);
}