我有一个 Arduino 草图在 ESP8266 克隆上运行,使用 vanilla
ESP8266WiFi.h
库。
当只有一个接入点(Netgear Orbi)清晰可见时,这在工作台上可以按预期工作。在另一个房间,Wifi 性能非常不稳定。信号“强度”良好,但有间接证据表明,在两个接入点的视线范围内,该设备的性能较差。 “真正的”设备,例如我的笔记本电脑,在同一位置拥有坚如磐石的 WiFi。 Orbi 系统的工作方式是多个接入点都在同一频道上广播相同的 SSID。我怀疑这会以某种方式混淆 ESP8266 堆栈。
测试
因为这是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
代码
后续步骤
证实此场景是一个已知问题,
我上传了
WifiScan
示例草图,它只是连续列出了所有可用网络。
我所看到的确实令人惊讶:在有问题的位置 - 我以为我可以看到多个接入点 - ESP8266 无法看到其中的任何。这解释了很多! 但是为什么呢?接入点会间歇性地出现在列表中,并且同一频道上没有其他网络。但我还是改变了频道(9 到 12),现在设备可以看到所有信号非常好的接入点。
结论:
WiFi 既困难又神奇
在没有争用的情况下更改 WiFi 通道应该不会产生影响。