BLE-MESH 组播订阅丢包
Posted: Tue Aug 02, 2022 5:40 pm
参考例程;我测试BLE-mesh的通用on.off模型;在单播控制的时候,一切正常,但是当我将多个srv模型订阅到一个组播地址的时候;客户端发送控制命令,经常会出现部分服务端元素没有成功控制,出现没有项目的元素随机出现在不同的NODE上面;但是客户端和服务端都没有任何报错;我的测试NODE有11个元素,其中2-9是onoff服务端模型;设备之间距离很近;麻烦大神给个思路
//以下是客户端
esp_ble_mesh_generic_client_set_state_t set = {0};
esp_ble_mesh_client_common_param_t common = {0};
esp_err_t err = ESP_OK;
common.opcode = ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET_UNACK;
common.model = onoff_client_pub.model;
common.ctx.net_idx = store.net_idx;
common.ctx.app_idx = store.app_idx;
common.ctx.addr = msg_addr; /* 接收地址 */
common.ctx.send_ttl = 3;
common.ctx.send_rel = false;
common.msg_timeout = 0; /* 0 indicates that timeout value from menuconfig will be used */
common.msg_role = ROLE_NODE;
set.onoff_set.op_en = false; /* 设定服务器不用回复信息*/
set.onoff_set.onoff = msg_onoff;
set.onoff_set.tid = store.tid++;
err = esp_ble_mesh_generic_client_set_state(&common, &set);
if (err)
{
ESP_LOGE(TAG, "Send Generic OnOff Set Unack failed");
return;
}
另外我如果一个设备上面多个按键,可不可以建立多个元素的onoff客户端;用来响应不同按键;该如何在发送信息的时候区分用哪个元素发出?
//以下是客户端
esp_ble_mesh_generic_client_set_state_t set = {0};
esp_ble_mesh_client_common_param_t common = {0};
esp_err_t err = ESP_OK;
common.opcode = ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET_UNACK;
common.model = onoff_client_pub.model;
common.ctx.net_idx = store.net_idx;
common.ctx.app_idx = store.app_idx;
common.ctx.addr = msg_addr; /* 接收地址 */
common.ctx.send_ttl = 3;
common.ctx.send_rel = false;
common.msg_timeout = 0; /* 0 indicates that timeout value from menuconfig will be used */
common.msg_role = ROLE_NODE;
set.onoff_set.op_en = false; /* 设定服务器不用回复信息*/
set.onoff_set.onoff = msg_onoff;
set.onoff_set.tid = store.tid++;
err = esp_ble_mesh_generic_client_set_state(&common, &set);
if (err)
{
ESP_LOGE(TAG, "Send Generic OnOff Set Unack failed");
return;
}
另外我如果一个设备上面多个按键,可不可以建立多个元素的onoff客户端;用来响应不同按键;该如何在发送信息的时候区分用哪个元素发出?