0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

启明云端分享|ESP32-S3 Smartconfig一键配网教程

启明云端 2021-09-16 10:57 次阅读

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


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

poYBAGFCsU2AVTaLAACT7nMRE24579.png

例程分析:

//在event_handler中,通过获取不同的时间执行相对应的操作。
staticvoidevent_handler(void*arg,esp_event_base_tevent_base,
int32_tevent_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);
}elseif(event_base==WIFI_EVENT&&event_id==WIFI_EVENT_STA_DISCONNECTED){
esp_wifi_connect();//开始连接WiFi
xEventGroupClearBits(s_wifi_event_group,CONNECTED_BIT);
}elseif(event_base==IP_EVENT&&event_id==IP_EVENT_STA_GOT_IP){
xEventGroupSetBits(s_wifi_event_group,CONNECTED_BIT);
}elseif(event_base==SC_EVENT&&event_id==SC_EVENT_SCAN_DONE){
ESP_LOGI(TAG,"Scandone");
}elseif(event_base==SC_EVENT&&event_id==SC_EVENT_FOUND_CHANNEL){
ESP_LOGI(TAG,"Foundchannel");
}elseif(event_base==SC_EVENT&&event_id==SC_EVENT_GOT_SSID_PSWD){
ESP_LOGI(TAG,"GotSSIDandpassword");

smartconfig_event_got_ssid_pswd_t*evt=(smartconfig_event_got_ssid_pswd_t*)event_data;
wifi_config_twifi_config;
uint8_tssid[33]={0};
uint8_tpassword[65]={0};
uint8_trvd_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(inti=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();
}elseif(event_base==SC_EVENT&&event_id==SC_EVENT_SEND_ACK_DONE){
xEventGroupSetBits(s_wifi_event_group,ESPTOUCH_DONE_BIT);
}
}
staticvoidinitialise_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();//创建默认WIFISTA在初始化错误的情况下,这个APl中止
assert(sta_netif);
wifi_init_config_tcfg=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)); //将ESP32wifi设置为sta模式
ESP_ERROR_CHECK(esp_wifi_start()); //根据配置启动WiFi为sta
}

//创建事件组s_wifi_event_group=xEventGroupCreate();,触发相关事件则置标志位,在任务中循环检测标志位处理相应事件。
//smartconfig_example_task任务中,获取CONNECTED_BIT和ESPTOUCH_DONE_BIT表示连接上AP和SmartConfig配置完成。
staticvoidsmartconfig_example_task(void*parm)
{
EventBits_tuxBits;
ESP_ERROR_CHECK(esp_smartconfig_set_type(SC_TYPE_ESPTOUCH)); //设置SmartConfig的协议类型
smartconfig_start_config_tcfg=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,"WiFiConnectedtoap");
}
if(uxBits&ESPTOUCH_DONE_BIT){
ESP_LOGI(TAG,"smartconfigover");
esp_smartconfig_stop(); //配网结束,释放esp_smartconfig_start占用的缓冲区。
vTaskDelete(NULL);
}
}
}
voidapp_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
2) 编译工程 idf.py build

pYYBAGFCsZqAe7aYAACCG6S5tTk156.png

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

poYBAGFCsb2Aa2blAAB2jAcmheU291.png

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

poYBAGFCsdKAJvN1AACYgnDPgwM145.png

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

pYYBAGFCseqAJT1uAACcbPJG7uw062.png

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

pYYBAGFCsgqAW51HAAFW-K7pkMQ023.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    《DNESP32S3使用指南-IDF版_V1.6》第五十一章 WiFi一键

    ESP32-S3设备进行一键,该软件的安装包可在乐鑫官方网站的相关下载网页找到,如下图所示。 图51.1.1 Smartconfig
    发表于 02-13 09:26

    【AI技术支持】ESP32-S3芯片重复异常复位问题处理

    启明云端/01问题描述客户在扫码枪产品中使用ESP32-S3芯片,ESP-IDF版本为idf5.1.0时,产品上电后直处于异常复位,复位提
    的头像 发表于 01-17 18:08 346次阅读
    【AI技术支持】<b class='flag-5'>ESP32-S3</b>芯片重复异常复位问题处理

    【AI技术支持】ESP32-S3模组EspBleOTA搜索不到ble_ota例程的蓝牙问题处理

    启明云端/01问题描述在智能标识牌上使用ESP32-S3-WROOM-1U模组,ESP-IDF版本为idf5.0.2时,客户在ESP32-S3
    的头像 发表于 12-13 18:06 495次阅读
    【AI技术支持】<b class='flag-5'>ESP32-S3</b>模组EspBleOTA搜索不到ble_ota例程的蓝牙问题处理

    【新品发布】启明云端高性能AI笔筒,基于乐鑫ESP32-S3开发应用

    今天,我们非常荣幸地向您介绍款新产品——启明云端AI笔筒。这款产品搭载乐鑫ESP32-S3R8主控芯片,支持Wi-Fi和BLE无线功能,确保了强大的性能和稳定的连接。配备的CAT.1
    的头像 发表于 12-07 01:00 632次阅读
    【新品发布】<b class='flag-5'>启明</b><b class='flag-5'>云端</b>高性能AI笔筒,基于乐鑫<b class='flag-5'>ESP32-S3</b>开发应用

    【AI技术支持】ESP32-S3 JTAG调试问题处理

    启明云端/01你是否曾遇到过?在使用ESP32-S3模块,ESP-IDF版本为idf5.0时,调试JTAG,尝试很久也无法调通,这是为什么呢?启明
    的头像 发表于 10-30 08:01 1017次阅读
    【AI技术支持】<b class='flag-5'>ESP32-S3</b> JTAG调试问题处理

    请问ESP32-S3蓝牙是否支持SPP?

    由于需要支持RGB565的LCD,选型ESP32-S3。 看介绍,ESP32-S3的蓝牙似乎取消了对经典蓝牙的支持。 以前是使用STM32+HC-05模块连接,需要设置ROLE=1主角色。 想请教,ESP32-S3是否支持连接这
    发表于 07-01 08:07

    ESP32-S3芯片赋能设备,打造智能交互新体验

    在物联网和人工智能(AI)技术融合的浪潮中,乐鑫ESP32-S3芯片以其卓越的性能和多功能性,成为智能家居和工业自动化领域的明星产品。ESP32-S3款基于XtensaLX7处理器的嵌入式系统级
    的头像 发表于 06-28 08:04 1191次阅读
    <b class='flag-5'>ESP32-S3</b>芯片赋能设备,打造智能交互新体验

    esp32-S3支持arduino编程吗?

    arduino选开发板的时候没有es32-s3, 只有s2可选。 请问: 1. esp32-S3支持arduino编程吗 2. arduino下sample下的BLE库能用吗? 3.
    发表于 06-27 08:23

    ESP32-S3 AT是否支持SPI接口?

    ESP32-S3 AT 感兴趣,但是不确定是否支持 SPI 接口。
    发表于 06-27 06:06

    ESP32C3smartconfig不成功是怎么回事?

    大家好,最近在用ESP32 C3做项目,用的是IDF 4.3在做smartconfig时发现成功率很低,于是用
    发表于 06-20 06:44

    VScode目标设备选择esp32-s3时报错的原因?

    使用VS code编辑和编译esp32-s3,目标设备选择esp32-s3时报错,报错信息如附件图 目标设备选择esp32-s3时报错信息 : 使用
    发表于 06-19 06:45

    分享6个实用的ESP32-S3物联网项目:从智能设备到安全创新

    ESP32-S3是物联网领域的创新之,具备2.4GHz Wi-Fi和蓝牙连接、先进的安全功能和各种接口协议的外设。该双核微控制器基于TSMC超低功耗40nm技术构建,适合轻量级AI应用。兼具
    的头像 发表于 05-17 10:15 1035次阅读

    ESP32-S3模组烧录又失败?分享怎么排查原因

    ESP32-S3模组在物联网中非常好用,可以做带屏小音箱、温控器、智能86盒、泳池清洁机器人等等,在烧录的时候经常会遇到些问题,这里分享些烧录失败的原因或者烧录遇到的问题,教大家怎么排查原因
    的头像 发表于 05-11 08:04 3980次阅读
    <b class='flag-5'>ESP32-S3</b>模组烧录又失败?分享怎么排查原因

    充电桩选型对比:ESP32-S3模组和ESP32-C3模组谁更合适

    和整体解决方案供应商,有非常丰富的充电桩物联网项目经验,充电桩物联网选型中经常会用到ESP32-C3ESP32-S3模组,那么今天小启就对这几种方案做个对比,看
    的头像 发表于 04-30 08:04 7474次阅读
    充电桩选型对比:<b class='flag-5'>ESP32-S3</b>模组和<b class='flag-5'>ESP32-C3</b>模组谁更合适

    借助ESP32-S3主控MCU、ChirpLAN™小网关搭建大网络

    借助先进的ESP32-S3主控MCU,ChirpLAN™小网关为您带来前所未有的网络体验。
    的头像 发表于 03-14 10:02 1207次阅读