使用BLE的Characteristic来传递变量值,并在设备上使用方法来更改它。
例如,在使用Nordic nRF5 SDK for BLE的情况下,可以通过下面的方式来实现:
在蓝牙服务中定义一个Characteristic,用于传递变量值:
#define POWER_CHAR_VALUE_UUID 0x1234
#define POWER_CHAR_HANDLE 0x12
static uint8_t m_power_char_value = 0;
static void ble_power_service_init(void)
{
uint32_t err_code;
ble_uuid_t ble_uuid;
ble_uuid128_t power_base_uuid = POWER_SERVICE_UUID_BASE;
ble_uuid.type = BLE_UUID_TYPE_BLE;
ble_uuid.uuid = POWER_SERVICE_UUID;
err_code = sd_ble_uuid_vs_add(&power_base_uuid, &ble_uuid.type);
APP_ERROR_CHECK(err_code);
err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &ble_uuid, &m_power_service_handle);
APP_ERROR_CHECK(err_code);
ble_gatts_char_md_t char_md;
memset(&char_md, 0, sizeof(char_md));
char_md.char_props.read = 1;
char_md.char_props.write = 1;
ble_uuid.type = ble_uuid.type;
ble_uuid.uuid = POWER_CHAR_VALUE_UUID;
ble_gatts_attr_md_t attr_md;
memset(&attr_md, 0, sizeof(attr_md));
attr_md.vloc = BLE_GATTS_VLOC_STACK;
ble_gatts_attribute_t attr;
memset(&attr, 0, sizeof(attr));
attr.init_len = sizeof(m_power_char_value);
attr.max_len = sizeof(m_power_char_value);
attr.p_value = &m_power_char_value;
attr.p_uuid = &ble_uuid;
attr.p_attr_md = &attr_md;
err_code = sd_ble_gatts_characteristic_add(m_power_service_handle, &char_md, &attr, &m_power_char_handles);
APP_ERROR_CHECK(err_code);
}
然后,在设备的代码中实现一个方法,来更新变量值:
void change_power_value(uint8_t new_value