参考例程;我测试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客户端;用来响应不同按键;该如何在发送信息的时候区分用哪个元素发出?
BLE-MESH 组播订阅丢包
Re: BLE-MESH 组播订阅丢包
是用的模组吗,还是自己做的板子,建议查下天线部分,一般丢包都是天线没有进行匹配导致的
Re: BLE-MESH 组播订阅丢包
由于发送时使用的是组播地址,没有ack和重传,所以只发一遍接收成功率会下降,一种解决方法是接收的地址开启relay功能,让接收到控制包的设备对消息进行转发:
提到的另外一个问题是可以实现的,/ble_mesh_node/onoff_server例程展示了如何使用一个节点,包含多个element,每个element包含各自medel的代码实现方法。
client端指定设备发送使用的model在发送时配置:[
Code: Select all
static esp_ble_mesh_cfg_srv_t config_server = {
...
.relay = ESP_BLE_MESH_RELAY_ENABLED,
...
};
client端指定设备发送使用的model在发送时配置:
Code: Select all
void example_ble_mesh_send_gen_onoff_set(void){
...
common.model = onoff_client.model; // 用于指定具体使用哪个model发送
...
}
-
- Posts: 132
- Joined: Thu Nov 15, 2018 2:06 am
Re: BLE-MESH 组播订阅丢包
请问问题是否已经解决?
你可以打开设备的 Info/Debug 等级日志,看看设备是否收到 发送端的 广播数据,并逐层检查。
你可以打开设备的 Info/Debug 等级日志,看看设备是否收到 发送端的 广播数据,并逐层检查。
Who is online
Users browsing this forum: No registered users and 157 guests