请问esp32c3,ble mesh 怎么向订阅的分组发布消息?
Posted: 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),
};
发布消息的代码如下
我固定订阅分组地址为0xc004,但是esp_ble_mesh_client_model_send_msg函数返回失败,
调用这个api的第一个参数esp_ble_mesh_model_t *model,这个参数因该怎么填?(对于vnd_models模型而言)
我尝试过通用开关模型,传入onoff_server_0.model,就可以成功向订阅的分组发布消息,为什么vnd_models模型不可以.
有没有更加简单的api,直接传订阅分组地址就可以发布消息的?
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 */
}
调用这个api的第一个参数esp_ble_mesh_model_t *model,这个参数因该怎么填?(对于vnd_models模型而言)
我尝试过通用开关模型,传入onoff_server_0.model,就可以成功向订阅的分组发布消息,为什么vnd_models模型不可以.
有没有更加简单的api,直接传订阅分组地址就可以发布消息的?