本文内容

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

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

三、主流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->选择示例保存的路径。

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

创建完后,如下图所示。

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

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

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

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

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

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

打开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;}

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

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

 

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

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设备。

打开串口监控,显示的信息与APP配网基本是一样的。

至此,使用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配置信息,如果配置过,就直接连接wifiesp_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和微信AIRKISSsmartconfig_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 overESP_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中了,增加判断后,就不会重新配网,而是直接连接到路由器上网了。

 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。

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

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

通过触发按键,例如长按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 重启

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

  1. ESP32一键配网------smartconfig

    本文内容 使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网. 主流WiFi配网方式介绍 1) SoftAP配网 ESP32 会建立一个 WiFi 热点(AP模式), ...

  2. 【IoT】物联网之 WIFI 一键配网 smartConfig 浅析(ESP32)

    一.背景 物联网时代技术开始规模化服务于民众,方便快捷显得尤为重要,WIFI 直连便是一个典型案例. 目前主流的 WIFI 配置模式有以下 2 种: 1.智能硬件处于 AP 模式(类似路由器,组成局域 ...

  3. ESP32开发--一键配网与Airkiss配网

    ESP32基础系列 ESP32初体验之环境搭建 ESP32外设学习之GPIO ESP32外设学习之UART ESP32开发之给模块连上网络 ESP32的一键配网与Airkiss配网 ESP32使用NV ...

  4. 图文手把手教程--ESP32 OTA空中升级(阿里云物联网平台)

    本文内容 1)使用ota_example_mqtt例程,通过阿里云物联网平台,进行OTA升级. 2)将例程编译成两个版本,版本1.0.0下载至ESP32开发板,版本2.0.0上传至阿里云物联网平台. ...

  5. ESP8266微信一键配网smartconfig,esp32可用

    ESP8266微信一键配网 第一步 下载程序 微信配网 恢复出厂设置 ESP32 接入 第一步 下载程序 简单配网例程:点击下载 配网并控制LED例程:点击下载 例程下载后,需要使用arduino i ...

  6. 图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台

    本文内容 1)在阿里云生活物联网平台,创建自有品牌项目,并在项目下创建产品"智能灯001". 2)下载阿里云SDK-esp-aliyun,使用例程smart_light,通过&qu ...

  7. 图文手把手教程--ESP32 MQTT连接腾讯云物联网平台及OTA固件升级

    本文内容 1)在腾讯云物联网开发平台,新建项目,并在项目下新建设备"light_001". 2)下载腾讯云SDK-esp-qcloud,使用例程led_light,通过" ...

  8. 图文手把手教程--ESP32 MQTT对接EMQX本地服务器(VSCODE+ESP-IDF)

    本文内容 1)使用MQTT_TCP例程,ESP32通过MQTT协议与MQTT本地服务器(EMQX)进行通信. 2)如何搭建EMQX MQTT本地服务器. 3)如何使用MQTT.fx客户端调试工具或MQ ...

  9. wifi一键配网smartconfig原理及应用

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/flyingcys/article/details/49283273 智能家居/家电现阶段还处于普及阶段 ...

最新文章

  1. AI算法起家的今日头条为何败给了色情?一文告诉你机器学习何以搞不定鉴黄
  2. JVM---运行时数据区概述
  3. 为什么项目经理很难有节操的选举
  4. Grunt 入门指南5:项目脚手架
  5. 第二个mysql怎么装_Linux下安装两个MySQL的方法
  6. 2019年技术盘点容器篇(二):听腾讯云讲讲踏入成熟期的容器技术 | 程序员硬核评测...
  7. C++之再探参数绑定bind、bind1st、bind2nd、placeholders占位符
  8. F - 数据结构实验之栈与队列六:下一较大值(二)
  9. codeforces round #257 div2 C、D
  10. PAT 1032 (未完成)
  11. 微信小程序倒计时组件开发
  12. 网络攻防之wireshark抓取登录信息
  13. HiTool工具烧录Uboot过程简介
  14. G Parenthesis
  15. 2022虎符线上团队赛 有关web的部分题解(持续更新)
  16. OC学习笔记之011IOS应用开发入门--控件2进度条、拖动条、警告框、日期选择器、选择器
  17. Ubuntu下设置开机启动项
  18. 【RegNet】《Designing Network Design Spaces》
  19. 中鑫优配热点前瞻:国防军工+数据安全+燃料电池+煤炭
  20. Excel在数字单元格后面怎么添加统一的内容(数字或其他内容)

热门文章

  1. 数据库——数据库备份与恢复
  2. LibLInear库中数据格式介绍
  3. java 登录过滤_Java 过滤器实现(登录) + 拦截器(两种方法)
  4. mysql 事务 超时时间_设置事务超时时间的问题及数据库update和锁
  5. 教授专栏18 | 黄阳光: 建网络信誉系统 增线上促销成效
  6. 挑战40万年薪,Cocos人才你在哪里
  7. 中文版迷宫冒险游戏superliminal
  8. 【美国留学大学】--耶鲁大学
  9. c语言 结构体 初始化,C语言结构体初始化
  10. Docker容器之间的通信