完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我遇到了一个有趣的问题,我试图解决这个问题,但我一直遇到死胡同,因为看起来 ESP8266WIFI.h 库是有限的,但我确信有一个解决方案。
所以,假设我有 6 个 ESP8266 + Arduino UNO 开发板。我想将其中的 3 个用作“服务器”(我们称它们为 S1、S2、S3),将其中的 3 个用作“客户端”(C1、C2、C3)(我不一定是指 WiFiServer 和 WiFiClient 对象)。 每个“客户端”必须能够向每个服务器发送请求,并且每个服务器必须能够回复每个客户端,因此连接(S1C1、S1C2、S1C3、S2C1、S2C2、S2C3、S3C1、S3C2、S3C3)必须积极点。 起初,我想过这样做: 在 S1、S2、S3 上激活 SoftAP 模式,并在每个上创建一个 WiFiServer 对象。 如果CX需要向SX发送请求: Wifi.begin(SX_ssid, SX_pass) -> 创建一个WifiClient对象 -> 与SX上的服务器交换数据 -> 关闭WifiClient对象 -> WiFi.disconnect() -> 重复 这样的连接并不总是活跃的。它们在需要时打开。 这与我在 ESP8266WiFiMesh 库的源代码中看到的非常相似。 这里的问题是开始和连接功能所花费的时间。 作为实验,我使用了 2 个 ESP8266 板:一个是带有 softAP 的服务器,另一个是客户端。在客户端板的 loop() 函数中,我执行了 WiFi.begin -> WiFiClient.connect -> WiFiClient.close -> WiFi.disconnect 序列。 平均而言,连接到服务器主板需要 10 秒,但有时也可能超过 20 秒,这对我的应用程序来说太糟糕了。 使用服务器 MAC 地址和手动 IP 地址,我设法获得了 1-3 秒的连接时间,这要好得多,但有时我仍然有 10 秒,而且 WiFiClient.connect() 函数有时会挂起,所以我的 while(WiFiClient.connected () != true) 循环会停止一切,因为服务器不会响应。 如果有人想尝试一下并自己查看结果,我已经附上了源代码。有两个设置循环对:一个用于“服务器”板,另一个用于“客户端”板。不要忘记输入您自己的 MAC 地址! 主要问题是: - 为什么 WiFiServer 会“挂起”(WiFiClient.connect() 永远不会连接)?使用 MAC 地址和手动 IP 是可以的,我可以接受。 - 是否有可能实际打开客户端和服务器之间的所有连接,以便在系统关闭之前我不需要再次开始或断开连接? - 什么是明智的“下一步”?我应该尝试不同的实验吗? 另外: 如果我在开发板处于 softAP 模式时创建一个 WiFiServer 对象(如我的示例),则可以通过 softAP IP 地址访问服务器。但是,如果我处于 station + softAP 模式怎么办?想象一下,我设置了一个 softAP,但使用不同的 AP 进行了 WiFi.begin。我创建的 WiFiServer 是否可以通过 softAP IP 地址或我通过 DHCP 从其他 AP 获得的地址访问? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
961 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
446浏览 5评论
447浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 16:56 , Processed in 0.805888 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号