ESP32使用Smartconfig和Airkiss配网方式连接无线路由器

本文主要是介绍ESP32使用Smartconfig和Airkiss配网方式连接无线路由器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. ESP32的配网方式

1.1 前言

ESP32模块在实际使用时,可能需要连接不同的网络,如果将无线的 ssid 和 key 预先固定好,就回存在很大的局限性;所以我们引入了“空中配网技术”,比如smartconfig,airkiss,蓝牙辅助配网等等。

Smartconfig与Airkiss 是目前使用比较广泛的空中配网技术,smartconfig 需要专用的 app 才能实现,airkiss 使用国民应用微信就可以实现,不需要额外的 app ,所以来测试一下 Smartconfig 和 airkiss 的无线空中配网技术。

1.2 主流空中配网技术的简介

  • Smartconfig
    智能硬件处于混杂模式下,监听网络中的所有报文;手机APP将当前连接的ssid和key编码到UDP报文中,通过广播或者组播的方式发送报文;智能硬件接收到UDP报文后解码,得到ssid和key,然后使用该组ssid和key去连接网络。
  • Airkiss
    AirKiss是微信硬件平台提供的一种WIFI设备快速入网配置技术,要使用微信客户端的方式配置设备入网,需要设备支持AirKiss技术。Aiskiss的原理和smartconfig很类似,设备工作在混杂模式下,微信客户端发送包含ssid和key的广播包,设备收到广播包解码得到ssid和可以。详细的可以参考微信官方的介绍。

2. 创建空中配网的测试工程

2.1 搭建开发环境

根据 使用VS Code的 ESP-IDF 插件开发ESP32 搭建好VSCODE+ESP-IDF的开发环境.

2.2 使用ESP-IDF提供的例程创建新的测试工程

  1. 查看 – 命令面板 – 输入 show examples projects – 回车
    输入指令

  2. 选中电脑安装的 ESP-IDF 版本
    选中电脑安装的idf版本

  3. 使用 idf 例程创建新工程
    创建工程

  4. 打开工程,修改源码,工程默认使用 SmartConfig 配网,我们修改为同时支持 smartconfig 和 airkiss
    空中配网的主要流程:
    1)初始化flash与wifi,注册回调事件;
    2)wifi初始化完成,运行smartconfig_example_task任务,启动smartconfig模式,等待广播包;
    3)收到广播包解码,获取到ssid和key;
    4)用得到的ssid和key连接,连接成功整个流程结束,删除smartconfig任务。

    主要代码如下:

    static void initialise_wifi(void)
    {ESP_ERROR_CHECK(esp_netif_init());s_wifi_event_group = xEventGroupCreate();ESP_ERROR_CHECK(esp_event_loop_create_default());esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();assert(sta_netif);wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK( esp_wifi_init(&cfg) );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) );ESP_ERROR_CHECK( esp_wifi_start() );
    }
    static void smartconfig_example_task(void * parm)
    {EventBits_t uxBits;//注意这里由原先的SC_TYPE_ESPTOUCH修改为SC_TYPE_ESPTOUCH_AIRKISS,这样既可以支持smartconfig方式配网,又支持airkiss配网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);}}
    }
    
  5. 编译并下载

  • 将 ESP32-WROOM-32 开发板接到电脑上,在设备管理器中查看对应的串口号,然后在vscode的配置好串口号
    选择串口号

  • 按住开发板的 Boot 按键不松后,再按一次 EN 按键,然后松开 Boot 按键,使开发板进入烧录模式

  • 点击一键编译、烧录、并监测串口信息
    一键编译、烧录

  • smartconfig 方式配网
    使用手机连接上wifi(只支持2.4G),打开官网提供的 ESPTOUCH 工具,配置 wifi 的密码,从esp32开发板打印的日志可以查看当前的状态
    smartconfig配网

  • airkiss 方式配网
    使用手机连接上wifi(只支持2.4G),打开微信,关注一个支持airkiss的公众号(测试可使用 安信可科技 的公众号),配置 wifi 的密码,从esp32开发板打印的日志可以查看当前的状态
    airkiss配网

  • 至此配网测试成功,不过每次复位开发板后,又要重新配网,太麻烦了,下面就来看看怎么保存配网信息,让它每次上电可以自动连接?


纯手写文章,转载请注明出处,谢谢!
如有任何错误,欢迎留言指正!

这篇关于ESP32使用Smartconfig和Airkiss配网方式连接无线路由器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089029

相关文章

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动