• 物联网时代技术开始规模化服务于民众,方便快捷显得尤为重要,smartconfig一键配网便是一个典型案例。
  • 智能家居/家电现阶段还处于普及阶段,由于家庭wifi网络的普及,目前普遍采用wifi与路由器完成连接,与手机/云端进行数据交互智能硬件,如智能插座,智能空调,智能空气净化器,智能灯泡,智能门锁由于不具备人机交互界面,不能像电脑一样的搜索/选择指定路由器,输入连接SSID和密码的界面,所以必须先解决正确连接路由问题。

ESP32-S3 Smartconfig一键配网

1.开发环境:
esp-idf版本 :master
esp-idf环境:ESP-IDF开发环境搭建
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/get-started/index.html

注:官方暂时没有s3的安装教程,可以参照32系列其他方式选择master分支即可。
配网例程:esp-idf\examples\wifi\smart_config


2.硬件需求
Esp32-s3 开发板一块
Usb数据线一条


3.一键配网(SmartConfig)连接过程:
1)ESP32 设备进入初始化状态,开启混监听所有网络数据包。
2)手机连上 WiFi,开启 APP 软件,输入手机所在 WiFi 密码,请求配网,发送UDP广播包。
3)ESP32 通过 UDP 包(长度)获取配置信息捕捉到路由 SSID 和 PASSWD,连接路由器。


4.配网APP
乐鑫官方:配网APP
https://www.espressif.com/zh-hans/support/download/apps
根据自己的手机系统选择相应的APP

例程分析:

// 在 event_handler 中,通过获取不同的时间执行相对应的操作。
static void event_handler(void* arg, esp_event_base_t event_base,int32_t event_id, void* event_data)
{if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096, NULL, 3, NULL);} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {esp_wifi_connect(); // 开始连接WiFixEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {xEventGroupSetBits(s_wifi_event_group, CONNECTED_BIT);} else if (event_base == SC_EVENT && event_id == SC_EVENT_SCAN_DONE) {ESP_LOGI(TAG, "Scan done");} else if (event_base == SC_EVENT && event_id == SC_EVENT_FOUND_CHANNEL) {ESP_LOGI(TAG, "Found channel");} else if (event_base == SC_EVENT && event_id == SC_EVENT_GOT_SSID_PSWD) {ESP_LOGI(TAG, "Got SSID and password");smartconfig_event_got_ssid_pswd_t *evt = (smartconfig_event_got_ssid_pswd_t *)event_data;wifi_config_t wifi_config;uint8_t ssid[33] = { 0 };uint8_t password[65] = { 0 };uint8_t rvd_data[33] = { 0 };bzero(&wifi_config, sizeof(wifi_config_t));memcpy(wifi_config.sta.ssid, evt->ssid, sizeof(wifi_config.sta.ssid));memcpy(wifi_config.sta.password, evt->password, sizeof(wifi_config.sta.password));wifi_config.sta.bssid_set = evt->bssid_set;if (wifi_config.sta.bssid_set == true) {memcpy(wifi_config.sta.bssid, evt->bssid, sizeof(wifi_config.sta.bssid));}memcpy(ssid, evt->ssid, sizeof(evt->ssid));memcpy(password, evt->password, sizeof(evt->password));ESP_LOGI(TAG, "SSID:%s", ssid);ESP_LOGI(TAG, "PASSWORD:%s", password);if (evt->type == SC_TYPE_ESPTOUCH_V2) {ESP_ERROR_CHECK( esp_smartconfig_get_rvd_data(rvd_data, sizeof(rvd_data)) );ESP_LOGI(TAG, "RVD_DATA:");for (int i=0; i<33; i++) {printf("%02x ", rvd_data[i]);}printf("\n");}ESP_ERROR_CHECK( esp_wifi_disconnect() );ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );esp_wifi_connect();} else if (event_base == SC_EVENT && event_id == SC_EVENT_SEND_ACK_DONE) {xEventGroupSetBits(s_wifi_event_group, ESPTOUCH_DONE_BIT);}
}
static void initialise_wifi(void)
{ESP_ERROR_CHECK(esp_netif_init()); // 初始化底层TCP/IP堆栈s_wifi_event_group = xEventGroupCreate();  // 创建事件组 ESP_ERROR_CHECK(esp_event_loop_create_default()); // 创建默认事件循环esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); // 创建默认WIFI STA 在初始化错误的情况下,这个APl中止assert(sta_netif);wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK( esp_wifi_init(&cfg) ); // 初始化WiFi//首先调用esp_event_loop_create_default() 创建默认事件循环。//之后使用esp_event_handler_register() 将事件处理程序注册到系统事件循环。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) );ESP_ERROR_CHECK( esp_event_handler_register(SC_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL) );ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );  // 将ESP32 wifi设置为sta模式ESP_ERROR_CHECK( esp_wifi_start() );                  // 根据配置启动WiFi为sta
}
// 创建事件组 s_wifi_event_group = xEventGroupCreate();,触发相关事件则置标志位,在任务中循环检测标志位处理相应事件。
// smartconfig_example_task 任务中,获取 CONNECTED_BIT 和 ESPTOUCH_DONE_BIT 表示连接上 AP 和 SmartConfig 配置完成。
static void smartconfig_example_task(void * parm)
{EventBits_t uxBits;ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH) );    // 设置 SmartConfig 的协议类型smartconfig_start_config_t cfg = SMARTCONFIG_START_CONFIG_DEFAULT();ESP_ERROR_CHECK( esp_smartconfig_start(&cfg) ); //开始 smartconfig 一键配网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();      // 配网结束,释放 esp_smartconfig_start 占用的缓冲区。vTaskDelete(NULL);}}
}
void app_main(void)
{ESP_ERROR_CHECK( nvs_flash_init() ); // 初始化NVS分区initialise_wifi();                   // 初始化WiFi为sta模式,等待APP进行配网
}

配网操作流程:

1.搭建esp-idf环境
2.编译smart_config例程

  1. 设置target为S3 idf.py set-target esp32s3

  1. 编译工程 idf.py build


3.烧录到开发板
idf.py flash
多个设备需添加串口号(idf.py -p PORT [-b BAUD] flash)


4.开启监视窗口
idf.py monitor (idf.py -p PORT monitor)
出现下面的打印就可以用APP进行配网


5.打开EspTouch APP (配网APP)
1)手机连接到WiFi (目前ESP32系列只支持2.4G频段)
2)输入WiFi密码
3)点击确认,配网成功会显示开发板的IP


6.一键配网成功
日志输出如下,成功获取到WiFi的账号密码
并连接到此WiFi,smartconfig停止

尾声

启明云端作为乐鑫代理,希望我们分享的技术文档参帮助到更多技术小伙伴!如果你需要相关乐鑫产品,可与我们的商务取得联系,我们会第一时间为您提供样品和技术支持!

启明云端分享|ESP32-S3 Smartconfig一键配网相关推荐

  1. ESP8266 SmartConfig一键配网

    ESP8266 SmartConfig一键配网   Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指定的热点或路由器,并加入后者所建立的 ...

  2. WIFI配网方案:1、蓝牙配网 2、WIFI自身配网 3、SmartConfig一键配网

    蓝牙配网: 顾名思义,通过蓝牙给WIFI配网,过程相对较为简单,首先设备上具有WIFI和蓝牙两种功能.然后通过手机的小程序或者APP连接产品蓝牙,连接之后发送WIFI连接所需要的SSID和PASSID ...

  3. 启明云端分享|ESP32摄像头应用方案常遇到的问题

    提示:启明云端从2013年起就作为Espressif(乐鑫科技)大中华区合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用心整理了乐鑫新产品.新 ...

  4. 启明云端分享|ESP32/ESP8266 烧录器 USB-TTL转接板开发工具ESP-T01的使用教程,视频可参考B站

    提示:根据启明云端ESP32/ESP8266 烧录器 USB-TTL转接板开发工具ESP-T01编写的使用教程. 启明云端ESP-T01 烧录器,这是一款为了解决新老用户对ESP系列模组"烧 ...

  5. 乐鑫代理启明云端分享| ESP32系列教程之五: Eclipse搭建esp-idf环境

    提示:前面小明已经为大家分享了4个章ESP32系列教程,今天继续为大家分享,希望大家多多关注我们!启明云端作为乐鑫代理,一直希望能帮到更多的开发者能快速上手乐鑫系列芯片的开发. 前言 提示:本文档为E ...

  6. 乐鑫代理-启明云端分享|ESP32与ESP32-C3功耗对比篇(一)

    ESP32: ESP32在烧录成功hello_world测试固件时的功耗:32mA ESP32-C3: ESP32-C3在烧录成功hello_world测试固件时的功耗:26.3mA 虽然当前的WIF ...

  7. 启明云端分享|ESP32在开发环境时,环境搭建及应用、软件平台时常遇到的问题答疑(FAQ)

    问题描述及解答: 1.环境搭建 安装环境出现can not create a virtual environment. 该错误是因为新版环境需要安装虚拟python环境,出现错误通常有两个原因. 1. ...

  8. 乐鑫代理启明云端分享|ESP32 系列教程之四: Windows 搭建 esp-idf 环境

    提示: 本文档为 ESP32 教程系列,旨在为客户进行 ESP32 系列芯片开 发提供环境搭建.工程示例演示等方面的参考文档及视频演示,降低 ESP32 系列芯片.模组开发的入门难度. ESP32 教 ...

  9. 乐鑫代理启明云端分享|ESP32系列教程之三: VS Code远程连接Linux

    提示:本文档为ESP32教程系列,旨在为客户进行ESP32系列芯片开发提供环境搭建.工程示例演示等方面的参考文档及视频演示,降低ESP32系列芯片.模组开发的入门难度. ESP32教程系列文档主要参考 ...

最新文章

  1. 从CCNA到CCIE的网工认证道路规划
  2. FTP服务器的安装和配置
  3. TCP/IP学习——利用主机IP与子网掩码计算网络号
  4. 转: FFmpeg功能命令汇总
  5. java模拟Digest.认证
  6. 实验8.2 指针与字符串 6-2 删除字符
  7. 殷墟 太行山 红旗渠
  8. ORACLE sqlplus设置行数和宽度
  9. 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
  10. 【Android进阶】使用Andbase快速开发框架实现常见侧滑栏和滑动标签页组合效果...
  11. 破局人工智能:构建AI,与腾讯云一起探索语音应用场景
  12. 消息中间件RabbitMQ(五)——实现RPC调用
  13. 股票实时行情获取及特征计算
  14. web错误代码ERR_BLOCKED_BY_RESPONSE
  15. 饥饿游戏3:嘲笑鸟(上)[The Hunger Games:Mockingjay - Part 1]
  16. 华为手机主界面的返回键怎么调出来_华为手机没有返回键怎么调出来
  17. 网店系统哪个好,免费网店系统,网店系统排行
  18. 阿里云服务器完全卸载AliYun监控教程
  19. python字符串模糊匹配 - FuzzyWuzzy
  20. unity 引用using System.Drawing.Printing

热门文章

  1. 智能手机系统对进程生命周期的管理
  2. 原生JavaScript---字符串[3]
  3. Python subprocess
  4. linux常用命令(1)帮助命令man使用
  5. k8s operator开发脚手架kubebuilder 3.2.0安装脚本整理
  6. 开源混合云:harvester混合应用架构
  7. Linkis源码目录结构详解
  8. 解决prometheus k8s.gcr.io/addon-resizer:1.8.4镜像无法下载的问题
  9. k8s pod资源限制策略:requests、limits配置示例
  10. etcd介绍:可作为KV数据库、服务发现、配置中心和分布式锁使用、etcd集群搭建