dpp-enrollee配网

功能:wifi直连配网
硬件:ESP32-S
框架:ESP-IDF 4.3
编译器:VSCode

打开工程

  • Ctrl+Shift+p打开ESP32的示例demo。

在这里插入图片描述

  • 选择dpp-enrollee工程。

在这里插入图片描述

代码说明

  • 主函数入口。
void app_main(void)
{
    /* 非易失性存储(NVS)库旨在将 键值对 存储在flash中 */
    esp_err_t ret = nvs_flash_init();       /* 初始化片内flash */
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    dpp_enrollee_init();        /* dpp-enrollee 初始化,需要对flash进行读写所有要先初始化nvs */
}
  • dpp-enrollee初始化。
void dpp_enrollee_init(void)
{
    s_dpp_event_group = xEventGroupCreate();    /* 创建事件组,配网程序通过事件创建并等待配网 */

    ESP_ERROR_CHECK(esp_netif_init());

    ESP_ERROR_CHECK(esp_event_loop_create_default());
    esp_netif_create_default_wifi_sta();

    /* 为 event_handler函数 注册WIFI事件和IP事件 */
    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL));

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();    /* 获取wifi默认配置 */
    ESP_ERROR_CHECK(esp_wifi_init(&cfg));                   /* 初始化wifi */

    ESP_ERROR_CHECK(esp_supp_dpp_init(dpp_enrollee_event_cb));  /* 注册dpp回调函数 */
    /* Currently only supported method is QR Code 配置为生成二维码模式 */
    ESP_ERROR_CHECK(esp_supp_dpp_bootstrap_gen(EXAMPLE_DPP_LISTEN_CHANNEL_LIST, DPP_BOOTSTRAP_QR_CODE,
                    EXAMPLE_DPP_BOOTSTRAPPING_KEY, EXAMPLE_DPP_DEVICE_INFO));

    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));  /* 配置wifi为STA模式 */
    ESP_ERROR_CHECK(esp_wifi_start());                  /* 启动wifi */

    /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
     * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
    EventBits_t bits = xEventGroupWaitBits(s_dpp_event_group,           /* 添加事件到事件组 */
                                           DPP_CONNECTED_BIT | DPP_CONNECT_FAIL_BIT | DPP_AUTH_FAIL_BIT,    /* 事件位 */
                                           pdFALSE,
                                           pdFALSE,
                                           portMAX_DELAY);                                                  /* 最大等待时间 */

    /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
     * happened. */
    if (bits & DPP_CONNECTED_BIT) {
        ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
                 s_dpp_wifi_config.sta.ssid, s_dpp_wifi_config.sta.password);
    } else if (bits & DPP_CONNECT_FAIL_BIT) {
        ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
                 s_dpp_wifi_config.sta.ssid, s_dpp_wifi_config.sta.password);
    } else if (bits & DPP_AUTH_FAIL_BIT) {
        ESP_LOGI(TAG, "DPP Authentication failed after %d retries", s_retry_num);
    } else {
        ESP_LOGE(TAG, "UNEXPECTED EVENT");
    }

    esp_supp_dpp_deinit();      /* dpp失能 */
    ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler));   /* IP事件失能 */
    ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler));    /* wifi事件失能 */
    vEventGroupDelete(s_dpp_event_group);
}

演示效果

  • 编译成功后下载到ESP32。

在这里插入图片描述

  • 打开VSCode的串口终端
    • 串口终端的二维码有问题,无法识别。

在这里插入图片描述

  • 复制二维码上方的字符串用网页二维码生成器生成新的二维码。

在这里插入图片描述

  • 手机连接上wifi后,通过右上角的二维码扫描生成的二维码。

在这里插入图片描述

  • 扫描二维码后,点击连接。

在这里插入图片描述

  • VSCode的串口终端此时显示已经连接成功的信息。

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z_Tam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值