图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

这篇具有很好参考价值的文章主要介绍了图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文内容

1)使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网。

2)修改smart_config例程,使ESP32复位后,如果已配过网,则不再进行配网,而是直接连接路由器上网,使贴近实际项目开发。

一、首先完成集成开发环境搭建:

图文手把手教程(史上最强):windows下ESP32集成开发环境搭建和HelloWorld显示(乐鑫官方推荐方法-使用VSCode安装ESP-IDF插件)

二、下载乐鑫官方APP和关注乐鑫官方公众号

1)乐鑫官方APP下载链接:https://www.espressif.com.cn/zh-hans/support/download/apps

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

2)微信关注“乐鑫信息科技”公众号。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

三、主流WIFI 配网方式简单介绍。

目前主流的 WIFI 配网方式主要有以下 三 种:

1) SoftAP配网
ESP32 会建立一个 WiFi 热点(AP模式),用户将手机连接到这个热点后,将要连接的 WiFi 信息发送给 ESP32,ESP32得到ssid和password。

优点:这种方式很可靠,成功率基本达到100%,设备端的代码也简单。

缺点:需要手动切换手机wifi连接的网络,先连接到ESP32的AP网络,配置完成后再恢复连接正常wifi网络,操作上有一定的复杂性,会给用户带来一定的困扰。

官方支持:没有提供Demo。

2)Smartconfig配网

ESP32处于混杂模式下,监听网络中的所有报文,手机APP将当前连接的ssid和password编码到UDP报文中,通过广播或者组播的方式发送报文,ESP32接收到UDP报文后解码,得到ssid和password,然后使用该组ssid和password去连接网络。
优缺点:这种方式简洁,用户也很容易操作,但是配网成功率受环境影响较大。

官方支持:有提供Demo,smart_config例程。

3)Airkiss配网

AirKiss是微信硬件平台提供的一种WIFI设备快速入网配置技术,要使用微信客户端的方式配置设备入网,需要设备支持AirKiss技术。Aiskiss的原理和smartconfig很类似,设备工作在混杂模式下,微信客户端发送包含ssid和password的广播包,设备收到广播包解码得到ssid和password,详细的可以参考微信官方的介绍。

优缺点:这种方式简洁,用户也很容易操作,但是配网成功率受环境影响较大。

官方支持:有提供Demo,smart_config例程。

四、运行smart_config例程,使用APP和微信配网。

1)打开示例项目smart_config:VSCODE中->"查看"->”命令面板“->输入:Show Examples projects->选择Use current ESP-IDF(E:\ESP32-IDF\esp\esp-idf)->弹出示例ESP-IDF Examples,选择wifi->smart_config->Create project using example smart_config->选择示例保存的路径。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)
 

 例如:E:\ESP32-IDF\project-example,因ESP-IDF框架与示例是分离的,所以示例保存的路径可以随意,但需要注意:路径不能有中文和空格,否则报错。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

创建完后,如下图所示。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

2)编译、下载到ESP32开发板,打开串口监控,如下图所示。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

 3)打开手机APP EspTouch进行配网。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

 图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

APP点击确认后,观察VSCODE中的串口监控打印的信息,并没有提示配网成功,而是看到错误的信息:smartconfig:setsockopt failed。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

原因:是乐鑫官方的ESP-IDF存在BUG,官方修复问题的链接:

https://github.com/espressif/esp-idf/commit/2e31779931599bfb38c0c9420ef30177f130e1f9

 根据目录E:\ESP32-IDF\esp\esp-idf\components\esp_wifi\src,找到smartconfig_ack.c

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

打开smartconfig_ack.c,修改的地方如下:

			//删除
            /* if (setsockopt(send_sock, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &optval, sizeof(int)) < 0) {
                ESP_LOGE(TAG,  "setsockopt failed");
                goto _end;
            } */
			
			//增加
			if (setsockopt(send_sock, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int)) < 0) {
                ESP_LOGE(TAG,  "setsockopt SO_BROADCAST failed");
                goto _end;
            }
			
			//增加
            if (setsockopt(send_sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(int)) < 0) {
                ESP_LOGE(TAG,  "setsockopt SO_REUSEADDR failed");
                goto _end;
            }

修改完后进行保存,如下图所示:

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

4)这时重新编译(如有问题,先清除,再编译)、下载到ESP32开发板,打开串口监控,这时显示配网成功,如下图所示。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

 

配网成功后,APP会弹出配网完成的信息,如下图所示,如果失败,是不会弹出的。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

5)使用微信公众号配网。

微信公众号配网与APP配网的例程是一样的,只需要修改配网的类型即可,配网的类型如下:

typedef enum {
    SC_TYPE_ESPTOUCH = 0,       /**< protocol: ESPTouch */
    SC_TYPE_AIRKISS,            /**< protocol: AirKiss */
    SC_TYPE_ESPTOUCH_AIRKISS,   /**< protocol: ESPTouch and AirKiss */
    SC_TYPE_ESPTOUCH_V2,        /**< protocol: ESPTouch v2*/
} smartconfig_type_t;

这里由例程的SC_TYPE_ESPTOUCH,修改为SC_TYPE_ESPTOUCH_AIRKISS,即同时支持APP和微信配网,修改完后重新编译、下载到ESP32开发板中。

static void smartconfig_example_task(void * parm)
{
    EventBits_t uxBits;
    ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) );
    smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();
    ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) );
    while (1) {
        uxBits = xEventGroupWaitBits(s_wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY);
        if(uxBits & CONNECTED_BIT) {
            ESP_LOGI(TAG, "WiFi Connected to ap");
        }
        if(uxBits & ESPTOUCH_DONE_BIT) {
            ESP_LOGI(TAG, "smartconfig over");
            esp_smartconfig_stop();
            vTaskDelete(NULL);
        }
    }
}

打开微信公众号“乐鑫信息科技”,商铺->Airkiss设备。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

 打开串口监控,显示的信息与APP配网基本是一样的。图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

 至此,使用APP和微信公众号配网全部完成,但是有缺点,即ESP32每次复位后都需要进行配网,并没有保存原来配网的信息,故这里需要优化代码。

五、优化配网代码,使贴合实际应用。

1)例程中的Smart_config 配网,每次复位ESP32后,又得重新配网,不符合实际的应用,这里对代码进行修改,使配网的信息(帐号和密码)被保存在 NVS 中,每次配网之前读取NVS中的信息,如果未配网过,则进行配网操作,如果已经配网过,则直接连接路由器。

2)smartconfig_main.c->修改smartconfig_example_task()任务函数,修改如下:

//配网任务函数
static void smartconfig_example_task(void * parm)
{
    EventBits_t uxBits;
    wifi_config_t myconfig = {0};

    ESP_LOGI(TAG, "creat smartconfig_example_task");

    // 获取wifi配置信息,如果配置过,就直接连接wifi
    esp_wifi_get_config(ESP_IF_WIFI_STA, &myconfig);
    if (strlen((char*)myconfig.sta.ssid) > 0)
    {
        ESP_LOGI(TAG, "alrealy set, SSID is :%s,start connect", myconfig.sta.ssid);
        esp_wifi_connect();
    }
    // 如果没有配置过,就进行配网操作
    else
    {
        ESP_LOGI(TAG, "have no set, start to config");
        ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) );//支持APP ESPTOUCH和微信AIRKISS
        smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();
        ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) );
    }

    // ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) );
    // smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();
    // ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) );
    while (1) 
    {
        uxBits = xEventGroupWaitBits(s_wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY);
        if(uxBits & CONNECTED_BIT) 
        {
           // 复位后,如果已经配网过,则不会再进行配网,
           // 只打印WiFi Connected to ap,而不会打印smartconfig over
            ESP_LOGI(TAG, "WiFi Connected to ap");// 成功连接路由器
             vTaskDelete(NULL);// 关闭线程
        }
        if(uxBits & ESPTOUCH_DONE_BIT) 
        {
            ESP_LOGI(TAG, "smartconfig over"); // 配网结束
            esp_smartconfig_stop();
            vTaskDelete(NULL);// 关闭线程
        }
    }
}

 3)编译、下载到ESP32开发板中,并打开串口监控。

可以看到之前配网的信息,已经被保存在NVS中了,增加判断后,就不会重新配网,而是直接连接到路由器上网了。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

 4)想要重新配网,怎么办?

想要重新配网,需要删除原来配网保存的信息,这里提供两种方法。

方法一:擦除整片Flash,仅仅适合调试用。

在VSCODE中打开终端工具ESP-IDF Terminal,然后输入以下命令,然后按Enter。

python E:\ESP32-IDF\esp\esp-idf\components\esptool_py\esptool\esptool.py erase_flash

 注意:每个人的ESP-IDF存放路径都不一样,需要根据自己的路径来找到esptool.py,然后使用擦除flash命令erase_flash

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

重新下载程序,并打开串口监控,显示没有配网信息,需要重新配网,按上面的流程,使用APP和微信公众号配网即可。

图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

方法二:增加一个按键来重置配网信息,适用实际项目开发

通过触发按键,例如长按10秒来调用esp_wifi_restore()函数,重置配网信息,具体做法这里就不说了,网上找一个现成的按键驱动来关联实现即可。

至此,关于smart_config配网的内容全部完毕,愉快的玩耍吧!

完整的例程代码下载:https://download.csdn.net/download/felix_tao/86268485

使用例程,报错怎么办,解决办法如下:

1)打开VSCODE报错,c_cpp_properties.json无法找到E:\\ESP32-IDF...

解决办法:点击.vscode->c_cpp_properties.json,修改盘符即可,例如将E盘改为D盘。

2)编译工程报错:

[0/1] Re-running CMake...
FAILED: build.ninja 
CreateProcess failed: The system cannot find the file specified.
ninja: error: rebuilding 'build.ninja': subcommand failed

解决方法:清除编译产生的所有文件,左下角->点击垃圾桶图标(ESP-IDF Full Clean)->清除后,接着重新编译即OK。
 

本文参考了以下博客,鸣谢!

ESP32-C3入门教程 网络 篇(二、 Wi-Fi 配网 — Smart_config方式 和 BlueIF方式)_矜辰所致的博客-CSDN博客_esp32 wifi配网

ESP32存储配网信息,上电重启均可自动重连之前配置的无线网络_荻夜的博客-CSDN博客_esp32 wifi 重启文章来源地址https://www.toymoban.com/news/detail-417973.html

到了这里,关于图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS7(Linux)详细安装教程(手把手图文详解版)_centos7安装教程

    3、选择合适版本的镜像进行下载 选择合适的存放地址(这里的地址包含中文名称我用起来好像也没出啥问题,如果怕出错的同学可以使用全英文) 1、打开我们的虚拟机(VMware Workstation),点击文件进行新建 2、选择典型之后,下一步 3、选择稍会安装操作系统 4、因为安装的

    2024年04月29日
    浏览(55)
  • 手把手带你使用ESP8266 与 STM32F103C8实现网络服务器

    随着现在物联网设备的而越来越多,现在市场上出现越来越多的物联网设备,其中 ESP8266 是最受欢迎、价格便宜且易于使用的模块,它可以将您的硬件连接到互联网。 今天我们就以ESP8266和STM32来实现一台网络服务器,我们使用 ESP8266 将 STM32F103C8 连接到互联网。 ESP8266 Wi-Fi 模

    2024年01月23日
    浏览(129)
  • 【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第3节-云产品流转配置

    本节目标: 本节目标是进行云产品流转配置为后面实际的手机APP的接入做铺垫。云产品流转配置的目的是为了后面能够让后面实际做出来的手机APP可以控制STM32/MCU,STM32/MCU可以将数据发给实际的手机APP。 配置步骤主要分为三步: 1.创建数据源;2.创建数据目的;3.创建解析器

    2024年02月03日
    浏览(63)
  • 【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第2节-编写STM32程序初步实现ESP8266上云与发布订阅消息

    本节目标: 本节实现,硬件连接STM32与ESP8266,编写STM32程序通过at命令方式实现STM32+ESP8266与阿里云物联网平台发布订阅消息,本节最终实现初步的发布订阅消息(能够发布消息给阿里云物联网平台但无外设数据,能够订阅阿里云物联网平台发送的消息来开关LED灯)。 硬件连接

    2024年02月03日
    浏览(70)
  • 手把手使用Micropython+合宙Esp32c3(驱动安装,为合宙Esp32c3安装Micropython固件库,代码上传到ESP32C3中)含Thonny和vscode两种方法

    CH343驱动下载 下载最新版本就好 驱动下载好后,以管理员身份运行,并点击“安装” 安装完成之后连接设备就可以在设备管理器中看到自己设备及端口 MicroPython 是一种精简版的 Python 语言实现,专门用于嵌入式系统和物联网设备。它提供了一个适用于微控制器的交互式解释

    2024年02月10日
    浏览(67)
  • 手把手教你STM32入门教程(标准库)

    目录 前言 步骤一:准备工作 步骤二:安装Keil MDK-ARM开发工具 步骤三:创建工程 步骤四:配置工程 步骤六:编写代码 步骤七:下载程序   总结 在物联网时代,嵌入式系统的应用越来越广泛,而STM32作为业内领先的嵌入式芯片之一,受到了越来越多开发者的关注和喜爱。然

    2024年02月12日
    浏览(56)
  • 零基础快速上手STM32开发(手把手保姆级教程)

    作为一名嵌入式工程师,STM32 是必须要学习的一款单片机,同时这款单片机资料足够多,而且比较简单,非常适合初学者入门。 STM32 是一款由 STMicroelectronics 公司开发的 32 位微控制器,由于其强大的处理能力和广泛的应用领域,如嵌入式系统、物联网设备、机器人等,而受到

    2024年02月05日
    浏览(55)
  • MySQL8.0.32详细安装教程(奶妈级手把手教你安装)

    前言 下载地址: MySQL安装版(还有个MySQL免安装板) 1. 如图所示下载页面 2. 在这里我们选择第二个下载项 3. 在下载页面,不用使用Oracle账号去登录或者注册,直接点击 No thanks, just start my download. 进行下载。 1. 下载完成后,我们下载的是这么个玩意儿 2. 双击运行.msi文件 3.

    2024年02月06日
    浏览(56)
  • 【物联网】手把手完整实现STM32+ESP8266+MQTT+阿里云+APP应用——第1节-阿里云配置+MQTT.fx模拟与使用AT命令发布订阅消息

    🌟博主领域:嵌入式领域人工智能软件开发 本节目标: 通过MQTT.fx模拟连接或通过串口连接ESP8266发送AT命令,实现阿里云物联网平台发送数据同时接收数据,IOT studio界面显示数据。具体来说:使用ESP8266 ESP-01来连接网络,获取设备数据发送到阿里云物联网平台并显示且oled显

    2024年02月03日
    浏览(62)
  • 图文结合手把手教你创建SpringCloud项目

    前言 Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,比如服务注册、服务发现、网关、路由、链路追踪等。Spring Cloud 并不是重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。也

    2024年04月25日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包