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

mr_jing
Posts: 6
Joined: Fri Nov 19, 2021 3:16 am

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

Postby mr_jing » Fri Jan 14, 2022 10:04 am

我创建了一个供应商模型
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,直接传订阅分组地址就可以发布消息的?

ESP_@In逍遥子
Posts: 132
Joined: Thu Nov 15, 2018 2:06 am

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

Postby ESP_@In逍遥子 » Tue Jan 18, 2022 11:35 am

请参考 examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client 示例。
esp_ble_mesh_client_model_send_msg 函数返回失败
可以深入检查下,返回的错误值。

lpvanish
Posts: 2
Joined: Mon Aug 01, 2022 12:32 pm

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

Postby lpvanish » Wed Sep 07, 2022 7:51 pm

按照示例照搬都出错,完全没有搞明白哪里出来问题。。。。

Who is online

Users browsing this forum: No registered users and 62 guests