一、只读属性添加
1、vscode环境实现。
2、添加一个只读蓝牙服务。
添加char_prop_read属性设置只读。
3、编译烧录到esp32开发板。
4、蓝牙调试。
打开手机蓝牙调试器发现有特征uuid:0xFF04。
接收数据:
接收数据的参数配置位置和数据源。
参数设置位置(char_value):
/* Characteristic Declaration */
[IDX_CHAR_D] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ,
CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read}},
/* Characteristic Value */
[IDX_CHAR_VAL_D] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&GATTS_CHAR_UUID_TEST_D, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE,
GATTS_DEMO_CHAR_VAL_LEN_MAX, sizeof(char_value), (uint8_t *)char_value}},
5、自定义发送参数,向client发送字符串。
自定义字符串数据。
在发送函数中配置参数
/* Characteristic Value */
[IDX_CHAR_VAL_D] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&GATTS_CHAR_UUID_TEST_D, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE,
GATTS_DEMO_CHAR_VAL_LEN_MAX, sizeof(c_string_value), (uint8_t *)c_string_value}},
蓝牙调试app接收到的数据
二、通知属性,只写属性
添加服务类型
为服务类型添加uuid
为服务添加特征值步骤一样。
三、添加服务
添加服务包含的特征值
添加新服务的uuid
添加“表”。
const esp_gatts_attr_db_t gatt_db_BATTERY[IDX_BATTERY_MAX] =
{
// Service Declaration
[IDX_SVC] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&primary_service_uuid, ESP_GATT_PERM_READ, sizeof(uint16_t), sizeof(GATT_UUID_BATTERY_SVC), (uint8_t *)&GATT_UUID_BATTERY_SVC}},
/* Characteristic Declaration */
[IDX_CHAR_A] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_write_notify}},
/* Characteristic Value */
[IDX_CHAR_VAL_A] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&GATT_UUID_BATTERY_CHAR, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, GATTS_DEMO_CHAR_VAL_LEN_MAX, sizeof(char_value), (uint8_t *)char_value}},
/* Client Characteristic Configuration Descriptor */
[IDX_CHAR_CFG_A] =
{{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&character_client_config_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, sizeof(uint16_t), sizeof(heart_measurement_ccc), (uint8_t *)heart_measurement_ccc}},
};
“注册表”,实际上是在函数中引入。
/*db注册*/
esp_err_t create_attr_ret_2 = esp_ble_gatts_create_attr_tab(gatt_db_BATTERY, gatts_if, IDX_BATTERY_MAX, 1);
if (create_attr_ret_2)
{
ESP_LOGE(GATTS_TABLE_TAG, "gatt_BATT_db create attr table failed, error code = %x", create_attr_ret_2);
}
else
{
ESP_LOGI(GATTS_TABLE_TAG, "create ok");
}