首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

乐鑫Esp32学习之旅⑥ smartConfig和微信airKiss在esp32的实现,一键配网轻松快捷连接路由器。(附带Demo)

  • 23-11-14 06:41
  • 3016
  • 9990
blog.csdn.net

  • 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。

1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。
2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。
3、 认识基本esp32的GPIO接口,开始点亮您的第一盏 LED和中断回调实现按键功能 。
4、体会esp32的强大的定时器功能, 实现定时2s闪烁一盏LED灯。
5、接触实践esp32的pwm宽度脉冲功能, 实现呼吸效果闪烁一盏LED灯。
6、smartConfig和微信airKiss在esp32的实现,一键配网轻松快捷连接路由器。
7、利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。
8、esp32上实现本地 UDP 客户端和服务端角色,在局域网内实现通讯。
9、esp32上实现本地 TCP 客户端和服务端角色,可断线重连原路返回数据。
10、乐鑫esp32 SDK编程利用rmt驱动ws2812七彩灯,实现彩虹渐变效果。
11、入门 乐鑫esp-adf 音频框架开发,esp32造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。
12、开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。
13、esp32 内置 dns 服务器,无需外网访问域名返回指定网页。
14、esp32 sdk编程实现门户强制认证,连接esp32热点之后,自动强制弹出指定的登录界面。
15、认识本地离线语音唤醒识别框架 esp-skainet ,实现较低成本的硬件语音本地识别控制。
16、学习本地语音唤醒离线识别框架 esp-skainet ,如何修改唤醒词? 如何自定义命令词?如何做意图动作?
17、全网首发,乐鑫esp32 sdk直连京东微联·小京鱼 · IoT开放平台,实现叮咚音响语音智能控制。
18、入门京东微联·小京鱼的控制面板H5开发,读懂vue语法,做自己的控制页面。
19、重磅开源,如何在微信小程序上ble蓝牙配网esp32,blufi的那些事!
20、一篇好文,开发过程中编译esp32固件太大,无法正常启动?教你如何自定义分区表partitions.csv。


文章目录

      • 本篇博文目录:
      • 一. 前言;
      • 二. 编译官方`Demo`;
      • 三. `smartConfig`代码分析以及实现;
      • 四. `airKiss`代码分析以及实现;
      • 五. `airKiss`的爬坑记录,特记在此;
      • 六. 下载;

本篇博文目录:

文章目录

      • 本篇博文目录:
      • 一. 前言;
      • 二. 编译官方`Demo`;
      • 三. `smartConfig`代码分析以及实现;
      • 四. `airKiss`代码分析以及实现;
      • 五. `airKiss`的爬坑记录,特记在此;
      • 六. 下载;

一. 前言;


  • 每一款嵌入式的WI-Fi芯片,配网功能都是必不可少的。乐鑫有smartConfig,在esp32上也不例外,但是官方已经提到支持了airKiss,但是例程中是没有提供的,信中回到并不是很详细。既然乐鑫主打esp32那么肯定是支持airKiss的,这篇带大家进坑到出坑走走官方的smartConfig和airkiss在esp32的实现!

二. 编译官方Demo;


  • 下图的smart_config就是我们今天的主角!

这里写图片描述


  • 一般我都是把这个工程文件隔离开我们的IDF仓库的,因为拉取最新代码时候,有可能会合并代码,导致自己写好的代码不见了!
  • 命令符make menuconfig配置好SDK文件,修改下我们要下载的端口号;
  • 导进我们的eclipse编译器,配置好编译环境,此步骤见我的前面的博文!

三. smartConfig代码分析以及实现;


  • 对比esp8266的代码,如果没有freeRtos的基础,这个看不懂的!

以个人水平理解如下:

①:smartConfig的模式开启和是否连接AP成功的判断,完全是异步进行的!
②:代码运行线是创建一个事件组,管理我们的smartConfig和获取系统的IP回调进行关联,等待系统初始化完毕后,开始进行smartConfig模式!
③:之后在smartConfig的回调事件中发信息给另外一个任务,告诉它已经连接成功!


注意①:在SC_STATUS_LINK_OVER的回调下面,对比esp8266,我们发现多了下行代码,看见方法名字,字面理解就是向wifi_event_group这个事件组,发送了ESPTOUCH_DONE_BIT的消息,以表示通过smartConfig连接成功了路由器!

xEventGroupSetBits(wifi_event_group, ESPTOUCH_DONE_BIT);
  • 1

注意点②:在esp_event_loop_init()设置的回调事件,是一个设置轮询在回调的方法,在其的方法回调中,拦截了三个状态:SYSTEM_EVENT_STA_START、SYSTEM_EVENT_STA_GOT_IP和SYSTEM_EVENT_STA_DISCONNECTED,后面的系统断开连接回调,估计只是为了适配这个demo!实际开发中,不需要拦截这个!

switch (event->event_id) {
    //系统初始化完成的回调
	case SYSTEM_EVENT_STA_START:
		xTaskCreate(smartconfig_example_task, "smartconfig_example_task", 4096,
				NULL, 3, NULL);
		break;
    //系统获取到AP分配的IP的回调
	case SYSTEM_EVENT_STA_GOT_IP:
		xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
		break;
	//系统断开连接回调
	case SYSTEM_EVENT_STA_DISCONNECTED:
		esp_wifi_connect();
		xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
		break;
	default:
		break;
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

注意③:配网回调的函数,是乐鑫专门封装的,和esp8266的一样的,只是在连接成功后,并没有立刻停止配置,而是通过异步方式通知任务去停止配置!

static void sc_callback(smartconfig_status_t status, void *pdata) {
	switch (status) {
	//连接未开始,请勿在此阶段开始连接。
	case SC_STATUS_WAIT:
		ESP_LOGI(TAG, "SC_STATUS_WAIT");
		break;
	//发现WIfi信道
	case SC_STATUS_FIND_CHANNEL:
		ESP_LOGI(TAG, "SC_STATUS_FINDING_CHANNEL");
		break;
	//得到wifi名字和密码
	case SC_STATUS_GETTING_SSID_PSWD:
		ESP_LOGI(TAG, "SC_STATUS_GETTING_SSID_PSWD");
		break;
   //已经获取wifi名字与密码在连接路由器
	case SC_STATUS_LINK:
		ESP_LOGI(TAG, "SC_STATUS_LINK");
		wifi_config_t *wifi_config = pdata;
		ESP_LOGI(TAG, "SSID:%s", wifi_config->sta.ssid);
		ESP_LOGI(TAG, "PASSWORD:%s", wifi_config->sta.password);
		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());
		break;
    //成功获取到IP,连接路由完成。
	case SC_STATUS_LINK_OVER:
		ESP_LOGI(TAG, "SC_STATUS_LINK_OVER");
		if (pdata != NULL) {
			uint8_t phone_ip[4] = { 0 };
			memcpy(phone_ip, (uint8_t*) pdata, 4);
			ESP_LOGI(TAG, "Phone ip: %d.%d.%d.%d
", phone_ip[0], phone_ip[1],
					phone_ip[2], phone_ip[3]);
		}
		//发送消息到另外一个任务,告诉它已经连接成功
		xEventGroupSetBits(wifi_event_group, ESPTOUCH_DONE_BIT);
		break;
	default:
		break;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

注意点⑤:在外面的主任务里面有个死循环,不断等待轮询标志位:

	while (1) {
		uxBits = xEventGroupWaitBits(wifi_event_group,
				CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY);
		//如果获取的标志位是成功获取IP,则表示成功连接到了Wi-Fi		
		if (uxBits & CONNECTED_BIT) {
			ESP_LOGI(TAG, "WiFi Connected to ap");
		}

       //如果获取的标志位是一键配置的回调表示成功连接到了Wi-Fi,则停止配置	
		if (uxBits & ESPTOUCH_DONE_BIT) {
			ESP_LOGI(TAG, "smartconfig over");
			esp_smartconfig_stop();
			vTaskDelete(NULL);
		}
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

  • 注意我们在设置配网方式触发为:esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS),支持smartConfig和airKiss就可以了,下图是smartConfig的手机APP和串口打印数据!

这里写图片描述


四. airKiss代码分析以及实现;


  • 说到airKiss,我不得不说下我们需要的工具,大家必须要有一个可以支持airKiss的微信公众号,乐鑫官方的或者是安信可也可以,这个接口是微信提供的,界面不得让你修改!或者你使用我在微信下载用的安卓APK来实验配网也行的!
  • 这里贴下微信定义airKiss的说明链接:http://iot.weixin.qq.com/wiki/new/index.html?page=4-1-2

下图是我总结的配网图,大家也没必要把airKiss当作那么神秘!

这里写图片描述

切记,使用官方的代码是没有指定配网类型为airKiss的,需要我们手动改如下:

esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_AIRKISS);
  • 1

  • 最后截图如下:

这里写图片描述


五. airKiss的爬坑记录,特记在此;


  • 在今天2018/5/30为止,最新的代码并没有兼容到airKiss,可能是由于官方人员疏忽,在代码合并时候,少合并了代码,导致airKiss配网不成功!所以,我这切换到分支release/v3.0,再进行一次编译即可!希望乐鑫可以修补下这个bug!!

这里写图片描述


六. 下载;


本硬件的代码下载:https://download.csdn.net/download/xh870189248/10447731

esp32汇总工程,欢迎star,收到第一更新信息:https://github.com/xuhongv/StudyInEsp32


  • 如果您没有关注带airKiss的公众号,可以扫描下面二维码下载安卓版的APK,仅作调试用!注意这个是airKiss协议!

这里写图片描述


  • 这个是我自己制作的smartConfig的安卓APK!注意这个是smartConfig协议!

这里写图片描述

注:本文转载自blog.csdn.net的半颗心脏的文章"https://blog.csdn.net/xh870189248/article/details/80430077"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top