ESP32-C3 BLE标准ESS服务0x181A:如何正确发送25.63℃温度值?
BLE ESS服务温度值发送格式问题
环境信息
- 硬件(BLE服务器):ESP32-C3-DevKitM-1
- 移动应用(BLE客户端):nRF Connect
- 示例代码:Gatt_Server_Service_Table
- 开发环境:ESP-IDE
我需要实现BLE标准环境传感服务(ESS 0x181A)及其温度测量特征(0x2A1C)。当前遇到的问题是:如何以正确格式发送25.63℃这类浮点温度值?当我使用uint8_t ess_temperature[] = {0x00, 0x03, 0x0A, 0x00,0x00};时,客户端显示2563.00℃,但我需要显示25.63℃。
相关代码
enum{ ESS_SERVICE, ESS_TEMPERATURE_CHAR, ESS_TEMPERATURE_VALUE, ESS_TEMPERATURE_CFG, ESS_HUMIDITY_SERVICE, ESS_HUMIDITY_VAL, ESS_HUMIDITY_CFG, ESS_IDX_NB, }; // =============== ESS Service =============== static const uint16_t GATTS_SERVICE_UUID_ESS = 0x181A; static const uint16_t GATTS_CHAR_UUID_ESS_TEMPERATURE = 0x2A1C; static const uint16_t GATTS_CHAR_UUID_ESS_HUMIDITY = 0x2A6F; //static const uint8_t ess_temperature[2] = {0x19, 0x05}; // = 25.5 degC // static const uint8_t ess_temperature_ccc[2] = {0x00, 0x00}; //static const uint8_t ess_humidity[2] = {0x0B, 0x05}; // = 11.5% // static const uint8_t ess_humidity_ccc[2] = {0x00, 0x00}; uint8_t ess_temperature[5] = {0x00,0x41, 0x33, 0xB9, 0xD7}; static const uint16_t ess_humidity = 3556; // nRF Connect App will divide this value by 100. For example, if we use 3654, App will show 36.54% humidity static const esp_gatts_attr_db_t ess_gatt_db[ESS_IDX_NB] = { [ESS_SERVICE] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&primary_service_uuid, ESP_GATT_PERM_READ, sizeof(uint16_t), sizeof(GATTS_SERVICE_UUID_ESS), (uint8_t *)&GATTS_SERVICE_UUID_ESS}}, // Temperature ------------------------------------------------- [ESS_TEMPERATURE_CHAR] = {{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}}, [ESS_TEMPERATURE_VALUE] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&GATTS_CHAR_UUID_ESS_TEMPERATURE, ESP_GATT_PERM_READ, GATTS_DEMO_CHAR_VAL_LEN_MAX, sizeof(ess_temperature), (uint8_t *)&ess_temperature}}, [ESS_TEMPERATURE_CFG] = {{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(cccd_disable_notify_indicate), (uint8_t *)cccd_disable_notify_indicate}}, // Humidity ------------------------------------------- [ESS_HUMIDITY_SERVICE] = {{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}}, [ESS_HUMIDITY_VAL] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&GATTS_CHAR_UUID_ESS_HUMIDITY, ESP_GATT_PERM_READ, GATTS_DEMO_CHAR_VAL_LEN_MAX, sizeof(ess_humidity), (uint8_t *)&ess_humidity}}, [ESS_HUMIDITY_CFG] = {{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(cccd_disable_notify_indicate), (uint8_t *)cccd_disable_notify_indicate}}, };
客户端显示截图

内容的提问来源于stack exchange,提问作者Steven Wang
相关产品推荐
相关产品推荐

