forked from KlausMu/esp32-fan-controller
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwifiCommunication.cpp
183 lines (161 loc) · 5.94 KB
/
wifiCommunication.cpp
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#endif
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include "config.h"
#include "log.h"
#include "wifiCommunication.h"
#ifdef useWIFI
boolean connected = false;
bool wifiIsDisabled = true;
String accessPointName;
void setAccessPointName() {
String BSSID = String(WiFi.BSSIDstr());
if (BSSID == "00:11:22:33:44:55") {
accessPointName = "Your AP 2,4 GHz";
} else if (BSSID == "66:77:88:99:AA:BB") {
accessPointName = "Your AP 5 GHz";
}
}
#if defined(ESP32)
void printWiFiStatus(void){
if (wifiIsDisabled) return;
if (WiFi.isConnected()) {
Serial.printf(MY_LOG_FORMAT(" WiFi.status() == connected\r\n"));
} else {
Serial.printf(MY_LOG_FORMAT(" WiFi.status() == DIS-connected\r\n"));
}
// Serial.println(WiFi.localIP());
Serial.printf(MY_LOG_FORMAT(" IP address: %s\r\n"), WiFi.localIP().toString().c_str());
if (WiFi.isConnected()) { // && WiFi.localIP().isSet()) {
Serial.printf(MY_LOG_FORMAT(" WiFi connected and IP is set :-)\r\n"));
} else {
Serial.printf(MY_LOG_FORMAT(" WiFi not completely available :-(\r\n"));
}
}
void WiFiStationConnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.printf(MY_LOG_FORMAT(" Callback \"StationConnected\"\r\n"));
printWiFiStatus();
}
void WiFiStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.printf(MY_LOG_FORMAT(" Callback \"StationDisconnected\"\r\n"));
connected = false;
printWiFiStatus();
// shouldn't even be here when wifiIsDisabled, but still happens ...
if (!wifiIsDisabled) {
WiFi.begin(wifi_ssid, wifi_password);
}
}
void WiFiGotIP(WiFiEvent_t event, WiFiEventInfo_t info){
Serial.printf(MY_LOG_FORMAT(" Callback \"GotIP\"\r\n"));
connected = true;
setAccessPointName();
printWiFiStatus();
}
#endif
#if defined(ESP8266)
void printWiFiStatus(void){
if (wifiIsDisabled) return;
if (WiFi.isConnected()) {
Serial.printf(MY_LOG_FORMAT(" WiFi.status() == connected\r\n"));
} else {
Serial.printf(MY_LOG_FORMAT(" WiFi.status() == DIS-connected\r\n"));
}
// Serial.println(WiFi.localIP());
Serial.printf(MY_LOG_FORMAT(" IP address: %s\r\n"), WiFi.localIP().toString().c_str());
if (WiFi.isConnected()) { // && WiFi.localIP().isSet()) {
Serial.printf(MY_LOG_FORMAT(" WiFi connected and IP is set :-)\r\n"));
} else {
Serial.printf(MY_LOG_FORMAT(" WiFi not completely available :-(\r\n"));
}
}
//callback on WiFi connected
void onSTAConnected (WiFiEventStationModeConnected event_info) {
Serial.printf(MY_LOG_FORMAT(" Callback \"onStationModeConnected\"\r\n"));
Serial.printf(MY_LOG_FORMAT(" Connected to %s\r\n"), event_info.ssid.c_str ());
printWiFiStatus();
}
// Manage network disconnection
void onSTADisconnected (WiFiEventStationModeDisconnected event_info) {
Serial.printf(MY_LOG_FORMAT(" Callback \"onStationModeDisconnected\"\r\n"));
Serial.printf(MY_LOG_FORMAT(" Disconnected from SSID: %s\r\n"), event_info.ssid.c_str ());
Serial.printf(MY_LOG_FORMAT(" Reason: %d\r\n"), event_info.reason);
connected = false;
printWiFiStatus();
// shouldn't even be here when wifiIsDisabled, but still happens ...
if (!wifiIsDisabled) {
WiFi.begin(wifi_ssid, wifi_password);
}
}
//callback on got IP address
// Start NTP only after IP network is connected
void onSTAGotIP (WiFiEventStationModeGotIP event_info) {
Serial.printf(MY_LOG_FORMAT(" Callback \"onStationModeGotIP\"\r\n"));
Serial.printf(MY_LOG_FORMAT(" Got IP: %s\r\n"), event_info.ip.toString ().c_str ());
Serial.printf(MY_LOG_FORMAT(" Connected: %s\r\n"), WiFi.isConnected() ? "yes" : "no");
connected = true;
setAccessPointName();
printWiFiStatus();
}
#endif
void wifi_enable(void) {
wifiIsDisabled = false;
#if defined(ESP32)
#if defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 2)
WiFi.onEvent(WiFiStationDisconnected, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
#else
WiFi.onEvent(WiFiStationDisconnected, SYSTEM_EVENT_STA_DISCONNECTED);
#endif
#endif
#if defined(ESP8266)
static WiFiEventHandler e2;
e2 = WiFi.onStationModeDisconnected(onSTADisconnected);
#endif
WiFi.begin(wifi_ssid, wifi_password);
}
void wifi_disable(void){
wifiIsDisabled = true;
#if defined(ESP32)
#if defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 2)
WiFi.removeEvent(ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
#else
WiFi.removeEvent(SYSTEM_EVENT_STA_DISCONNECTED);
#endif
#endif
#if defined(ESP8266)
// not tested
WiFi.onStationModeDisconnected(NULL);
#endif
WiFi.disconnect();
}
void wifi_setup(){
/*
WiFi will be startetd here. Won't wait until WiFi has connected.
Event connected: Will only be logged, nothing else happens
Event GotIP: From here on WiFi can be used. Only from here on IP address is available
Event Disconnected: Will automatically try to reconnect here. If reconnection happens, first event connected will be fired, after this event gotIP fires
*/
#if defined(ESP32)
#if defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 2)
WiFi.onEvent(WiFiStationConnected, ARDUINO_EVENT_WIFI_STA_CONNECTED);
WiFi.onEvent(WiFiGotIP, ARDUINO_EVENT_WIFI_STA_GOT_IP);
WiFi.onEvent(WiFiStationDisconnected, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
#else
WiFi.onEvent(WiFiStationConnected, SYSTEM_EVENT_STA_CONNECTED);
WiFi.onEvent(WiFiGotIP, SYSTEM_EVENT_STA_GOT_IP);
WiFi.onEvent(WiFiStationDisconnected, SYSTEM_EVENT_STA_DISCONNECTED);
#endif
#endif
#if defined(ESP8266)
static WiFiEventHandler e1, e2, e3;
e1 = WiFi.onStationModeConnected(onSTAConnected);
e2 = WiFi.onStationModeDisconnected(onSTADisconnected);
e3 = WiFi.onStationModeGotIP(onSTAGotIP);// As soon WiFi is connected, start NTP Client
#endif
WiFi.mode(WIFI_STA);
wifi_disable();
}
#endif