ESP32开发--一键配网与Airkiss配网
ESP32基础系列
- ESP32初体验之环境搭建
- ESP32外设学习之GPIO
- ESP32外设学习之UART
- ESP32开发之给模块连上网络
- ESP32的一键配网与Airkiss配网
- ESP32使用NVS存储数据
- ESP32开发--NVS存储配网信息+自动重连
- ESP32之Cmake的介绍与组件的添加
- ESP32之为配网模式添加按键和指示灯
本文目录
一.Smartconfig与Airkiss简介
二.官方例程解析
引出问题:上一章给模块联网的例程中,模块连接的ssid和key是我们预先设定好的,但在实际的产品中,我们不可能采用这种方式。这时候我们会想到,能不能像手机一样,展示所有的wifi列表,然后点击输入密码连接,这种方式当然式可以的,问题就在于会增加产品的成本,而且在有些场景下不一定适合。所以这时候就引用了“空中配网技术”,比如smartconfig,airkiss,蓝牙辅助配网,阿里的零配等等。这一章我们学习下ESP32如何通过smartconfig和airkiss两种方式连接上网络。
一.Smartconfig与Airkiss简介
1.Smartconfig
智能硬件处于混杂模式下,监听网络中的所有报文;手机APP将当前连接的ssid和key编码到UDP报文中,通过广播或者组播的方式发送报文;智能硬件接收到UDP报文后解码,得到ssid和key,然后使用该组ssid和key去连接网络。简单流程如下:
2.Airkiss
AirKiss是微信硬件平台提供的一种WIFI设备快速入网配置技术,要使用微信客户端的方式配置设备入网,需要设备支持AirKiss技术。Aiskiss的原理和smartconfig很类似,设备工作在混杂模式下,微信客户端发送包含ssid和key的广播包,设备收到广播包解码得到ssid和可以。详细的可以参考微信官方的介绍。
二.官方例程解析
1.流程简介
1)初始化flash与wifi,注册回调事件;
2)wifi初始化完成,运行smartconfig_example_task任务,启动smartconfig模式,等待广播包;
3)收到广播包解码,获取到ssid和key;
4)用得到的ssid和key连接,连接成功整个流程结束,删除smartconfig任务。
核心的代码主要是以下部分:
//smartconfig任务
static void smartconfig_example_task(void * parm)
{EventBits_t uxBits;//注意这里我把参数换成了SC_TYPE_ESPTOUCH_AIRKISS,这样既可以支持smartconfig方式配网,又支持airkiss配网ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS) );//以默认方式启动smartconfig模式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);}}
}//处理各种回调事件
static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
{//wifi初始化完成,启动smartconfigif (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096, NULL, 3, NULL);}//wifi连接失败,设置重连else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {esp_wifi_connect();xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);} //模块联网成功,得到了IPelse 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");} //smartconfig收到报文并解码出ssid和keyelse 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 };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);//使用新得到的ssid和key连接网络ESP_ERROR_CHECK( esp_wifi_disconnect() );ESP_ERROR_CHECK( esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );ESP_ERROR_CHECK( esp_wifi_connect() );}//smartconfig配置完成 else if (event_base == SC_EVENT && event_id == SC_EVENT_SEND_ACK_DONE) {xEventGroupSetBits(s_wifi_event_group, ESPTOUCH_DONE_BIT);}
}
其中核心的应该是esp_smartconfig_start函数,不过再下一层的esp_smartconfig_internal_start函数源码并不对我们公布。
再来看看打印信息,首先是smartconfig的:
Airkiss连接情况:
这样两种配网方式都成功了。但是有个问题:配网信息没有保留,每次上电又要重新配网,这种方式显然是不合适的,这样就让我们思考如何存储配网信息,让它每次上电可以自动连接呢?带着这个问题,我们不得不去学习官方有关存储的例程,具体如何实现,我们接下来的章节再介绍!
纯手写文章,转载请注明出处,谢谢。有任何不当之处,欢迎指正!
ESP32开发--一键配网与Airkiss配网相关推荐
- 【Arduino自动配网+微信Airkiss配网】
Arduino自动配网+微信Airkiss配网 一.Arduino自动配网 当密码输入正确时 当密码输入错误时 自动配网的代码 二.Arduino微信Airkiss配网. 关注安信可公众号选择微信配网 ...
- ESP8266开发之旅 网络篇⑭ web配网
文章目录 1. 前言 2. Web配网(AP配网) 2.1 自定义AP配网 2.2 WiFiManager 3. 总结 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大 ...
- ESP32开发--使用NVS存储数据
ESP32基础系列 ESP32初体验之环境搭建 ESP32外设学习之GPIO ESP32外设学习之UART ESP32开发之给模块连上网络 ESP32的一键配网与Airkiss配网 ESP32使用NV ...
- ESP32使用Smartconfig和Airkiss配网方式连接无线路由器
1. ESP32的配网方式 1.1 前言 ESP32模块在实际使用时,可能需要连接不同的网络,如果将无线的 ssid 和 key 预先固定好,就回存在很大的局限性:所以我们引入了"空中配网技 ...
- ESP32 smart_config和airkiss配网
陈拓 2021/11/28-2021/11/30 1. 简介 官方例程: https://gitee.com/EspressifSystems/esp-idf/tree/master/examples ...
- WIFI模块开发教程之W600网络篇6:Airkiss配网
前言 本文研究如何使用微信Airkiss协议对模块进行配网,所谓配网即是说通知模块需要连接的路由器ssid和password的一种机制. 一.理论基础 1.Airkiss原理 设备处于混杂模式监听无线 ...
- 乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...
- 微信小程序 airkiss 配网,SmartConfig配网,ap配网教程
第一步,下载配网程序到esp8266 arduinoIDE开发: esp8266程序下载可参考:https://bemfa.blog.csdn.net/article/details/11771752 ...
- SmartConfig配网之微信AirKiss配网——AT指令
文章目录 前言 第一章 介绍 第二章 固件烧录 第三章 操作步骤 微信AirKiss配网 总结 联系我们 前言 上一篇文章我们介绍了乐鑫的ESP-Touch软件完成SmartConfig配网功能,本篇 ...
最新文章
- 中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名
- 基于 OpenCV 的面部关键点检测实战
- ubuntu libapache2-mod-php5,ubuntu安装apache2 mysql5 php5
- 第七章 线性回归预测模型
- 09-mysql-分组函数-最大最小总和平均值
- kibana管理界面日志级别查询_微服务海量日志怎么处理,我不允许你还不知道这款工具...
- eclipse 创建 javaWeb 项目 如何 配置 tomcat
- Ubuntu18.04安装CAJViewer
- 微信多开设置网络代理服务器,微信多开终极技巧,可随意控制数量已亲测很好用...
- Cypress Test
- Scrum板与Kanban如何抉择?vfmzulfdr板与按照ftjzox
- 上周热点回顾(10.18-10.24)
- Android肝帝战纪之网络请求框架封装(Retrofit的封装)
- 原神换服报错(二级地址解析失败),换服失败,无反应
- 如何快速开发一个响应式移动端页面
- java在屏幕上打印出乘法口诀,Java打印乘法口诀
- 浅谈git rebase命令 -- git修改历史提交信息
- 12306排队是什么意思_12306 说:有时候,能排队也是一种幸福!
- 常见硬件术语手册!绝对权威!(转!)六、声卡术语解释
- 物联网概论(IoT)_Chp10 智慧地球与物联网应用/M2M/共享单车/无人驾驶