ble gatt 通讯过程详解(基于esp32和nordic)
最近完成了esp32 自动扫描nordic设备的广播名称,并跟nordic uart server通讯的功能。
esp32 :ble uart client, gatt_client
nordic:ble uart server (NUS), gatt_server
要点
- 要注意UUID表示成数组时的高低序,刚开始一直在排查代码,导致在这里浪费了好多时间。
- 获取正确的UUID,以及char的数量和properties,可以通过第三方LightBlue来获取这些信息。
说明:因为通讯的交互过程跟char的数量以及属性有关系的,有几个char,是只读还是读写等,这些都对应不同的交互流程。 所以以下的内容过程就是针对nordic NUS的特征的而撰写的,如果你自己的设备有所不同,要灵活调整,不可生搬硬套,重要的是理解gatt本质。
nordic NUS服务配置
说明:ca9e 是nordic的蓝牙串口服务 NUS,下面有两个 char。 RX uuid 是0002,属性是write 和write without response, TX uuid 是0003,属性是notify。
通讯交互流程图
说明
- 本来想文字再详细的说明下流程,发现上面的图已经表达的很清晰了,就没必要了,看图反而更直观。
- 以上的流程是标准参考流程,开发时,根据实际的产品流程需求,可以重新打断和组合,实现新的流程。
- 业务层实际的交互数据是在 esp_ble_gattc_write_char_descr过程中完成的。
- 因为整个流程是一环扣一环的,所以如果开发中发现结果不对,就是哪一步错误了或者遗漏触发了,可以参考以上的流程和代码来核对。
- 以上的内容对应gattc_demo的例子,可以从esp官网下载和确认。