-
Notifications
You must be signed in to change notification settings - Fork 0
/
sys_wifi.h
136 lines (118 loc) · 3.14 KB
/
sys_wifi.h
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// ----[WIFI CONTROL MODULE]-----
// built for Arduino IoT 33 wifi board
// based on the tutorials by Alex Astrum
// https://medium.com/@alexastrum/getting-started-with-arduino-and-firebase-347ec6917da5
#pragma once
#include <Arduino.h>
//Nano IOT 33
#ifdef ARDUINO_ARCH_SAMD
#include <WiFiNINA.h>
#include <utility/wifi_drv.h>
#endif
// Nano ESP 32
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#include <esp_wifi.h>
#define WL_MAC_ADDR_LENGTH 6
#endif
#include "sys_config.h"
#include "sys_logStatus.h"
/**
* Re-initialize the WiFi driver.
* This is currently necessary to switch from BLE to WiFi.
*/
void resetWiFi() {
#ifdef ARDUINO_ARCH_SAMD
wiFiDrv.wifiDriverDeinit();
wiFiDrv.wifiDriverInit();
#endif
#ifdef ARDUINO_ARCH_ESP32
// seems to permanently kill the wifi
// esp_wifi_disconnect();
// esp_wifi_stop();
// esp_wifi_deinit();
// esp_wifi_init(NULL); // Reinitialize the Wi-Fi driver
// delay(1000);
#endif
}
void connectToWiFi()
{
int status = WiFi.status();
if (status == WL_CONNECTED)
{
return;
}
// connect to the wifi
logStatus("Connecting to WiFi...");
while(true) {
WiFi.setHostname(config.deviceID.c_str());
status = WiFi.begin(config.secretWiFiSSID.c_str(), config.secretWiFiPassword.c_str());
#ifdef ARDUINO_ARCH_ESP32
status = WiFi.waitForConnectResult(); // needed for ESP32
#endif
if (status == WL_CONNECTED) {
break;
} else {
// evaluate failure mode
switch (status) {
case WL_CONNECT_FAILED:
logText("Connection failed. Check SSID and password.");
break;
case WL_NO_SSID_AVAIL:
logText("SSID not found. Check if the network is available.");
break;
case WL_CONNECTION_LOST:
logText("Connection lost. Check network stability.");
break;
case WL_DISCONNECTED:
logText("Connection disconnected. Double-check that you've entered the correct SSID and password.");
break;
default:
logText("Unknown error [" + String(status) + "] occurred.");
}
}
logError("Retrying in 5 seconds...");
resetWiFi();
delay(5000);
}
// log the mac address
byte mac[6];
WiFi.macAddress(mac);
logStatus("MAC Address: ");
logByteArrayAsHex(mac,6);
// connection complete
logStatus("Connected to WiFi.");
}
void setupWiFi()
{
int status = WiFi.status();
if (status == WL_NO_SHIELD)
{
logSuspend("WiFi shield missing!");
}
#ifdef ARDUINO_ARCH_SAMD
if (status == WL_NO_MODULE)
{
logSuspend("Communication with WiFi module failed!");
}
if (WiFi.firmwareVersion() < WIFI_FIRMWARE_LATEST_VERSION)
{
logStatus("Please upgrade WiFi firmware!");
}
#endif
resetWiFi();
connectToWiFi();
}
// helper functions
String getWiFiMACAddressAsString(bool includeColons = true) {
byte mac[WL_MAC_ADDR_LENGTH];
WiFi.macAddress(mac);
String macAddress = "";
for (int i = 0; i < 6; ++i) {
macAddress += String(mac[i], HEX); // Convert each byte to hex and append
if ((i < 5) && (includeColons)) {
macAddress += ":"; // Add colon separator (except after the last byte)
}
}
return macAddress;
}