【esp32-s3入门】学习ble_mesh_provisioner例程

从主函数进去,可以看到app_main函数主要初始了nvs,ble协议栈,ble mesh协议栈,是非常简洁的一个demo.

void app_main(void)
{
    esp_err_t err;
    ESP_LOGI(TAG, "Initializing...");//初始化
    err = nvs_flash_init();//nvs初始化
    if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
        ESP_ERROR_CHECK(nvs_flash_erase());//nvs擦除
        err = nvs_flash_init();//nvs初始化
    }
    ESP_ERROR_CHECK(err);

    err = bluetooth_init();//ble协议栈初始化
    if (err) {
        ESP_LOGE(TAG, "esp32_bluetooth_init failed (err %d)", err);
        return;
    }
    ble_mesh_get_dev_uuid(dev_uuid);//获取设备uuid
    /* Initialize the Bluetooth Mesh Subsystem */
    err = ble_mesh_init();//ble mesh协议栈初始化
    if (err) {
        ESP_LOGE(TAG, "Bluetooth mesh init failed (err %d)", err);
    }
}

跳过 nvs_flash_init();和bluetooth_init();这两个函数,我们点进去到
ble_mesh_get_dev_uuid函数中,这个主要是把ble mac地址加进去到device uuid中去。

void ble_mesh_get_dev_uuid(uint8_t *dev_uuid)
{
    if (dev_uuid == NULL) {
        ESP_LOGE(TAG, "%s, Invalid device uuid", __func__);
        return;
    }
    memcpy(dev_uuid + 2, addr_val, BD_ADDR_LEN);
}

重点来了,我们看一下这个ble_mesh_init()里干了什么,首先准备好appkey appkey_index netkey_index三个配网参数,并分别注册配网,配置客户端,通用客户端。

static esp_err_t ble_mesh_init(void)
{
    uint8_t match[2] = {0xdd, 0xdd};
    esp_err_t err = ESP_OK;

    prov_key.net_idx = ESP_BLE_MESH_KEY_PRIMARY ;//netkey index
    prov_key.app_idx = APP_KEY_IDX;//appkey index
    memset(prov_key.app_key, APP_KEY_OCTET, sizeof(prov_key.app_key));//appkey 设置初始值

    esp_ble_mesh_register_prov_callback(example_ble_mesh_provisioning_cb);//注册配网回调
    esp_ble_mesh_register_config_client_callback(example_ble_mesh_config_client_cb);注册配置客户端回调
    esp_ble_mesh_register_generic_client_callback(example_ble_mesh_generic_client_cb);//注册通用客户回调

    err = esp_ble_mesh_init(&provision, &composition);//mesh配网初始化
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Failed to initialize mesh stack (err %d)", err);
        return err;
    }
    err = esp_ble_mesh_provisioner_set_dev_uuid_match(match, sizeof(match), 0x0, false);//设置device uuid
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Failed to set matching device uuid (err %d)", err);
        return err;
    }
    err = esp_ble_mesh_provisioner_prov_enable(ESP_BLE_MESH_PROV_ADV | ESP_BLE_MESH_PROV_GATT);//开启ADV和GATT两种方式
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Failed to enable mesh provisioner (err %d)", err);
        return err;
    }
    err = esp_ble_mesh_provisioner_add_local_app_key(prov_key.app_key, prov_key.net_idx, prov_key.app_idx);//添加appkey netkey_index,appkey_inde参数
    if (err != ESP_OK) {
        ESP_LOGE(TAG, "Failed to add local AppKey (err %d)", err);
        return err;
    }
    ESP_LOGI(TAG, "BLE Mesh Provisioner initialized");
    return err;
}
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值