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配网相关推荐

  1. 【Arduino自动配网+微信Airkiss配网】

    Arduino自动配网+微信Airkiss配网 一.Arduino自动配网 当密码输入正确时 当密码输入错误时 自动配网的代码 二.Arduino微信Airkiss配网. 关注安信可公众号选择微信配网 ...

  2. ESP8266开发之旅 网络篇⑭ web配网

    文章目录 1. 前言 2. Web配网(AP配网) 2.1 自定义AP配网 2.2 WiFiManager 3. 总结 授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大 ...

  3. ESP32开发--使用NVS存储数据

    ESP32基础系列 ESP32初体验之环境搭建 ESP32外设学习之GPIO ESP32外设学习之UART ESP32开发之给模块连上网络 ESP32的一键配网与Airkiss配网 ESP32使用NV ...

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

    1. ESP32的配网方式 1.1 前言 ESP32模块在实际使用时,可能需要连接不同的网络,如果将无线的 ssid 和 key 预先固定好,就回存在很大的局限性:所以我们引入了"空中配网技 ...

  5. ESP32 smart_config和airkiss配网

    陈拓 2021/11/28-2021/11/30 1. 简介 官方例程: https://gitee.com/EspressifSystems/esp-idf/tree/master/examples ...

  6. WIFI模块开发教程之W600网络篇6:Airkiss配网

    前言 本文研究如何使用微信Airkiss协议对模块进行配网,所谓配网即是说通知模块需要连接的路由器ssid和password的一种机制. 一.理论基础 1.Airkiss原理 设备处于混杂模式监听无线 ...

  7. 乐鑫esp8266学习rtos3.0笔记第4篇:带你捋一捋微信公众号 airkiss 配网 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. Esp8266之 搭建开发环境,开始一个"hello ...

  8. 微信小程序 airkiss 配网,SmartConfig配网,ap配网教程

    第一步,下载配网程序到esp8266 arduinoIDE开发: esp8266程序下载可参考:https://bemfa.blog.csdn.net/article/details/11771752 ...

  9. SmartConfig配网之微信AirKiss配网——AT指令

    文章目录 前言 第一章 介绍 第二章 固件烧录 第三章 操作步骤 微信AirKiss配网 总结 联系我们 前言 上一篇文章我们介绍了乐鑫的ESP-Touch软件完成SmartConfig配网功能,本篇 ...

最新文章

  1. 中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名
  2. 基于 OpenCV 的面部关键点检测实战
  3. ubuntu libapache2-mod-php5,ubuntu安装apache2 mysql5 php5
  4. 第七章 线性回归预测模型
  5. 09-mysql-分组函数-最大最小总和平均值
  6. kibana管理界面日志级别查询_微服务海量日志怎么处理,我不允许你还不知道这款工具...
  7. eclipse 创建 javaWeb 项目 如何 配置 tomcat
  8. Ubuntu18.04安装CAJViewer
  9. 微信多开设置网络代理服务器,微信多开终极技巧,可随意控制数量已亲测很好用...
  10. Cypress Test
  11. Scrum板与Kanban如何抉择?vfmzulfdr板与按照ftjzox
  12. 上周热点回顾(10.18-10.24)
  13. Android肝帝战纪之网络请求框架封装(Retrofit的封装)
  14. 原神换服报错(二级地址解析失败),换服失败,无反应
  15. 如何快速开发一个响应式移动端页面
  16. java在屏幕上打印出乘法口诀,Java打印乘法口诀
  17. 浅谈git rebase命令 -- git修改历史提交信息
  18. 12306排队是什么意思_12306 说:有时候,能排队也是一种幸福!
  19. 常见硬件术语手册!绝对权威!(转!)六、声卡术语解释
  20. 物联网概论(IoT)_Chp10 智慧地球与物联网应用/M2M/共享单车/无人驾驶

热门文章

  1. java jframe_java中的JFrame | 学步园
  2. Java过滤器链原理解析
  3. 阿里巴巴鹰眼技术解密
  4. locations 设计和实现
  5. 【Python爬虫实战】1.爬取A股上市公司年报链接并存入Excel
  6. 關於基於WinCE下的聲音系統調試的一些經驗總結之驱动程式部分(二)
  7. 海外仓相比跨境直发物流有哪些明显的优点和缺点呢
  8. 电脑如何录屏?3个方法教您win10电脑怎么录屏!
  9. C# 多线程一: Thread 的简单理解与运用
  10. 数字信号处理基本指令(3)实验三 吉布斯现象实验