完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
正如我在文档中读到的那样,ESP8266最多可以连接五个 Wifi 网络。但我无法做到这一点。在启动过程中,我使用以下代码将最大网络数设置为 5:
printf("err:%irn",wifi_station_ap_number_set(5)); 然后我连接到一个WLAN并查询Wifi列表,如下所示: struct station_config config[5]; int cnt = wifi_station_get_ap_info(config); printf("Number of known networks: %irn", cnt); for (int i = 0; i < cnt; i++) { printf("%i: '%-16s' '%s'rn", i, config[i].ssid, config[i].password); } printf ("Connected to %irn",wifi_station_get_current_ap_id()); 我得到两个(?)网络,一个是正确的,另一个是空的。 然后,我断开连接并连接到另一个WLAN并再次查询。现在我有五个(?)网络。三个空的和我连接的两个。看起来不错。 但是,如果我重启 ESP,ESP 会尝试仅连接到第二个网络,即使该网络处于离线状态。该列表仅包含最后连接的网络。因此,网络缓存似乎不是持久的。这是正常行为吗,像这样缓存网络有什么意义?还是我错过了什么? |
|
相关推荐
1个回答
|
|
p("Network %d: SSID: %s, BSSID: %s, RSSI: %dn", i, config[i].ssid, config[i].bssid, config[i].rsnt);
} 然而,我无法连接到五个不同的WiFi网络。以下是我的代码: ```c #include void setup() { Serial.begin(115200); wifi_station_ap_number_set(5); WiFi.mode(WIFI_STA); } void loop() { int cnt = wifi_station_get_ap_info(config); printf("Number of known networks: %dn", cnt); for (int i = 0; i < cnt; i++) { printf("Network %d: SSID: %s, BSSID: %s, RSSI: %dn", i, config[i].ssid, config[i].bssid, config[i].rsnt); WiFi.begin(config[i].ssid, "your_password"); delay(5000); } } ``` 首先,我们需要确保ESP8266固件是最新的,因为旧版本的固件可能不支持连接到多个WiFi网络。接下来,我们将逐步分析和修改代码以实现连接到五个不同的WiFi网络。 1. 确保`config`数组的大小为5,因为你已经设置了最大网络数为5。 ```c struct station_config config[5]; ``` 2. 在`loop()`函数中,我们需要在连接到每个WiFi网络之前初始化`config`数组。我们可以将`wifi_station_get_ap_info()`函数的调用移到循环之前。 ```c void loop() { int cnt = wifi_station_get_ap_info(config); // ... } ``` 3. 在连接到每个WiFi网络之后,我们需要检查连接是否成功。我们可以使用`WiFi.status()`函数来检查连接状态。 ```c // ... for (int i = 0; i < cnt; i++) { // ... WiFi.begin(config[i].ssid, "your_password"); delay(5000); if (WiFi.status() == WL_CONNECTED) { printf("Connected to network %d: SSID: %sn", i, config[i].ssid); } else { printf("Failed to connect to network %d: SSID: %sn", i, config[i].ssid); } } ``` 4. 由于ESP8266只能同时连接到一个WiFi网络,我们需要在连接到下一个网络之前断开当前连接。我们可以使用`WiFi.disconnect()`函数来实现这一点。 ```c // ... if (WiFi.status() == WL_CONNECTED) { printf("Connected to network %d: SSID: %sn", i, config[i].ssid); WiFi.disconnect(); // Disconnect before connecting to the next network } else { printf("Failed to connect to network %d: SSID: %sn", i, config[i].ssid); } ``` 5. 最后,我们需要在每次连接尝试之间添加一些延迟,以确保ESP8266有足够的时间处理连接和断开连接的操作。 ```c // ... delay(10000); // Add a delay between connection attempts ``` 经过以上修改,你的代码应该如下所示: ```c #include struct station_config config[5]; void setup() { Serial.begin(115200); wifi_station_ap_number_set(5); WiFi.mode(WIFI_STA); } void loop() { int cnt = wifi_station_get_ap_info(config); printf("Number of known networks: %dn", cnt); for (int i = 0; i < cnt; i++) { printf("Network %d: SSID: %s, BSSID: %s, RSSI: %dn", i, config[i].ssid, config[i].bssid, config[i].rsnt); WiFi.begin(config[i].ssid, "your_password"); delay(5000); if (WiFi.status() == WL_CONNECTED) { printf("Connected to network %d: SSID: %sn", i, config[i].ssid); WiFi.disconnect(); // Disconnect before connecting to the next network } else { printf("Failed to connect to network %d: SSID: %sn", i, config[i].ssid); } delay(10000); // Add a delay between connection attempts } } ``` 现在,你的ESP8266应该能够尝试连接到五个不同的WiFi网络。请注意,由于ESP8266只能同时连接到一个WiFi网络,所以它不能真正同时连接到五个网络。但是,它可以在不同网络之间切换连接。 |
|
|
|
只有小组成员才能发言,加入小组>>
1118 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
461浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 18:49 , Processed in 0.890239 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号