D (1662) breeze: Breeze adv per device
D (1672) breeze: Breeze unbind
D (1672) breeze: need awss
I (1672) BREEZE_HAL_BLE: Local addr got (84:f7:03:0b:d3:c6).
I (1682) BREEZE_HAL_BLE: Starting advertising ADV.
I (1692) BREEZE_HAL_BLE: advertising start successfully
I (1692) BREEZE_HAL_BLE: Starting advertising SCAN_RSP.
I (1702) BREEZE_HAL_BLE: advertising start successfully
//初始化完毕,不断广播,至此开始等待连接
使用云智能App连接配网的后续LOG:
//App开始连接。
D (727152) HAL_BLE_APP_EVENT: event:14 //esp蓝牙连接事件
I (727152) BREEZE_HAL_BLE: ESP_GATTS_CONNECT_EVT, conn_id = 0
I (727152) BREEZE_HAL_BLE: 49 47 90 d6 12 31
D (727162) AIS_CORE_HANDLER: EVENT_CODE:0 //breeze的连接事件,从回调传递过来的
D (727162) COMBO_CHANGE: EVENT:0
dev_status_changed(): Connected.
I (727522) BREEZE_HAL_BLE: update connection params status = 0, min_int = 16, max_int = 32,conn_int = 6,latency = 0, timeout = 500 //第一次param update
D (727712) HAL_BLE_APP_EVENT: event:4
I (727712) BREEZE_HAL_BLE: ESP_GATTS_MTU_EVT, MTU 255 //MTU更新
D (727742) HAL_BLE_APP_EVENT: event:2 //esp write事件,写入IC_CCC,开启indicate
I (727742) BREEZE_HAL_BLE: GATT_WRITE_EVT, handle = 47, value len = 2, value :
I (727742) BREEZE_HAL_BLE: 02 00
D (727742) HAL_BLE_CCC_WRITE: IC:CCC_VALUE:2,PRESENT_VALUE:2
I (727782) BREEZE_HAL_BLE: update connection params status = 0, min_int = 0, max_int = 0,conn_int = 24,latency = 0, timeout = 400 //第二次param update
D (727792) HAL_BLE_APP_EVENT: event:2 //esp write事件,写入IC_CCC,开启indicate,第二次???
I (727792) BREEZE_HAL_BLE: GATT_WRITE_EVT, handle = 47, value len = 2, value :
I (727802) BREEZE_HAL_BLE: 02 00
D (727802) HAL_BLE_CCC_WRITE: IC:CCC_VALUE:2,PRESENT_VALUE:2
D (727842) HAL_BLE_APP_EVENT: event:2 //esp write事件,写入NC_CCC,开启notify
I (727842) BREEZE_HAL_BLE: GATT_WRITE_EVT, handle = 52, value len = 2, value :
I (727842) BREEZE_HAL_BLE: 01 00
D (727852) HAL_BLE_CCC_WRITE: NC:CCC_VALUE:1,PRESENT_VALUE:1
//breeze 内部回调处理
D (727852) breeze: Let's notify that service is enabled
D (727862) breeze: Breeze mtu:255, mpu:244
D (727862) breeze: [BZ auth]: start
//App 开始配网
//大约12%,手机端显示失败,断开连接
D (738792) HAL_BLE_APP_EVENT: event:15
I (738792) BREEZE_HAL_BLE: ESP_GATTS_DISCONNECT_EVT, reason = 0x13 //原因为手机端终止连接
D (738792) AIS_CORE_HANDLER: EVENT_CODE:1
D (738802) COMBO_CHANGE: EVENT:1
dev_status_changed(): Disconnected.
移植Breeze SDK进行蓝牙配网时,遇到了一些困难,十分苦恼。内容中日志较多,但都写了注解,还烦请各位不吝赐教。
运行环境
硬件:ESP32-C3-DevkitC以及mini等原厂模组
软件:Breeze SDK 2.0.7(BZ_VERSION="2.0.7",来自
ali-smartliving-device-alios-things-rel_1.6.6
),ESP-IDF4.4+FreeRTOS,BLE4.2协议栈,breeze_hal_xxx.c三个自己实现的。问题描述
我最近一直在向ESP32-C3芯片移植基于IDF+FreeRTOS的阿里Breeze SDK,以便接入生活物联平台以及使用公版
云智能APP
进行蓝牙辅助配网。在按照官方文档移植完主要的
hal/breeze_hal_xxx.c
这三个文件后,我将breeze这部分内容作为idf工程的component加入到一个空的工程中。并按照combo实例程序,将main.c
写为如下程序,用以测试连接与配网。测试主函数
Breeze作为component
为了符合idf工程要求,我将
breeze
放置于components
目录内,并为其编写了CMakeLists.txt用来测试,工程结构与CMakeLists如下:物联平台注册情况
注册节点类型为:设备
是否接入网关:否
联网方式:WiFi
配网方式选择蓝牙辅助配网,使用公版App
测试表现情况
nFR connect
使用nRF connect查看广播内容,按照文档中BLE 协议来看正常,raw data如下: 连接查看service以及characteristic如下,都符合AIS以及breeze要求: 使用nRF以及其他ble助手将不会断连,直到breeze内部AUTH的30s定时回调触发。
云智能App
可以搜到设备并正确显示名称、mac,点击右边加号进行配网,在输入WiFi密码之后等待到12%左右会失败。
在输入密码开始配网之后,设备将会被连接,紧接着App发起enable indicate 和 enable notify。
失败后连接将会断开,ESP32-C3端显示断开原因为:“terminated by peer”。而后得到错误码
101616+61601
,错误码字典显示原因为蓝牙连接失败,比较笼统。设备端LOG
设备端由于调试时间很长,开启的log很多。。。比如attr table等都打印出来了。
下面是注册的Attr table:
下面是初始化过程末期的部分LOG:
使用云智能App连接配网的后续LOG:
使用nRF connect连接的后续LOG:
如果使用nRF连接,则只会有:
两次更新,indicate 和 notify 可以通过手动开启。
如果使用某ble调试助手,也将会连接正常,将会自动开启indicate和notify。
一些疑问
在这个App断连问题上卡了挺长时间,各种LOG以及数据包都看不出原因,十分困惑。
0x10
通过0xFED5 Write characteristc
发送给设备,但实际上没有任何的write事件发生,这是为什么呢?感谢各位,希望能得到您的帮助和指导! @whwxxstsyd @luxuguang-leo @librae8226 @YiluMao @ElliottSeer