GlenX 发表于 2025-5-21 09:00

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多次测试结果,希望大家引起重视。

GlenX 发表于 2025-5-23 09:52

esp_now 通讯,每秒32个字节仅发送,结果最少10-20次就失联了,做了各种排查和优化,现在能做到70个以上,有时能超过200次以上稳定,
但还是不满足稳定性需要,于是我增加通讯软件WDT,用esp_restart()对发送端重新启动建立连接,结果能运行小时级,但感觉还是不好,不知道是否可以采用setup()实现重新启动ESP,请大家参与讨论。
页: [1]
查看完整版本: ESP-NOWs使用小坑