完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
蓝牙中开启自定义服务之后,添加了一个子服务,怎么添加第二子服务啊
按照我的理解,在创建第一个子服务时候,改变属性以及UUID后再添加一次就可以,但是不行啊; case ESP_GATTS_CREATE_EVT: ESP_LOGE(GATTS_TAG, "CREATE_SERVICE_EVT, status %d, service_handle %dn", param->create.status, param->create.service_handle); // ESP_LOGI(GATTS_TAG, "CREATE_SERVICE_EVT, status %d, service_handle %dn", param->create.status, param->create.service_handle); gl_profile_tab[PROFILE_A_APP_ID].service_handle = param->create.service_handle; gl_profile_tab[PROFILE_A_APP_ID].char_uuid.len = ESP_UUID_LEN_128; // gl_profile_tab[PROFILE_A_APP_ID].char_uuid.uuid.uuid16 = GATTS_CHAR_UUID_TEST_A; for (int i = 0; i < 16; i++) { /* code */ gl_profile_tab[PROFILE_A_APP_ID].char_uuid.uuid.uuid128 = adv_service_uuid128; } esp_ble_gatts_start_service(gl_profile_tab[PROFILE_A_APP_ID].service_handle); a_property = ESP_GATT_CHAR_PROP_BIT_WRITE | ESP_GATT_CHAR_PROP_BIT_NOtiFY;//ESP_GATT_CHAR_PROP_BIT_READ | ESP_GATT_CHAR_PROP_BIT_WRITE | ESP_GATT_CHAR_PROP_BIT_NOTIFY; esp_err_t add_char_ret = esp_ble_gatts_add_char(gl_profile_tab[PROFILE_A_APP_ID].service_handle, &gl_profile_tab[PROFILE_A_APP_ID].char_uuid, ESP_GATT_PERM_WRITE,///ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, a_property, &gatts_demo_char1_val, NULL); if (add_char_ret){ ESP_LOGE(GATTS_TAG, "add char failed, error code =%x",add_char_ret); } |
|
相关推荐
1个回答
|
|
|
在蓝牙中,创建自定义服务和子服务的过程通常涉及到几个关键步骤。根据您的描述,您已经成功创建了一个子服务,现在想要添加第二个子服务。以下是详细的步骤和解释:
1. 首先,确保您已经创建了一个自定义服务。在ESP_GATTS_CREATE_EVT事件中,您应该已经获得了服务句柄(service_handle)。 2. 创建第一个子服务。在创建子服务时,您需要为子服务分配一个唯一的UUID,并设置相应的属性。这可以通过调用`esp_ble_gatts_add_char()`函数来实现。例如: ```c esp_attr_value_t char1_val = { .attr_max_len = CHAR1_LEN, .attr_len = CHAR1_LEN, .value = char1_data, }; esp_err_t add_char1_ret = esp_ble_gatts_add_char(service_handle, &char1_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, &char1_val, NULL, NULL); ``` 3. 现在,要添加第二个子服务,您需要为第二个子服务分配一个新的UUID,并设置相应的属性。您可以使用与创建第一个子服务相同的函数,但需要更改UUID和属性。例如: ```c esp_attr_value_t char2_val = { .attr_max_len = CHAR2_LEN, .attr_len = CHAR2_LEN, .value = char2_data, }; esp_err_t add_char2_ret = esp_ble_gatts_add_char(service_handle, &char2_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, &char2_val, NULL, NULL); ``` 请注意,`char2_uuid`应该是一个与`char1_uuid`不同的唯一标识符。 4. 在ESP_GATTS_ADD_CHAR_EVT事件中,检查第二个子服务的创建状态。如果状态为成功,您将获得第二个子服务的句柄。您可以使用这个句柄来进一步操作或设置通知等。 5. 如果您遇到问题,确保检查ESP_LOGE(GATTS_TAG, ...)中的日志信息,以获取有关错误的详细信息。这将帮助您诊断问题并找到解决方案。 总之,要添加第二个子服务,您需要为它分配一个新的UUID,并使用相同的函数(如`esp_ble_gatts_add_char()`)来创建子服务。确保在创建子服务时更改UUID和属性,以便正确地创建和管理多个子服务。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
945 浏览 0 评论
1672 浏览 0 评论
请问一下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
1330 浏览 1 评论
1233 浏览 1 评论
5021 浏览 2 评论
为blufi_device设置自定义名称,但是无法修改,为什么?
1252浏览 4评论
请问ESP32-S2-WROOM怎么获得ESP32-S2外接FLASH的唯一序列号?
927浏览 3评论
2336浏览 3评论
ESP-IDF的VScode插件的build按钮点击会报错的原因?
2526浏览 3评论
ESP-Jumpstart例程中第5个工程:5_cloud连接报错是哪里的问题?
1051浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:52 , Processed in 0.667897 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
601
