ESP-NOWs使用小坑
1. 接收回调函数:// 注册接收回调函数,
例程回调函数是:esp_now_register_recv_cb(OnDataRecv); 没有错误,可以就是无法编译!
最后找到官贴,才发现新版本需要将OnDataRecv 改写成:esp_now_recv_cb_t(OnDataRecv)
这版本改的真玄妙!?
2. 接收指针变量问题:
// 数据接收回调函数
void OnDataRecv(const uint8_t *mac, const uint8_t *data, int len) {
FloatData receivedData;
// 复制接收到的数据到结构体(注意:data已经是指针了,前不能加& !!!)
memcpy(&receivedData, data, sizeof(receivedData));
}
结果我“COPY”的例程中在变量转移采用的是:memcpy(&receivedData, &data, sizeof(receivedData));
&data改变了指针的性质,导致接收到的数据与发送不相关,但却是“同步”接收正常。
3. 发送方如果有为了节电,采用LITGH SLEEP定时唤醒,则休眠不能大于1秒,否则网络判断为“失恋”,丢帧率大于90%.
_______________________________________________________________________________________
以上是反复长时间测试的结果,不代表产品质量问题,
仅是esp_now多次测试结果,希望大家引起重视。 esp_now 通讯,每秒32个字节仅发送,结果最少10-20次就失联了,做了各种排查和优化,现在能做到70个以上,有时能超过200次以上稳定,
但还是不满足稳定性需要,于是我增加通讯软件WDT,用esp_restart()对发送端重新启动建立连接,结果能运行小时级,但感觉还是不好,不知道是否可以采用setup()实现重新启动ESP,请大家参与讨论。
页:
[1]