企业号介绍

全部
  • 全部
  • 产品
  • 方案
  • 文章
  • 资料
  • 企业

启明云端

36内容数 4534看过 13粉丝

深圳市启明云端科技有限公司是国内领先的物联网通讯产品和整体解决方案提供商,主要提供物联网无线通讯芯片、模组、人机界面、工业控制嵌入式产品等

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

09-16 140人看过

物联网时代技术开始规模化服务于民众,方便快捷显得尤为重要,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

例程分析:

// 在 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(); // 开始连接WiFi
       xEventGroupClearBits(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
2) 编译工程         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停止

 

分享:

最近浏览过的用户(0查看全部

为你推荐

  • 用ESP32-S2做的带WIFI的2.4寸旋钮屏有哪些特点呢?工艺用的是什么呢?上传时间:2021-12-02 16:59

    2.4寸旋钮屏是启明云端针对市场IOT应用需求,基于乐鑫ESP32-S2与国产芯高效开发平台8ms(http://8ms.xyz)设计开发的一款旋钮屏。方案采用2.4寸分辨率为240*320的IPS彩屏,产品结构采用磁编码旋钮方案,结构紧凑、简单,外观精致;支持WIFI,方案常被应用于带屏空气炸锅、热水器、洗衣机、烤箱等智能家电产品,也常被作为传统段码屏,黑白屏产品方案升级首选。
    串口屏 单片机 ESP32 24人看过
  • 启明云端小尺寸串口屏在充电桩的应用上传时间:2021-11-15 18:42

    方案介绍行业概述随着新能源战略的部署和实施,电动汽车必将走进千家万户。充电桩应用也将大规模的安装至公共楼宇、商场、公共停车场及居民小区停车场或充电站内。从充电桩形态来看,有大的一体柜机,也有小型装于墙面的壁挂机,无论哪种形态,充电桩串口屏应用逐步成为标配,因为通过串口屏可以显示充电量、费用、充电时间等数据,友好的HMI人机界面能实现充电桩的简便使用。目前充电
    串口屏 18人看过
  • 启明云端分享| 3.92寸86盒彩屏烧录教程上传时间:2021-11-11 18:33

    启明云端从2013年起就作为Espressif(乐鑫科技)大中华区合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程。同时也用心推出了基于乐鑫的相关应用方案!希望你能第一时间了解并快速用上好的方案和产品!
    控制面板 串口屏 14人看过
  • 启明云端分享 | ESP32-C3 智能网关应用方案上传时间:2021-11-04 11:43

    AnIntroduction方案介绍IOT智能网关介绍IOT智能网关一般是充当物联网和互联网之间的桥梁,网关通过蓝牙广播或者连接蓝牙设备获取到蓝牙数据后通过自带的wifi或者网线上传云服务器。用户通过APP或者小程序对接云服务器远程对设备进行状态查看和管理。传统网关传统网关采用蓝牙芯片+带网络功能的主控方案较多。但由于芯片短缺以及多方案的开发联调,传统的蓝牙
    网关 ESP32 IOT 51人看过
  • 启明云端带你了解时下年青群体最需要的家电产品上传时间:2021-10-21 17:49

    近日小明做了一份针对90后人群的家电选用调查问卷,90%的人都选择了价格不要太贵、功能要强大点、操控要智能,颜值是首选。不可否认,90后群体逐步成为家电消费市场的有生力量,他们对家电的需求代表着年轻群体的心声。从他们的选择来看,最突出的是年轻群体开始愿意为颜值买单。01功能强大与实用功能是家电最核心的卖点,也是年轻消费群体选购时的重点。他们不再满足于传统功能
    物联网 34人看过
  • 一组图带你快速了解乐鑫ESP8266/ESP32/ESP32-C/ESP32-S系列芯片的区别上传时间:2021-10-15 18:42

    01WIFIESP8266(QFN32,55mm)、ESP32-S2(QFN56,77mm)02WIFI&蓝牙ESP32(QFN48,55mm)、ESP32-S3(QFN56,77mm)、ESP32-C3(QFN32,5*5mm)以下是小明为大家整理的各芯片之间的区别:乐鑫WIFI系列MCU乐鑫WIFI&蓝牙系列MCU开源的软件开发框架及应用技术支持深圳市启
    乐鑫 芯片 551人看过
  • 启明云端分享|盘点Esp32-C3与Esp8266 的区别上传时间:2021-10-12 18:31

    ESP8266&ESP32-C3硬件区别从上表可以看出ESP32-C3和ESP8266在硬件上的区别:1.ESP32-C3搭载RISC-V32位单核处理器,而ESP8266EX集成的是32位Tensilica处理器;2.工作电压方面,ESP32-C3也略低于ESP8266;3.GPIO口,ESP32-C3具有22个可编程GPIO管脚、内置400KBSRAM,
    ESP32 305人看过
  • 喜迎国庆 | 启明云端携手8ms平台邀您--设计最美UI·晒出你心中的“中国红”上传时间:2021-09-28 18:29

    如果信念有颜色,那一定是中国红9月25日晚间21时50分,飞机稳稳降落,机场灯火通明,机身上的五星红旗格外醒目。经过1000多天的煎熬,孟晚舟终于回到了祖国的怀抱!夜空下欢迎人群高举五星红旗,一同高唱《歌唱祖国》。孟晚舟发表感言:“祖国,我回来了!我想说,有五星红旗的地方,就有信念的灯塔。如果信念有颜色,那一定是中国红!”中国红,中国精神在刚结束不久的第32
    嵌入式 65人看过
  • 启明云端S系列串口屏1.54寸新品发布上传时间:2021-09-26 18:09

    用色彩渲染智慧的生活SMART启明云端为您提供多元化彩屏方案全力为创新应用赋能SMARTSCREENS系列1.54串口屏NO.1壹产品简介WT154-S2MT1是启明云端针对市场IOT应用需求,基于乐鑫ESP32-S2与国产芯高效开发平台8ms(http://8ms.xyz)设计开发的一款串口屏。方案采用1.54寸IPS彩屏,分辨率240×240,开发板结构
    串口屏 107人看过
  • 启明云端分享|ESP32-S3如何实现tcp_client和tcp_server上传时间:2021-09-24 17:50

    开发环境:esp-idf:master分支硬件需求Esp32-s3开发板TCP介绍:传输控制协议(TCP,TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP分为服务端Server和客户端Client,服务端创建服务等待客户端连接,客户端连接后即可与服务端相互发送消息,服务端只有一个,客户端可以
    ESP32 106人看过