完善资料让更多小伙伴认识你,还能领取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网络,所以它不能真正同时连接到五个网络。但是,它可以在不同网络之间切换连接。 |
|
|
|
只有小组成员才能发言,加入小组>>
232个成员聚集在这个小组
加入小组568 浏览 1 评论
2717 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
497浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
275浏览 3评论
1097浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
288浏览 2评论
用AT+CIPSNTPCFG=1,8,\"cn.ntp.org.cn\",\"ntp.sjtu.edu.cn\"更新不了时间怎么处理?
776浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-5-16 18:25 , Processed in 0.754620 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191