完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用串口接收数据然后调用espnow透传,espnow用广播方式发送,发现从调用esp_now_send之后到系统调用注册的espnow_send_cb之间总是有一个随机的延时存在,从10ms-50ms不等。整个例程代码一共只有串口接收和espnow接收两个任务,从串口接收到的数据立即会立即发送,发送器log如下:
�[0;31mE (1956376) uart_port: dt = 244�[0m �[0;31mE (1956379) my_espnow2: dt = 236�[0m �[0;31mE (1956620) uart_port: dt = 244�[0m �[0;31mE (1956628) my_espnow2: dt = 248�[0m �[0;31mE (1956864) uart_port: dt = 244�[0m �[0;31mE (1956866) my_espnow2: dt = 238�[0m �[0;31mE (1957108) uart_port: dt = 244�[0m �[0;31mE (1957114) my_espnow2: dt = 248�[0m �[0;31mE (1957352) uart_port: dt = 244�[0m �[0;31mE (1957359) my_espnow2: dt = 245�[0m �[0;31mE (1957596) uart_port: dt = 244�[0m �[0;31mE (1957653) my_espnow2: dt = 294�[0m �[0;31mE (1957840) uart_port: dt = 244�[0m �[0;31mE (1957842) my_espnow2: dt = 189�[0m �[0;31mE (1958084) uart_port: dt = 244�[0m 串口发送间隔是244ms。这个发送间隔计算写于串口接收之后、esp_now_send之前;espnow的发送完成间隔计算写于espnow_send_cb中,接收器的espnow接收任务中也计算了接收间隔,与发送端是匹配的。理想情况下,发送间隔是244ms,那么发送完成间隔也应该是244ms,接收间隔也应该是244ms,到底什么事件会产生这样一个延时?望指点。 我的开发板是esp32-c3,使用的idf版本是5.1.3,后来我又尝试用show example里的espnow例程来看发送是否存在延时,在espnow_send_cb计算了一下发送完成间隔。结论也是一样,发送间隔固定,但发送完成间隔不固定,最严重的时候有个30ms延迟。 随后我又在调用esp_now_send之后和系统调用espnow_send_cb之间计算了时间差,log如下: �[0;31mE (437617) my_espnow2: dt = 7�[0m �[0;31mE (437787) my_espnow2: dt = 3�[0m �[0;31mE (437949) my_espnow2: dt = 2�[0m �[0;31mE (438130) my_espnow2: dt = 10�[0m �[0;31mE (438336) my_espnow2: dt = 20�[0m �[0;31mE (438509) my_espnow2: dt = 6�[0m �[0;31mE (438674) my_espnow2: dt = 2�[0m �[0;31mE (438848) my_espnow2: dt = 11�[0m �[0;31mE (439023) my_espnow2: dt = 12�[0m �[0;31mE (439198) my_espnow2: dt = 2�[0m �[0;31mE (439362) my_espnow2: dt = 2�[0m �[0;31mE (439534) my_espnow2: dt = 6�[0m �[0;31mE (439704) my_espnow2: dt = 2�[0m �[0;31mE (439896) my_espnow2: dt = 2�[0m �[0;31mE (440063) my_espnow2: dt = 5�[0m �[0;31mE (440254) my_espnow2: dt = 11�[0m �[0;31mE (440414) my_espnow2: dt = 2�[0m �[0;31mE (440581) my_espnow2: dt = 3�[0m �[0;31mE (440772) my_espnow2: dt = 31�[0m 发送完成时间间隔十分随机,甚至有长达31ms的,有什么办法或者配置可以消除这种随机性,让数据可以立即发出么? |
|
相关推荐
1个回答
|
|
ESP-NOW(ESP Open Now)是一种基于ESP8266和ESP32的轻量级Wi-Fi通信协议,用于实现设备之间的快速、低延迟的数据传输。然而,在实际应用中,可能会出现延时问题。针对您所描述的情况,以下是一些建议和解决方案:
1. **优化代码结构**:确保您的代码结构简洁且高效。避免在ESP-NOW发送和接收过程中使用复杂的逻辑或大量的数据处理,这可能会导致延时。 2. **降低数据包大小**:尝试减小ESP-NOW传输的数据包大小。较大的数据包可能会导致传输延迟,尤其是在网络环境不佳的情况下。 3. **调整ESP-NOW参数**:您可以尝试调整ESP-NOW的一些参数,如传输速率、信道等,以找到最佳的传输性能。 4. **使用任务调度**:如果您的系统中有多个任务,可以考虑使用任务调度来优化任务执行顺序,以减少ESP-NOW发送和接收的延时。 5. **检查硬件连接**:确保您的硬件连接稳定且无干扰。不稳定的硬件连接可能会导致数据传输延迟。 6. **使用中断**:在ESP-NOW发送和接收过程中,可以考虑使用中断来处理数据,以减少延时。 7. **调试和日志记录**:在代码中添加调试信息和日志记录,以帮助您更好地了解ESP-NOW发送和接收过程中的延时情况。这可以帮助您找到可能导致延时的原因,并采取相应的优化措施。 8. **升级固件和库**:确保您的ESP8266或ESP32设备使用的是最新版本的固件和ESP-NOW库。新版本的固件和库可能会修复一些已知的问题,从而提高传输性能。 9. **减少广播次数**:如果可能,尝试减少ESP-NOW广播的次数。过多的广播可能会导致网络拥塞,从而增加延时。 10. **考虑使用其他通信协议**:如果ESP-NOW无法满足您的需求,您可以考虑使用其他通信协议,如BLE(蓝牙低功耗)或Zigbee,这些协议可能更适合您的应用场景。 总之,解决ESP-NOW发送延时问题需要综合考虑多个因素。通过优化代码、调整参数、使用任务调度等方法,您可以尽量减少ESP-NOW发送和接收过程中的延时。同时,确保硬件连接稳定,使用最新版本的固件和库,以及考虑使用其他通信协议,也是提高传输性能的有效方法。 |
|
|
|
只有小组成员才能发言,加入小组>>
313 浏览 0 评论
1170 浏览 1 评论
585浏览 6评论
483浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
442浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 03:05 , Processed in 0.903958 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号