使用gattc_client_demo 打开 hj580的notify 失败
使用gattc_client_demo 打开 hj580的notify 失败
1. hj580 是宏佳电子的基于DA14580 (蓝牙4.2)的透传芯片, ESP32(蓝牙4.2) 作为Client, 使用ESP-IDF (v4.2)的gattc_client 二次开发。
2. ESP32目前是可以发送 以及read 消息, 但不能打开notify 。 tx uuid rx uuid 以及handle 值和hj580的文档确认过。
3. 这个demo 测试过TB03F (蓝牙5.0) 以及DA14531(蓝牙5.0), 均是可以打开notify并通信的。
4. 我将ESP32 烧录官方的factory_WROOM-32.bin AT 固件, 通过AT指令写0x2902, 成功打开hj580的notify。
5. 后续测试了官方的另几个client example, 均不能打开notify。
2. ESP32目前是可以发送 以及read 消息, 但不能打开notify 。 tx uuid rx uuid 以及handle 值和hj580的文档确认过。
3. 这个demo 测试过TB03F (蓝牙5.0) 以及DA14531(蓝牙5.0), 均是可以打开notify并通信的。
4. 我将ESP32 烧录官方的factory_WROOM-32.bin AT 固件, 通过AT指令写0x2902, 成功打开hj580的notify。
5. 后续测试了官方的另几个client example, 均不能打开notify。
Re: 使用gattc_client_demo 打开 hj580的notify 失败
gatt_client 是特定与gatt_server 或者 gatt_server_service_table 相配合使用的,对其他 gatt server 并不适合
通过AT固件和 AT指令写0x2902,能成功打开hj580的notify,那在gatt_client 也能够实现,AT 中也是调用相应 gatt_client 中使用的 API 进行打开 hj580 的notify的 1. 你可以打印下 esp_ble_gattc_write_char_descr 的输入参数和返回值
2. gatt_client 写入时 和 AT 写入时的 hj580 打印的 log 有什么差异,hj580 应该加下对端写入 handle、connect_id 的 log
3.如果有条件也可以使用 抓包卡 进行抓包看下
通过AT固件和 AT指令写0x2902,能成功打开hj580的notify,那在gatt_client 也能够实现,AT 中也是调用相应 gatt_client 中使用的 API 进行打开 hj580 的notify的 1. 你可以打印下 esp_ble_gattc_write_char_descr 的输入参数和返回值
2. gatt_client 写入时 和 AT 写入时的 hj580 打印的 log 有什么差异,hj580 应该加下对端写入 handle、connect_id 的 log
3.如果有条件也可以使用 抓包卡 进行抓包看下
Re: 使用gattc_client_demo 打开 hj580的notify 失败
hj580使用透传固件, 没有串口及源码, esp32源码的参数已经比对过好几次,返回值及回调均显示写入成功。ESP_XuLZ wrote: ↑Tue Mar 01, 2022 8:15 amgatt_client 是特定与gatt_server 或者 gatt_server_service_table 相配合使用的,对其他 gatt server 并不适合
通过AT固件和 AT指令写0x2902,能成功打开hj580的notify,那在gatt_client 也能够实现,AT 中也是调用相应 gatt_client 中使用的 API 进行打开 hj580 的notify的
企业微信截图_20220301160625.png
1. 你可以打印下 esp_ble_gattc_write_char_descr 的输入参数和返回值
2. gatt_client 写入时 和 AT 写入时的 hj580 打印的 log 有什么差异,hj580 应该加下对端写入 handle、connect_id 的 log
3.如果有条件也可以使用 抓包卡 进行抓包看下
今天下午以使用AT指令完成通信
Re: 使用gattc_client_demo 打开 hj580的notify 失败
这个我向 AT 开发人员确认了 在 AT 中也是调用 esp_ble_gattc_write_char_descr 这个 API 使能的 notify
所以还是参数不对导致的,但是 AT 命令返回的不是 属性的 handle,是通过 service 和 char 的索引确定待操作的对象,而 gatt_client 的 API很多是通过 handle 来进行读写的, 所以很可能存在参数对应不上的问题
可以将使用 AT 固件打开 hj580 的 notify 的AT 指令完整的发下吗,如果能够抓包最好了
也可以使用手机 app nrf connect 连上 hj580 来确认 service 的结构
所以还是参数不对导致的,但是 AT 命令返回的不是 属性的 handle,是通过 service 和 char 的索引确定待操作的对象,而 gatt_client 的 API很多是通过 handle 来进行读写的, 所以很可能存在参数对应不上的问题
可以将使用 AT 固件打开 hj580 的 notify 的AT 指令完整的发下吗,如果能够抓包最好了
也可以使用手机 app nrf connect 连上 hj580 来确认 service 的结构
Re: 使用gattc_client_demo 打开 hj580的notify 失败
AT 固件使用的是factory_WROOM-32.binESP_XuLZ wrote: ↑Wed Mar 02, 2022 3:41 am这个我向 AT 开发人员确认了 在 AT 中也是调用 esp_ble_gattc_write_char_descr 这个 API 使能的 notify
所以还是参数不对导致的,但是 AT 命令返回的不是 属性的 handle,是通过 service 和 char 的索引确定待操作的对象,而 gatt_client 的 API很多是通过 handle 来进行读写的, 所以很可能存在参数对应不上的问题
可以将使用 AT 固件打开 hj580 的 notify 的AT 指令完整的发下吗,如果能够抓包最好了
也可以使用手机 app nrf connect 连上 hj580 来确认 service 的结构
命令 AT+BLEGATTCWR=<conn_index>,<srv_index>,<char_index>[,<desc_index>],<length>
直接像notify的uuid 的0x2902 写了两个字节的0x0100(大端顺序), 然后notify 就打开了。或者直接使用AT+SPP命令也是可以打开notify的。
ret_status = esp_ble_gattc_write_char_descr( gattc_if,
gl_profile_tab[PROFILE_A_APP_ID].conn_id,
descr_elem_result.handle,
sizeof(notify_en),
(uint8_t *)¬ify_en,
ESP_GATT_WRITE_TYPE_RSP,
ESP_GATT_AUTH_REQ_NONE);
代码是使用这一行操作的, 返回结果是ok, 回调的显示也是ok , notify_en 是uint16_t notify_en = 1;
我现在可能需要学一下蓝牙抓包, 这边也没人会用。
Re: 使用gattc_client_demo 打开 hj580的notify 失败
可能需要你抓下包来确认下 AT 指令和 这个 API 空中包的区别了。很大可能仍然是 handle 值不对, 比如如果使用这个 esp_ble_gattc_write_char_descr 去写 characteristic value 属性的 handle 也不会返回错误,因为本质都是对属性值写的一个 write request
或者你可以试试 handle + 1 看看是不是可以写入notify
或者你可以试试 handle + 1 看看是不是可以写入notify
Re: 使用gattc_client_demo 打开 hj580的notify 失败
您好 对不起打扰您了 请问您是如何实现读和写的呢
Re: 使用gattc_client_demo 打开 hj580的notify 失败
Gatt_client看了之后还是没搞明白 不清楚怎么可以往FF10Service中的FF11写数据 FF12读数据
Re: 使用gattc_client_demo 打开 hj580的notify 失败
在连接成功的回调里会首先发起一个寻找服务的请求,然后在找到服务的回调里查询需要的服务特征值esp_ble_gattc_search_service(gattc_if, param->cfg_mtu.conn_id, NULL); 可以使用过滤或者在所有结果里匹配, 结果在ESP_GATTC_SEARCH_RES_EVT 得到。
status = esp_ble_gattc_get_all_char( gattc_if,
p_data->search_cmpl.conn_id,
gl_profile_tab[PROFILE_A_APP_ID].service_start_handle,
gl_profile_tab[PROFILE_A_APP_ID].service_end_handle,
char_elem_result,
&count, 0);
可以寻找该服务特征值的所有子特征值。 若需打开notify 可调用 esp_ble_gattc_register_for_notify(gattc_if, gl_profile_tab[PROFILE_A_APP_ID].remote_bda, gl_profile_tab[PROFILE_A_APP_ID].char_handle);
打开notify。 写特征值需要调用esp_err_t state = esp_ble_gattc_write_char( gl_send_arg.gattc_if,
gl_send_arg.conn_id,
gl_send_arg.char_handle,
len,
buf,
gl_send_arg.write_type,
ESP_GATT_AUTH_REQ_NONE);
Who is online
Users browsing this forum: No registered users and 84 guests