ESP8266 (Arduino) 网状接入点之间的 WiFi 间歇性连接

问题描述 投票:0回答:1

背景

我有一个 Arduino 草图在 ESP8266 克隆上运行,使用 vanilla

ESP8266WiFi.h
库。

当只有一个接入点(Netgear Orbi)清晰可见时,这在工作台上可以按预期工作。在另一个房间,Wifi 性能非常不稳定。信号“强度”良好,但有间接证据表明,在两个接入点的视线范围内,该设备的性能较差。 “真正的”设备,例如我的笔记本电脑,在同一位置拥有坚如磐石的 WiFi。 Orbi 系统的工作方式是多个接入点都在同一频道上广播相同的 SSID。我怀疑这会以某种方式混淆 ESP8266 堆栈。

测试

我已经在代码中启用了 WiFi 调试,尽管这些消息似乎来自预装的 Expressif 库,所以我能从中学到的东西就这么多。

因为这是WiFi,所以到目前为止我还没有尝试过Wireshark之类的工具,而且我手机上的WiFi分析工具也不好用。我对代码充满信心,但显然我缺少一些处理这种情况的东西。

下面是两个例子:一个成功,显示快速连接WiFi、DHCP,以及后续的网络流量;另一个显示连接不良,最终导致网络流量不成功。 (请注意,MQTT 实现中的错误导致第一次尝试失败;随后的失败才凸显了该问题。)

15:13:56.873 -> 1db512b-dirty (Tue 2 Jan 15:08:50 GMT 2024) 15:13:56.873 -> External System 15:13:56.906 -> WIFI: INFO: MAC: 40:91:51:52:bd:7e 15:13:56.906 -> WIFI: INFO: inital connection... 15:13:56.906 -> fpm close 1 15:13:56.906 -> mode : sta(40:91:51:52:bd:7e) 15:13:56.906 -> add if0 15:13:59.863 -> scandone 15:14:00.726 -> state: 0 -> 2 (b0) 15:14:00.760 -> state: 2 -> 3 (0) 15:14:00.760 -> state: 3 -> 5 (10) 15:14:00.760 -> add 0 15:14:00.760 -> aid 3 15:14:00.760 -> cnt 15:14:00.793 -> 15:14:00.793 -> connected with XXXX, channel 9 15:14:00.793 -> dhcp client start... 15:14:00.793 -> WIFI: INFO: connected 15:14:02.354 -> ip:10.23.3.142,mask:255.255.252.0,gw:10.23.1.1 15:14:02.388 -> WIFI: INFO: got IP: 10.23.3.142 15:14:02.421 -> MQTT: INFO: starting 15:14:02.421 -> MQTT: INFO: trying to connect 15:14:02.454 -> MQTT: INFO: connect failed; will try again 15:14:07.470 -> MQTT: INFO: trying to connect 15:14:07.503 -> MQTT: INFO: connected 15:14:10.759 -> pm open,type:2 0

不好

15:13:07.041 -> 1db512b-dirty (Tue 2 Jan 15:08:50 GMT 2024) 15:13:07.075 -> External System 15:13:07.075 -> WIFI: INFO: MAC: 40:91:51:52:bd:7e 15:13:07.075 -> WIFI: INFO: inital connection... 15:13:07.075 -> fpm close 1 15:13:07.075 -> mode : sta(40:91:51:52:bd:7e) 15:13:07.075 -> add if0 15:13:10.032 -> scandone 15:13:10.928 -> state: 0 -> 2 (b0) 15:13:11.925 -> state: 2 -> 0 (2) 15:13:11.925 -> reconnect 15:13:11.925 -> WIFI: INFO: disconnected 15:13:14.781 -> scandone 15:13:14.781 -> state: 0 -> 2 (b0) 15:13:14.781 -> state: 2 -> 3 (0) 15:13:14.781 -> state: 3 -> 5 (10) 15:13:14.781 -> add 0 15:13:14.781 -> aid 3 15:13:14.781 -> cnt 15:13:14.814 -> 15:13:14.814 -> connected with XXXX, channel 9 15:13:14.848 -> dhcp client start... 15:13:14.848 -> WIFI: INFO: connected 15:13:22.820 -> ip:10.23.3.142,mask:255.255.252.0,gw:10.23.1.1 15:13:22.820 -> WIFI: INFO: got IP: 10.23.3.142 15:13:24.780 -> pm open,type:2 0 15:13:25.345 -> MQTT: INFO: starting 15:13:25.345 -> MQTT: INFO: trying to connect 15:13:30.328 -> MQTT: INFO: connect failed; will try again 15:13:35.346 -> MQTT: INFO: trying to connect 15:13:40.330 -> MQTT: INFO: connect failed; will try again

代码

我故意不在这篇文章中提供任何代码,因为我不认为它有指导意义,但如果有人坚持的话,我可以发布 GitHub 链接。

后续步骤

我想我所追求的是以下其中之一:

证实此场景是一个已知问题,
  • 调试输出的解释,
  • 有关进一步调试的建议可能具有指导意义
arduino-esp8266 esp8266wifi
1个回答
0
投票

我上传了

WifiScan

示例草图,它只是连续列出了所有可用网络。

我所看到的确实令人惊讶:在有问题的位置 - 我以为我可以看到多个接入点 - ESP8266 无法看到其中的

任何

。这解释了很多! 但是为什么呢?接入点会间歇性地出现在列表中,并且同一频道上没有其他网络。但我还是改变了频道(9 到 12),现在设备可以看到所有信号非常好的接入点。

结论:

WiFi 既困难又神奇
  • 在写关于 SO 的大问题之前,请务必使用示例草图
  • ESP8266 WiFi 堆栈不存在网状网络问题
  • 反结论:

在没有争用的情况下更改 WiFi 通道应该不会产生影响。
© www.soinside.com 2019 - 2024. All rights reserved.