完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用esp32-s3
版本idfv5.1.2 - 比如一个设备在 2 信道广播另一个设备在 1 3 信道也可以收到该包,并且包来源为信道 2 - esp now 我看文档里面说是有丢包的可能,所以需要在应用层确保可靠吗?那 send_cb 返回的状态是不能确保对方收到数据吗? |
|
相关推荐
2个回答
|
|
1. 这是由信道特性决定的,相邻信道的数据是有可能被读取到的。如果在程序中配置了辅助信道,比如相邻的信道被用作发送和接收时,分别配置了 WIFI_SECOND_CHAN_ABOVE 和 WIFI_SECOND_CHAN_BELOW,因为信道交叠更会出现所提到的情况。
2. ESP-NOW 没有自动重传。 3. 有关 send_cb: 调用 :cpp:func:`esp_now_send()` 发送 ESP-NOW 数据,调用 :cpp:func:`esp_now_register_send_cb` 注册发送回调函数。如果 MAC 层成功接收到数据,则该函数将返回 `ESP_NOW_SEND_SUCCESS` 事件。否则,它将返回 `ESP_NOW_SEND_FAIL`。ESP-NOW 数据发送失败可能有几种原因,比如目标设备不存在、设备的信道不相同、动作帧在传输过程中丢失等。应用层并不一定可以总能接收到数据。如果需要,应用层可在接收 ESP-NOW 数据时发回一个应答 (ACK) 数据。如果接收 ACK 数据超时,则将重新传输 ESP-NOW 数据。可以为 ESP-NOW 数据设置序列号,从而删除重复的数据。 如果有大量 ESP-NOW 数据要发送,调用 ``esp_now_send()`` 时需注意单次发送的数据不能超过 250 字节。请注意,两个 ESP-NOW 数据包的发送间隔太短可能导致回调函数返回混乱。因此,建议在等到上一次回调函数返回 ACK 后再发送下一个 ESP-NOW 数据。发送回调函数从高优先级的 Wi-Fi 任务中运行。因此,不要在回调函数中执行冗长的操作。相反,将必要的数据发布到队列,并交给优先级较低的任务处理。 |
|
|
|
ESP-NOW 是一种基于 Wi-Fi 的点对点通信协议,它允许设备之间直接发送数据包,而不需要通过接入点。在使用 ESP-NOW 时,设备可以选择在不同的信道上发送和接收数据。然而,由于无线信号的传播特性和信道之间的干扰,有时设备可能会收到相邻信道的数据包。
关于您提到的问题,以下是一些可能的原因和解决方案: 1. 信道干扰:由于无线信号的传播特性,信道之间的干扰可能导致设备接收到相邻信道的数据包。为了减少这种情况,您可以尝试在设备之间选择更远离的信道,或者使用信道扫描功能来找到最佳的信道。 2. 丢包问题:ESP-NOW 确实存在丢包的可能性,这可能是由于信号干扰、设备之间的距离过远或其他原因导致的。为了确保数据传输的可靠性,您可以在应用层实现一些机制,例如重传、确认和超时等。 3. send_cb 返回状态:send_cb 回调函数返回的状态表示数据包是否成功发送,但并不能确保对方已经收到数据。为了确保数据的可靠传输,您需要在应用层实现一些确认和重传机制。 总之,在使用 ESP-NOW 时,您需要注意信道选择、丢包问题以及应用层的可靠性机制。通过这些措施,您可以提高数据传输的可靠性和性能。 |
|
|
|
只有小组成员才能发言,加入小组>>
1153 浏览 1 评论
584浏览 6评论
480浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
465浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 16:58 , Processed in 1.052652 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号