Прошу помощи.
код
01 | for (i = 1; i < 3; i++) { |
02 | Serial .println( "Connecting to wifi " + String(ssid) + ": try " + String(i)); |
04 | WiFi.disconnect( true ); |
07 | WiFi.onEvent(WiFiEvent); |
08 | WiFi.onEvent(WiFiGotIP, WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); |
11 | WiFi.begin(ssid, password); |
12 | ssid_str=String(ssid); |
15 | while ((WiFi.status() != WL_CONNECTED) & (j < 5)) { |
к телефону, к роутеру микротик подключается. В нужном помещении дочка доступа не известная мне (вероятно убикьюти), доступа к настройкам нет, но айти прописал маки и ноутбука моего и esp32. ноутбук подключается к точке доступа нормально, а esp32 не подключается.
Вернее наступает событие Connected to access point (4), но WiFi.status() не равен WL_CONNECTED.
вот как это в логе:
.Connecting to wifi XXX: try 1
[WiFi-event] event: 5 Disconnected from WiFi access point
[WiFi-event] event: 3 WiFi clients stopped
[WiFi-event] event: 0 WiFi interface ready
[WiFi-event] event: 2 WiFi client started
[WiFi-event] event: 0 WiFi interface ready
[WiFi-event] event: 4 Connected to access point
.....Connecting to wifi XXX: try 2
[WiFi-event] event: 3 WiFi clients stopped
[WiFi-event] event: 0 WiFi interface ready
[WiFi-event] event: 2 WiFi client started
[WiFi-event] event: 0 WiFi interface ready
[WiFi-event] event: 4 Connected to access point
.....Connecting to wifi M2021: try 3
[WiFi-event] event: 3 WiFi clients stopped
[WiFi-event] event: 0 WiFi interface ready
[WiFi-event] event: 2 WiFi client started
[WiFi-event] event: 0 WiFi interface ready
....
[WiFi-event] event: 5 Disconnected from WiFi access point
И так по кругу...
Как решить эту проблему?
Без логов ТД гадать можно бесконечно долго.
как их получить? как включить режим debug ?
Если это UAP от убика, то на UniFi Controller-е. Он вполне себе может отшивать устройства с низким уровнем передачи.
Ну и на ESP можно что-то типа Debug level включить, верно мыслите.
WiFi.onEvent(WiFiEvent);
Функция обработчик событий говорит, что соединение с точной доступа произошло! :
[WiFi-event] event: 4 Connected to access point
Но на этом всё, ничего больше не происходит, никаких событий, нет выдачи адреса и т.д.
Ноутбук получает адрес динамический, т.е dhcp сервер там есть.
Почитал про дебаг, кроме jtag и прочих сложных отладчиков ничего не нашел, т.е. вариантов более глубокой отладки, чем события, нет.
Да может тупо ошибка в маке еспшки на стороне точки доступа. Без ее логов не понять.
Покажите нам две ваши функции:
WiFiEvent и WiFiGotIP , тогда посмотрим.
Вообще создается впечатление, что вы всего в кучу намешали. Сначала перегружаете калбэки, потом юзаете функции библиотеки которой для нормальной работы эти калбэки нужны, а они перегружены. Возьмите уже стандартный пример и попробуйте его.
Как включить отладочные сообщения для ESP32:
Спасибо за debug level, сегодня попробую
вот код:
01
//---обработчик событий wifi-------------------------------------------------------------------------------------
02
void
WiFiEvent(WiFiEvent_t
event
) {
03
Serial
.printf(
"[WiFi-event] event: %d "
,
event
);
04
switch
(
event
) {
05
case
SYSTEM_EVENT_WIFI_READY:
06
Serial
.println(
"WiFi interface ready"
);
07
break
;
08
case
SYSTEM_EVENT_SCAN_DONE:
09
Serial
.println(
"Completed scan for access points"
);
10
break
;
11
case
SYSTEM_EVENT_STA_START:
12
Serial
.println(
"WiFi client started"
);
13
break
;
14
case
SYSTEM_EVENT_STA_STOP:
15
Serial
.println(
"WiFi clients stopped"
);
16
break
;
17
case
SYSTEM_EVENT_STA_CONNECTED:
18
Serial
.println(
"Connected to access point"
);
19
break
;
20
case
SYSTEM_EVENT_STA_DISCONNECTED:
21
Serial
.println(
"Disconnected from WiFi access point"
);
22
WiFi.begin(ssid, password);
23
break
;
24
case
SYSTEM_EVENT_STA_AUTHMODE_CHANGE:
25
Serial
.println(
"Authentication mode of access point has changed"
);
26
break
;
27
case
SYSTEM_EVENT_STA_GOT_IP:
28
Serial
.print(
"Obtained IP address: "
);
29
Serial
.println(WiFi.localIP());
30
break
;
31
case
SYSTEM_EVENT_STA_LOST_IP:
32
Serial
.println(
"Lost IP address and IP address is reset to 0"
);
33
break
;
34
case
SYSTEM_EVENT_STA_WPS_ER_SUCCESS:
35
Serial
.println(
"WiFi Protected Setup (WPS): succeeded in enrollee mode"
);
36
break
;
37
case
SYSTEM_EVENT_STA_WPS_ER_FAILED:
38
Serial
.println(
"WiFi Protected Setup (WPS): failed in enrollee mode"
);
39
break
;
40
case
SYSTEM_EVENT_STA_WPS_ER_TIMEOUT:
41
Serial
.println(
"WiFi Protected Setup (WPS): timeout in enrollee mode"
);
42
break
;
43
case
SYSTEM_EVENT_STA_WPS_ER_PIN:
44
Serial
.println(
"WiFi Protected Setup (WPS): pin code in enrollee mode"
);
45
break
;
46
case
SYSTEM_EVENT_AP_START:
47
Serial
.println(
"WiFi access point started"
);
48
break
;
49
case
SYSTEM_EVENT_AP_STOP:
50
Serial
.println(
"WiFi access point stopped"
);
51
break
;
52
case
SYSTEM_EVENT_AP_STACONNECTED:
53
Serial
.println(
"Client connected"
);
54
break
;
55
case
SYSTEM_EVENT_AP_STADISCONNECTED:
56
Serial
.println(
"Client disconnected"
);
57
break
;
58
case
SYSTEM_EVENT_AP_STAIPASSIGNED:
59
Serial
.println(
"Assigned IP address to client"
);
60
break
;
61
case
SYSTEM_EVENT_AP_PROBEREQRECVED:
62
Serial
.println(
"Received probe request"
);
63
break
;
64
case
SYSTEM_EVENT_GOT_IP6:
65
Serial
.println(
"IPv6 is preferred"
);
66
break
;
67
case
SYSTEM_EVENT_ETH_START:
68
Serial
.println(
"Ethernet started"
);
69
break
;
70
case
SYSTEM_EVENT_ETH_STOP:
71
Serial
.println(
"Ethernet stopped"
);
72
break
;
73
case
SYSTEM_EVENT_ETH_CONNECTED:
74
Serial
.println(
"Ethernet connected"
);
75
break
;
76
case
SYSTEM_EVENT_ETH_DISCONNECTED:
77
Serial
.println(
"Ethernet disconnected"
);
78
break
;
79
case
SYSTEM_EVENT_ETH_GOT_IP:
80
Serial
.println(
"Obtained IP address"
);
81
break
;
82
default
:
break
;
83
}
84
}
85
86
//---обработчик событий wifi-------------------------------------------------------------------------------------
87
void
WiFiGotIP(WiFiEvent_t
event
, WiFiEventInfo_t info) {
88
Serial
.println(
"WiFi connected"
);
89
Serial
.println(
"IP address: "
);
90
Serial
.println(IPAddress(info.got_ip.ip_info.ip.addr));
91
}
Ну так повесте контроль на получение IP. В примере который вы курили есть :
1
WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t
event
, WiFiEventInfo_t info){
2
Serial
.print(
"WiFi lost connection. Reason: "
);
3
Serial
.println(info.disconnected.reason);
4
}, WiFiEvent_t::SYSTEM_EVENT_STA_DISCONNECTED);
5
Serial
.print(
"WiFi Event ID: "
);
6
Serial
.println(eventID);
Узнаем причину облома.
почитаю
Извиняюсь, оказалось проблема была на стороне роутера, айтишник неправильно прописал мак адрес (
поэтому точка доступа не выдавала адрес
доброго времени
столкнулся с похожей траблой
пытаюсь реализовать реконнект вафли после обрыва связи (Применительно к ЕСП32)
001
//-------------------------------------------------------------- Stop_wifi
002
void
stop_wifi()
003
{
004
if
(web_cli)
//Останавливаем клиента
005
{
006
DBG_OUT_PORT.println(F(
"True stop the Client"
));
007
}
008
if
(web_ap)
//Останавливаем АР
009
{
010
DBG_OUT_PORT.println(F(
"True stop the AP"
));
011
}
012
web_ap =
false
;
013
web_cli =
false
;
014
WiFi.mode(WIFI_OFF);
015
WiFi.disconnect();
016
DBG_OUT_PORT.println(F(
"WiFi stopped...."
));
017
}
018
019
//-------------------------------------------------------------- Start_wifi
020
IPAddress start_wifi(
const
char
* ssid,
const
char
* ssipass,
const
char
* apid,
const
char
* appass)
021
{
022
IPAddress my_IP;
023
024
DBG_OUT_PORT.print(F(
"Trying to connect a "
));
025
DBG_OUT_PORT.println(ssid);
026
027
#if defined(ESP8266)
028
if
(WiFi.getPersistent() ==
true
) WiFi.persistent(
false
);
//disable saving wifi config into SDK flash area
029
#endif
030
if
(WiFi.getAutoConnect() !=
true
) WiFi.setAutoConnect(
true
);
//on power-on automatically connects to last used hwAP
031
WiFi.setAutoReconnect(
true
);
//automatically reconnects to hwAP in case it is disconnected
032
WiFi.disconnect(
true
);
033
WiFi.mode(WIFI_OFF);
034
035
// May be necessary after deepSleep. Otherwise you may get "error: pll_cal exceeds 2ms!!!" when trying to connect
036
delay(1);
037
038
// ---
039
// Here you can do whatever you need to do that doesn't need a WiFi connection.
040
// ---
041
042
#if defined(ESP8266)
043
ESP.rtcUserMemoryRead(RTC_USER_DATA_SLOT_WIFI_STATE, reinterpret_cast<uint32_t *>(&state),
sizeof
(state));
044
#endif
045
046
unsigned
long
start = millis();
047
048
delay(1000);
049
050
// Examples of different ways to register wifi events
051
WiFi.onEvent(WiFiEvent);
052
WiFi.onEvent(WiFiGotIP, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_GOT_IP);
053
WiFiEventId_t eventID = WiFi.onEvent([](WiFiEvent_t
event
, WiFiEventInfo_t info)
054
{
055
DBG_OUT_PORT.print(
"WiFi lost connection. Reason: "
);
056
DBG_OUT_PORT.println(info.wifi_sta_disconnected.reason);
057
}, WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
058
059
// Remove WiFi event
060
DBG_OUT_PORT.print(
"WiFi Event ID: "
);
061
DBG_OUT_PORT.println(eventID);
062
// WiFi.removeEvent(eventID);
063
064
bool
_resume =
false
;
065
#if defined(ESP8266)
066
_resume = (!WiFi.resumeFromShutdown(state) || (WiFi.waitForConnectResult(10000) != WL_CONNECTED));
067
#else
068
_resume = (WiFi.waitForConnectResult(10000) != WL_CONNECTED);
069
#endif
070
if
(_resume)
071
{
072
DBG_OUT_PORT.println(F(
"Cannot resume WiFi connection, connecting via begin..."
));
073
074
if
(!WiFi.mode(WIFI_STA) || !WiFi.begin(ssid, ssipass) || (WiFi.waitForConnectResult(10000) != WL_CONNECTED))
075
{
076
DBG_OUT_PORT.print(F(
"Cannot connect to "
));
077
DBG_OUT_PORT.println(ssid);
078
079
DBG_OUT_PORT.print(F(
"Trying to start access point "
));
080
DBG_OUT_PORT.println(apid);
081
082
WiFi.mode(WIFI_AP);
083
084
WiFi.softAP(apid, appass);
085
086
my_IP = WiFi.softAPIP();
087
088
web_ap =
true
;
089
090
DBG_OUT_PORT.print(F(
"AP IP address: "
));
091
DBG_OUT_PORT.println(my_IP);
092
return
my_IP;
093
}
094
}
095
096
DBG_OUT_PORT.print(ssid);
097
DBG_OUT_PORT.println(F(
" is connected!"
));
098
099
unsigned
long
duration = millis() - start;
100
DBG_OUT_PORT.printf(
"Duration: %f\n"
, duration * 0.001);
101
102
web_cli =
true
;
103
104
my_IP = WiFi.localIP();
105
106
DBG_OUT_PORT.print(F(
"Client IP address: "
));
107
DBG_OUT_PORT.println(my_IP);
108
return
my_IP;
109
}
110
111
void
WiFiEvent(WiFiEvent_t
event
)
112
{
113
DBG_OUT_PORT.printf(PSTR(
"[WiFi-event] event code: %d\n"
),
event
);
114
115
switch
(
event
) {
116
case
ARDUINO_EVENT_WIFI_READY:
117
DBG_OUT_PORT.println(F(
"WiFi interface ready"
));
118
break
;
119
case
ARDUINO_EVENT_WIFI_SCAN_DONE:
120
DBG_OUT_PORT.println(F(
"Completed scan for access points"
));
121
break
;
122
case
ARDUINO_EVENT_WIFI_STA_START:
123
DBG_OUT_PORT.println(F(
"WiFi client started"
));
124
break
;
125
case
ARDUINO_EVENT_WIFI_STA_STOP:
126
DBG_OUT_PORT.println(F(
"WiFi clients stopped"
));
127
break
;
128
case
ARDUINO_EVENT_WIFI_STA_CONNECTED:
129
DBG_OUT_PORT.println(F(
"Connected to access point"
));
130
break
;
131
case
ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
132
DBG_OUT_PORT.println(F(
"Disconnected from WiFi access point"
));
133
break
;
134
case
ARDUINO_EVENT_WIFI_STA_AUTHMODE_CHANGE:
135
DBG_OUT_PORT.println(F(
"Authentication mode of access point has changed"
));
136
break
;
137
case
ARDUINO_EVENT_WIFI_STA_GOT_IP:
138
DBG_OUT_PORT.print(F(
"Obtained IP address: "
));
139
DBG_OUT_PORT.println(WiFi.localIP());
140
break
;
141
case
ARDUINO_EVENT_WIFI_STA_LOST_IP:
142
DBG_OUT_PORT.println(F(
"Lost IP address and IP address is reset to 0"
));
143
break
;
144
case
ARDUINO_EVENT_WPS_ER_SUCCESS:
145
DBG_OUT_PORT.println(F(
"WiFi Protected Setup (WPS): succeeded in enrollee mode"
));
146
break
;
147
case
ARDUINO_EVENT_WPS_ER_FAILED:
148
DBG_OUT_PORT.println(F(
"WiFi Protected Setup (WPS): failed in enrollee mode"
));
149
break
;
150
case
ARDUINO_EVENT_WPS_ER_TIMEOUT:
151
DBG_OUT_PORT.println(F(
"WiFi Protected Setup (WPS): timeout in enrollee mode"
));
152
break
;
153
case
ARDUINO_EVENT_WPS_ER_PIN:
154
DBG_OUT_PORT.println(F(
"WiFi Protected Setup (WPS): pin code in enrollee mode"
));
155
break
;
156
case
ARDUINO_EVENT_WIFI_AP_START:
157
DBG_OUT_PORT.println(F(
"WiFi access point started"
));
158
break
;
159
case
ARDUINO_EVENT_WIFI_AP_STOP:
160
DBG_OUT_PORT.println(F(
"WiFi access point stopped"
));
161
break
;
162
case
ARDUINO_EVENT_WIFI_AP_STACONNECTED:
163
DBG_OUT_PORT.println(F(
"Client connected"
));
164
break
;
165
case
ARDUINO_EVENT_WIFI_AP_STADISCONNECTED:
166
DBG_OUT_PORT.println(F(
"Client disconnected"
));
167
break
;
168
case
ARDUINO_EVENT_WIFI_AP_STAIPASSIGNED:
169
DBG_OUT_PORT.println(F(
"Assigned IP address to client"
));
170
break
;
171
case
ARDUINO_EVENT_WIFI_AP_PROBEREQRECVED:
172
DBG_OUT_PORT.println(F(
"Received probe request"
));
173
break
;
174
case
ARDUINO_EVENT_WIFI_AP_GOT_IP6:
175
DBG_OUT_PORT.println(F(
"AP IPv6 is preferred"
));
176
break
;
177
case
ARDUINO_EVENT_WIFI_STA_GOT_IP6:
178
DBG_OUT_PORT.println(F(
"STA IPv6 is preferred"
));
179
break
;
180
case
ARDUINO_EVENT_ETH_GOT_IP6:
181
DBG_OUT_PORT.println(F(
"Ethernet IPv6 is preferred"
));
182
break
;
183
case
ARDUINO_EVENT_ETH_START:
184
DBG_OUT_PORT.println(F(
"Ethernet started"
));
185
break
;
186
case
ARDUINO_EVENT_ETH_STOP:
187
DBG_OUT_PORT.println(F(
"Ethernet stopped"
));
188
break
;
189
case
ARDUINO_EVENT_ETH_CONNECTED:
190
DBG_OUT_PORT.println(F(
"Ethernet connected"
));
191
break
;
192
case
ARDUINO_EVENT_ETH_DISCONNECTED:
193
DBG_OUT_PORT.println(F(
"Ethernet disconnected"
));
194
break
;
195
case
ARDUINO_EVENT_ETH_GOT_IP:
196
DBG_OUT_PORT.println(F(
"Obtained IP address"
));
197
break
;
198
default
:
break
;
199
}
200
}
201
202
void
WiFiGotIP(WiFiEvent_t
event
, WiFiEventInfo_t info)
203
{
204
DBG_OUT_PORT.println(F(
"WiFi connected"
));
205
DBG_OUT_PORT.println(F(
"IP address: "
));
206
DBG_OUT_PORT.println(IPAddress(info.got_ip.ip_info.ip.addr));
207
}
208
209
void
setup
()
210
{
211
DBG_OUT_PORT.begin(115200);
212
fs_setup();
213
conf_data = loadConfig(conf_f);
214
start_wifi(conf_data.sta_ssid, conf_data.sta_pass, conf_data.ap_ssid, conf_data.ap_pass);
215
delay (2000);
216
stop_wifi();
217
delay (2000);
218
start_wifi(conf_data.sta_ssid, conf_data.sta_pass, conf_data.ap_ssid, conf_data.ap_pass);
219
}
220
221
void
loop
()
222
{
223
}
получаю следующее: (После холодного резета все замечательно - точка подключается и останавливается корректно)
01
09:13:20.456 -> Trying to connect a Home
02
09:13:21.492 -> WiFi Event ID: 3
03
09:13:21.492 -> Cannot resume WiFi connection, connecting via begin...
04
09:13:21.492 -> [WiFi-
event
]
event
code: 0
05
09:13:21.492 -> WiFi
interface
ready
06
09:13:21.541 -> [WiFi-
event
]
event
code: 2
07
09:13:21.541 -> WiFi client started
08
09:13:23.900 -> [WiFi-
event
]
event
code: 4
09
09:13:23.900 -> Connected to access point
10
09:13:24.467 -> [WiFi-
event
]
event
code: 7
11
09:13:24.467 -> Obtained IP address: 192.168.1.18
12
09:13:24.467 -> WiFi connected
13
09:13:24.467 -> IP address:
14
09:13:24.467 -> 192.168.1.18
15
09:13:24.515 -> Home
is
connected!
16
09:13:24.515 -> Duration: 4.049000
17
09:13:24.515 -> Client IP address: 192.168.1.18
18
09:13:26.544 -> True stop the Client
19
09:13:26.544 -> [WiFi-
event
]
event
code: 5
20
09:13:26.544 -> Disconnected from WiFi access point
21
09:13:26.544 -> WiFi lost connection. Reason: 8
22
09:13:26.544 -> [WiFi-
event
]
event
code: 3
23
09:13:26.544 -> WiFi clients stopped
24
09:13:26.544 -> WiFi stopped....
Но вот вторая попытка оказывается неудачной
01
09:13:28.571 -> Trying to connect a Home
02
09:13:29.566 -> WiFi Event ID: 6
03
09:13:29.566 -> Cannot resume WiFi connection, connecting via begin...
04
09:13:29.566 -> [WiFi-
event
]
event
code: 0
05
09:13:29.566 -> WiFi
interface
ready
06
09:13:29.566 -> [WiFi-
event
]
event
code: 0
07
09:13:29.566 -> WiFi
interface
ready
08
09:13:29.566 -> [WiFi-
event
]
event
code: 2
09
09:13:29.566 -> WiFi client started
10
09:13:29.566 -> [WiFi-
event
]
event
code: 2
11
09:13:29.566 -> WiFi client started
12
09:13:31.643 -> [WiFi-
event
]
event
code: 5
13
09:13:31.643 -> Disconnected from WiFi access point
14
09:13:31.643 -> WiFi lost connection. Reason: 201
15
09:13:31.643 -> [WiFi-
event
]
event
code: 5
16
09:13:31.643 -> Disconnected from WiFi access point
17
09:13:31.643 -> WiFi lost connection. Reason: 201
18
09:13:31.691 -> Cannot connect to Home
19
09:13:31.691 -> Trying to start access point C3_13
И как я разумею своим узким умишком все дело в этой строчке
1
09:13:29.566 -> WiFi Event ID: 6
При удачном коннекте она была равна 3
Видимо ид и пароль могут взяться откуда то из другого места?
В 8266 был
1
if
(WiFi.getPersistent() ==
true
) WiFi.persistent(
false
);
//disable saving wifi config into SDK flash area
В 32ке может есть что то похожее?
Скорее всего дело в работе вашего роутера. Попробуйте подключаться не сразу после разрыва связи, а через 5 секунд например.
Скорее всего дело в работе вашего роутера. Попробуйте подключаться не сразу после разрыва связи, а через 5 секунд например.
5 секунд мало, сейчас в рутерах есть радиус, а у него тики раз минута