esp_now_register_send_cb的回调函数能否给出更多信息

kaisey
Posts: 81
Joined: Tue Mar 24, 2020 5:54 am

esp_now_register_send_cb的回调函数能否给出更多信息

Postby kaisey » Wed May 19, 2021 8:02 am

typedef void (*esp_now_send_cb_t)(const uint8_t *mac_addr, esp_now_send_status_t status);
这个函数的参数能否多一个发送的缓冲区,因为如果我发送数据很频繁,来不及等发送完成就要发送下一个数据包,在发送队列里就有多个发送缓冲区,
这样我们才能知道什么时候可以释放或者修改这个缓冲区,

ESP_Bond
Posts: 51
Joined: Mon Apr 15, 2019 1:37 pm

Re: esp_now_register_send_cb的回调函数能否给出更多信息

Postby ESP_Bond » Thu May 20, 2021 10:33 am

两个 ESP-NOW 数据包的发送间隔太短可能导致回调函数返回混乱。因此,建议在等到上一次回调函数返回 ACK 后再发送下一个 ESP-NOW 数据
ESP-NOW 通常用于低速率的数据传输,如果你要频繁的发送数据可以描述一下你的使用场景吗?

kaisey
Posts: 81
Joined: Tue Mar 24, 2020 5:54 am

Re: esp_now_register_send_cb的回调函数能否给出更多信息

Postby kaisey » Fri May 21, 2021 12:42 am

我们是采集大概100MS的音频数据,压缩后通过广播发送出去,
延时不能超过300MS,允许偶尔丢包,

如果不返回缓冲区,我只能开一个大队列盲写了,
其实回调返回MAC地址不如返回缓冲区地址,因为一般应用场景都是往固定的地址发送数据,如果要等到返回了才发第2包,那不符合异步处理的方法,会严重影响传输效率,

至于传输发送是否成功我觉得应该在应用层做,因为这函数应该是指是否发送成功,并不是对方的应用层是否收到了数据,

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp_now_register_send_cb的回调函数能否给出更多信息

Postby ESP_Gargamel » Fri May 21, 2021 11:00 am

WiFi 底层是可以设比较大的 TX buffer 的,Component config → Wi-Fi 下的 Max number of WiFi dynamic TX buffers,考虑到你的应用场景仅使用 esp-now,可以往最大设。
这里就看你上层发送速度和底层发送速度谁快了,比如底层 1Mbps 发,你上层可以以最快多少发,需要做些测试,有可能盲发也是可以的。另外,有条件的话,可以通过抓包查看发送情况。

kaisey
Posts: 81
Joined: Tue Mar 24, 2020 5:54 am

Re: esp_now_register_send_cb的回调函数能否给出更多信息

Postby kaisey » Sun May 23, 2021 3:53 am

那在esp_err_t esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)函数返回的时候,data里的数据是否已经在WIFI底层的TX buffer了,还是在esp_now_send_cb的时候才在WIFI底层的TX buffer里,

如果是在esp_now_send返回的时候就在WIFI的TX buffer里了,我就可以不用申请内存空间,

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp_now_register_send_cb的回调函数能否给出更多信息

Postby ESP_Gargamel » Mon May 24, 2021 2:30 am

是的,send 返回正确的话,数据已经丢到底层的 buffer 里了,如果底层没有 buffer 的话,会返回 ESP_ERR_ESPNOW_NO_MEM。

Who is online

Users browsing this forum: Bing [Bot] and 37 guests