ESP32_NOW Control Demo使用指南

前言:

最近学习了一下ESP32_NOW的通讯,发现例程有点难懂,现在从esp32_now 中的Control例程来解析一下它的程序思路。

作为新手去看它官方文档,感觉最缺的就是这个程序的整体流程。

虽然例程直接编译就可以工作,却没有一个操作说明,让人不知所措,经过一番折腾总结经验如下。

前提条件:

将程序编译完成并且下载到ESP32 DEMO板上(必须两个板以上才以通信),最好能看到日志并判断已经正常工作。

下面是操作步骤:

1、一块板作为控制设备,只需要操作这块板的控制按键即可,注意一定要等被控制设备开机后才能双击控制按键。

2、另一块板为被控制设备,只需要按重启键并靠近控制设备。

3、以上准备好之后,被控制设备重启后,在20秒内双击控制设备按键此时开始绑定,这样才能绑定成功。

如果没有成功,需要重新长按控制设备按键(>2秒)取消绑定,才能再次进行绑定。

4、绑定成功后单击控制设备键会发送控制命令,被控制设备会处理命令并改变LED状态。

5、绑定后数据会被保存,控制设备重启后,还需要双击一下后再单击才能发送控制命令。

重要:被控制设备怎么才能绑定?是根据开机时间和rssi的信号强弱来确定的。靠的近一些、开机就立即绑定。实际应用中这些参数可以设置的更严格些,缩小绑定范围,防止误绑定其它设备。

这些参数通过下面函数更改:

static void app_responder_init(void)
{
    ESP_ERROR_CHECK(espnow_ctrl_responder_bind(15 * 1000, -45, NULL));  // 设置符合绑定设备条件参数(rssi >-45和开机20秒内)
    espnow_ctrl_responder_data(app_responder_ctrl_data_cb);     // 注册控制数据包处理事件回调函数
}

功能说明:

控制设备方通过双击按键发送绑定设备命令和单击发送控制命令。

接收方收到控制命令后RGB LED会显示对应状态。

绑定设备:

双击按钮,所有收到命令并符合条件的设备将被绑定。(可同时绑定多台设备)

需要绑定的设备一定要符合条件才能被绑定 。如:开机时间<20秒,RSSI>-45。通过条件可以排除不需要绑定的设备。

如果绑定不成功可将控制设备解绑或重启,并将被绑定设备重启设备和靠近,再进行绑定操作。(不能重复绑定,只能解绑后或重启后才能再绑定操作)

可以通过日志查看绑定不成功原因。

解绑:

长按按钮,能收到信号的设备将被解绑,未收到数据的设备将无法解绑(可以重复解绑)。

控制:

控制设备只有在双击之后,才能控制被绑定设备。重新启动后,即使已经绑定也需要双击。(程序限制)

控制设备单击控制对方设备LED状态。

程序优化:

针对原示例程序的难懂之处,进行了优化并增加中文注释和中文日志。

现将修改后的操作日志和示例展示如下:

A 被控制设备日志:

设备启动

I (419) espnow: Enable main task

I (419) espnow: main task entry

I (419) espnow_ctrl: 注册绑定解绑回调:

I (419) espnow_ctrl: 注册控制数据包回调

I (419) main_task: Returned from app_main()

超出绑定条件,绑定失败

I (160539) espnow_ctrl: bind, 系统时间: 160539, 设置时间: 15419, 设备rssi: -29, 设置rssi: -45

I (160539) espnow_ctrl: 绑定数据包处理

I (160539) espnow_ctrl: 执行绑定事件处理回调函数,未注册回调,径直处理

I (160539) espnow_ctrl: 超出绑定条件参数范围:系统时间>设置时间 失败,未绑定退出

符合绑定条件,绑定成功

I (419) espnow: main task entry

I (419) espnow_ctrl: 注册绑定解绑回调:

I (419) espnow_ctrl: 注册控制数据包回调

I (419) main_task: Returned from app_main()

I (4629) espnow_ctrl: bind, 系统时间: 4629, 设置时间: 15419, 设备rssi: -32, 设置rssi: -45

I (4629) espnow_ctrl: 解绑数据包处理

I (4629) app_main: espnow事件处理

I (4629) app_main: 控制解绑

I (4629) app_main: unbind, uuid: a8:03:2a:4b:19:4c, initiator_type: 513

I (5879) espnow_ctrl: bind, 系统时间: 5879, 设置时间: 15419, 设备rssi: -29, 设置rssi: -45

I (5879) espnow_ctrl: 绑定数据包处理

I (5879) espnow_ctrl: 执行绑定事件处理回调函数,未注册回调,直接处理

I (5879) control_func: addr: a8:03:2a:4b:19:4c, initiator_type: 2, initiator_value: 1

I (5879) espnow_ctrl: 查询是否注册绑定列表MAC=

I (5879) espnow_ctrl: a8 03 2a 4b 19 4c

I (5879) espnow_ctrl: MAC未注册

I (5879) app_main: espnow事件处理

I (5879) app_main: 控制绑定

I (5879) app_main: bind, uuid: a8:03:2a:4b:19:4c, initiator_type: 513

I (5889) espnow_ctrl: 绑定成功

单击控制

I (74719) espnow_ctrl: 接收到数据包:

I (74719) espnow_ctrl: src_addr: a8:03:2a:4b:19:4c, espnow_ctrl_responder_recv, value: 0

I (74719) espnow_ctrl: 查询是否注册绑定列表MAC=

I (74719) espnow_ctrl: a8 03 2a 4b 19 4c

I (74719) espnow_ctrl: 此设备已经注册

I (74719) espnow_ctrl: 处理接收数据包:data_cb

I (74719) app_main: app_responder_ctrl_data_cb, initiator_attribute: 513, responder_attribute: 1, value: 0

I (74719) app_main: 输出LED颜色0,0,0

I (74719) app_main: Led Out Red:0, Green:0, Blue:255

I (74719) espnow_ctrl: 处理接收数据包:data_raw_cb

I (74719) espnow_ctrl: 未注册此回调:data_raw_cb

B 控制设备日志:

设备启动

I (388) espnow: main task entry

I (388) espnow_ctrl: 注册绑定解绑回调:

I (388) espnow_ctrl: 注册控制数据包回调

I (388) main_task: Returned from app_main()

单击

I (34268) app_main: 按键单击ctrl_status=APP_ESPNOW_CTRL_INIT

I (34268) app_main: 请先双击绑定设备

再单击

I (36088) app_main: 按键单击ctrl_status=APP_ESPNOW_CTRL_INIT

I (36088) app_main: 请先双击绑定设备

双击

I (59338) app_main: 按键双击,ctrl_status=APP_ESPNOW_CTRL_INIT

I (59338) app_main: initiator bind press

再双击

I (82978) app_main: 按键双击,ctrl_status=APP_ESPNOW_CTRL_BOUND

I (82978) app_main: 该设备已处于绑定状态

单击控制

I (102208) app_main: 按键单击ctrl_status=APP_ESPNOW_CTRL_BOUND

I (102208) app_main: initiator send press

修改后的代码更直白,容易上手,适合边实验操作边理解代码,加快代码运用。

附上修改后源码:esp32_now_control.rar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值