Page 1 of 1

请问esp32c3,ble mesh 怎么向订阅的分组发布消息?

Posted: Fri Jan 14, 2022 10:04 am
by mr_jing
我创建了一个供应商模型
static esp_ble_mesh_model_t vnd_models[] = {
ESP_BLE_MESH_VENDOR_MODEL(CID_ESP, ESP_BLE_MESH_VND_MODEL_ID_SERVER,
vnd_op, NULL, &vendor_client),
};
发布消息的代码如下

Code: Select all

void example_ble_mesh_send_vendor_message(bool resend)
{
    esp_ble_mesh_msg_ctx_t ctx = {0};
    uint32_t opcode;
    esp_err_t err;

    ctx.net_idx = prov_key.net_idx;
    ctx.app_idx = prov_key.app_idx;
    ctx.addr = 0xc004;//store.server_addr;
    ctx.send_ttl = MSG_SEND_TTL;
    ctx.send_rel = MSG_SEND_REL;
    opcode = ESP_BLE_MESH_VND_MODEL_OP_SEND;

    if (resend == false) {
        store.vnd_tid++;
    }

    err = esp_ble_mesh_client_model_send_msg(vendor_client.model, &ctx, opcode,
            sizeof(store.vnd_tid), (uint8_t *)&store.vnd_tid, MSG_TIMEOUT, true, ROLE_NODE);
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Failed to send %06x %06x %06x %06x %06x", err,ctx.addr,opcode,ctx.net_idx,ctx.app_idx);
        return;
    }

    // mesh_example_info_store(); /* Store proper mesh example info */
}
我固定订阅分组地址为0xc004,但是esp_ble_mesh_client_model_send_msg函数返回失败,
调用这个api的第一个参数esp_ble_mesh_model_t *model,这个参数因该怎么填?(对于vnd_models模型而言)
我尝试过通用开关模型,传入onoff_server_0.model,就可以成功向订阅的分组发布消息,为什么vnd_models模型不可以.
有没有更加简单的api,直接传订阅分组地址就可以发布消息的?

Re: 请问esp32c3,ble mesh 怎么向订阅的分组发布消息?

Posted: Tue Jan 18, 2022 11:35 am
by ESP_@In逍遥子
请参考 examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client 示例。
esp_ble_mesh_client_model_send_msg 函数返回失败
可以深入检查下,返回的错误值。

Re: 请问esp32c3,ble mesh 怎么向订阅的分组发布消息?

Posted: Wed Sep 07, 2022 7:51 pm
by lpvanish
按照示例照搬都出错,完全没有搞明白哪里出来问题。。。。