完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
找到一个 esp_ble_mesh_model_publish(),但是试了好多办法,都没有成功,
esp_ble_mesh_model_pub_t vendor_model_pub_config;static const esp_ble_mesh_client_op_pair_t vnd_op_pair[] = { { ESP_BLE_MESH_VND_MODEL_OP_SEND, ESP_BLE_MESH_VND_MODEL_OP_STATUS },};static esp_ble_mesh_client_t vendor_client = { .op_pair_size = ARRAY_SIZE(vnd_op_pair), .op_pair = vnd_op_pair,};static esp_ble_mesh_model_op_t vnd_op_status[] = { ESP_BLE_MESH_MODEL_OP(ESP_BLE_MESH_VND_MODEL_OP_STATUS, 2), ESP_BLE_MESH_MODEL_OP_END,};static esp_ble_mesh_model_t vnd_models_cli[] = { ESP_BLE_MESH_VENDOR_MODEL(CID_ESP, ESP_BLE_MESH_VND_MODEL_ID_CLIENT, vnd_op_status, &vendor_model_pub_config, &vendor_client),}; esp_ble_mesh_model_publish()说明中提到 esp_ble_mesh_model_pub_t.msg 必须包含一个有效数据,且必须再事件ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT 中调用该函数,但是ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT这个事件如何触发呢? |
|
相关推荐
1个回答
|
|
ESP32C6 是一款基于 ESP32 的蓝牙低功耗(BLE)和蓝牙 Mesh 网络芯片,适用于物联网(IoT)应用。在 ESP32C6 上使用 Vendor 广播信息,需要遵循以下步骤:
1. 初始化 ESP32C6 和蓝牙 Mesh 功能: 首先,确保您的 ESP32C6 已经正确连接并初始化。然后,初始化蓝牙 Mesh 功能。这通常包括初始化 BLE、设置 Mesh 配置文件、创建节点和模型等。 ```c esp_err_t ret; ret = esp_bt_controller_mem_release(ESP_BT_MODE_CLASSIC_BT); if (ret != ESP_OK) { ESP_LOGE(TAG, "Release controller memory failed"); return; } ret = esp_bt_controller_init(ESP_BT_MODE_BLE); if (ret != ESP_OK) { ESP_LOGE(TAG, "%s initialize controller failed: %s", __func__, esp_err_to_name(ret)); return; } ret = esp_bluedroid_init(); if (ret != ESP_OK) { ESP_LOGE(TAG, "%s init bluetooth failed: %s", __func__, esp_err_to_name(ret)); return; } ret = esp_bluedroid_enable(); if (ret != ESP_OK) { ESP_LOGE(TAG, "%s enable bluetooth failed: %s", __func__, esp_err_to_name(ret)); return; } ret = esp_ble_mesh_init(&prov, &comp); if (ret) { ESP_LOGE(TAG, "%s init mesh failed: %s", __func__, esp_err_to_name(ret)); return; } ret = esp_ble_mesh_provisioner_provision(&prov, esp_ble_mesh_primary_addr()); if (ret) { ESP_LOGE(TAG, "%s provision failed: %s", __func__, esp_err_to_name(ret)); return; } ``` 2. 创建 Vendor 模型: 在您的代码中,创建一个 Vendor 模型。这包括设置模型的属性、操作和回调函数。 ```c static esp_ble_mesh_model_t vnd_model = { .vnd.model_id = ESP_BLE_MESH_VND_MODEL_ID, .vnd.company_id = 0xFFFF, // 这里设置为您的公司 ID .op_pair_size = ARRAY_SIZE(vnd_op_pair), .op_pair = vnd_op_pair, .keys = NULL, }; static esp_ble_mesh_elem_t elements[] = { { .model_count = 1, .models = &vnd_model, }, }; static esp_ble_mesh_comp_t comp = { .cid = 0xFFFF, // 这里设置为您的公司 ID .elements = elements, .element_count = ARRAY_SIZE(elements), }; ``` 3. 发送 Vendor 消息: 使用 `esp_ble_mesh_model_publish()` 函数发送 Vendor 消息。首先,确保您已经正确配置了 `esp_ble_mesh_model_pub_t` 结构体。 ```c esp_ble_mesh_model_pub_t vendor_model_pub_config; esp_ble_mesh_model_publish(&vnd_model, &vendor_model_pub_config); ``` 4. 设置回调函数: 为了处理接收到的 Vendor 消息,您需要设置回调函数。这包括设置消息接收、发送成功和发送失败的回调。 ```c static void example_ble_mesh_custom_model_cb(esp_ble_mesh_model_cb_event_t event, esp_ble_mesh_model_cb_param_t *param) { switch (event) { case ESP_BLE_MESH_MODEL_OPERATION_EVT: if (param->model_operation.opcode == ESP_BLE_MESH_VND_MODEL_OP_SEND) { // 处理接收到的 Vendor 消息 } break; // 其他事件处理 } } void app_main() { // 初始化和配置代码 esp_ble_mesh_register_custom_model_callback(example_ble_mesh_custom_model_cb); } ``` 5. 调试和测试: 在完成上述步骤后,编译并上传代码到您的 ESP32C6 设备。使用 ESP-IDF 的日志系统或其他调试工具来检查代码的执行情况。确保您的设备能够成功发送和接收 Vendor 消息。 请注意,这里提供的代码示例仅供参考,您可能需要根据您的具体需求进行调整。在实际应用中,您可能还需要考虑其他因素,如安全性、网络拓扑和设备之间的通信等。 |
|
|
|
只有小组成员才能发言,加入小组>>
1132 浏览 1 评论
575浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 01:09 , Processed in 0.436941 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号