联盛德W801系列2-WIFI一键配网,信息保存

2023-11-23 20:50

本文主要是介绍联盛德W801系列2-WIFI一键配网,信息保存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.使用例程测试一键配网
  • 2.实用配网过程
    • 2.1 上电检查是否配过网
    • 2.2 一键配网成功后,保存配网信息
    • 2.3 重新配网,必须清除配网信息
    • 2.4 设置断网自动重连
  • 3. 一键配网原理参考文章

1.使用例程测试一键配网

  1. 在《wm_demo.h》中,打开宏定义:
    在这里插入图片描述
  2. 编译下载后,可以用串口命令 “t-oneshot” 进入一键配网:
    在这里插入图片描述
  3. 使用 公众号 联盛德微电子的airkiss配网程序,搜索进入联盛德微电子公众号,
    在这里插入图片描述
  4. 在服务界面点击“AirKiss配网”:
    在这里插入图片描述
  5. 进入airkiss界面:
    在这里插入图片描述
  6. airkiss显示手机所连接的wifi AP 名字,输入密码:
    在这里插入图片描述
  7. 开始连接,串口会打印一下连接过程的信息,获取IP地址后,说明配网成功:
stop airkiss oneshot config...
start airkiss oneshot config...
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:078
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:078
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:079
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:079
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:080
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:080
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:077
Src:c4:06:83:49:a5:da, tick:48803
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:077
Src:c4:06:83:49:a5:da, tick:48806
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:078
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:078
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:079
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:079
isfromds:0, MAC:c4:06:83:49:a5:da,frm_len:080
fixed chan
isfromds:1, MAC:c4:06:83:49:a5:da,frm_len:080
fixed chan
airkiss: sync chan, base len:76, tick:48822
ds:0,  total_len:17, ssid_crc:84, tick:49816
ds:0, pwd_len:9, pwd_crc:9c
ds:1, pwd_len:9, pwd_crc:9c
airkiss_ssid:hycwifi
airkiss_total_len:17, 9, 7
crc:63,ds:0, index:0, 5
crc:2f,ds:0, index:1, 5
crc:16,ds:0, index:2, 5
airkisss total data len:17, pwd len:9, ssid len:7
airkiss: pwd:********, random:194,ssid:hycwifi, tick:50321
tls_wl_mem_reinit:c000000
airkiss join successful,storage id pwd.
stop airkiss oneshot config...
NETIF_WIFI_JOIN_SUCCESS
ip: 192.168.110.134
sta ip: 192.168.110.134
oneshot net up, time:40684

配网成功后,手机小程序有相应的提示:
在这里插入图片描述

2.实用配网过程

2.1 上电检查是否配过网

上面的例子只是测试用的,在产品中,开机时需要判断上一次是否有配过网:1.有,利用上次的id和密码直接联网;2。无,进入一键配网。
flash操作的更多信息参考 《联盛德W801系列1-flash保存数据例程》。

void UserMain(void)
{
#if DEMO_CONSOLE//CreateDemoTask();	//产品化的程序不要这行
#endif
......tls_get_mac_addr(g_macBuf);//	读取配置,看看有没有配过网ReadWifiParam();		printf("wificfg:%02X \n",wifiCfgByte);if(wifiCfgByte == wifi_configed){demo_connect_net(airkiss_ssid,airkiss_pwd);	//有,利用上次的id和密码直接联网}else{demo_oneshot();								//无,进入一键配网}	
}

2.2 一键配网成功后,保存配网信息

一开始我是在《wm_connect_net_demo.c》的con_net_status_changed_event 函数里面保存配网信息,如下图。后来发现,直接联网也会进入这个函数,必须在一键配网刚完成时保存。
在这里插入图片描述
选择在《wm_oneshot_airkiss.c》的oneshot_airkiss_finish_new 函数里面保存配网信息。
在这里插入图片描述

2.3 重新配网,必须清除配网信息

这里再贴出flash操作的代码:

	typedef enum {wifi_unconfiged = 0,wifi_configed   = 0xAA,}wifi_info_storage_t;
extern	u8 airkiss_pwd[65];
#define		wifiCfgByte		airkiss_pwd[64]			//	使用密码数组最后一个字节作为配网标记
extern	u8 airkiss_ssid[33];
#define		PARAM_FLASH_ADDR_BASE		0x1fb000		//	0x08200000 - 0x1000  最后4k,一个扇区
#define		PARAM_FLASH_DATA_LEN		8
///============  开启配网需要相应的保存函数    
#if		TLS_CONFIG_AIRKISS_MODE_ONESHOT#define		PARAM_FLASH_ADDR_WIFI_ID_LEN	33#define		PARAM_FLASH_ADDR_WIFI_PWD_LEN	65#define		PARAM_FLASH_ADDR_WIFI_ID_OFFSET  (PARAM_FLASH_DATA_LEN)#define		PARAM_FLASH_ADDR_WIFI_PWD_OFFSET	(PARAM_FLASH_ADDR_WIFI_ID_OFFSET+PARAM_FLASH_ADDR_WIFI_ID_LEN)#define		PARAM_FLASH_ADDR_WIFI_CFG_OFFSET	(PARAM_FLASH_ADDR_WIFI_PWD_OFFSET+PARAM_FLASH_ADDR_WIFI_PWD_LEN-1)///==========传入参数为  wifi_info_storage_t ================void	WriteWifiParam(unsigned char configByte){unsigned char write_buf[PARAM_FLASH_ADDR_WIFI_ID_LEN+PARAM_FLASH_ADDR_WIFI_PWD_LEN];wifiCfgByte = configByte;memcpy(write_buf,airkiss_ssid,sizeof(airkiss_ssid));memcpy(write_buf+PARAM_FLASH_ADDR_WIFI_ID_LEN,airkiss_pwd,sizeof(airkiss_pwd));tls_fls_write(PARAM_FLASH_ADDR_BASE+PARAM_FLASH_ADDR_WIFI_ID_OFFSET, write_buf, sizeof(write_buf));	}//	unsigned char ReadWifiParam(void){tls_fls_read(PARAM_FLASH_ADDR_BASE+PARAM_FLASH_ADDR_WIFI_ID_OFFSET, airkiss_ssid, sizeof(airkiss_ssid));tls_fls_read(PARAM_FLASH_ADDR_BASE+PARAM_FLASH_ADDR_WIFI_PWD_OFFSET, airkiss_pwd, sizeof(airkiss_pwd));return wifiCfgByte;}
#endif	//		TLS_CONFIG_AIRKISS_MODE_ONESHOT

需要清除配网信息时,只要调用函数 WriteWifiParam,传入wifi_unconfiged 参数就可以。

WriteWifiParam(wifi_unconfiged );

在我的项目中,有遥控器,使用复合键产生一个擦除的指令,主板接受到指令后调用上面的函数。

2.4 设置断网自动重连

有时候路由器莫名其妙的断网,或者被人为断电导致断网,这些都需要断网重连。联盛德的SDK已经有断网重连的机制,不过默认是关闭的,需要下面的代码打开配置:

    u8 	auto_reconnect = WIFI_AUTO_CNT_ON;tls_wifi_auto_connect_flag(WIFI_AUTO_CNT_FLAG_SET, &auto_reconnect);

这2行代码分别放在直接连网和一键配网的最后面。
在这里插入图片描述
在这里插入图片描述

3. 一键配网原理参考文章

物联网之 WIFI 一键配网 SMARTCONFIG 浅析(ESP32)
此处摘录部分内容:

smartConfig 模式:
这种快速连接方式,相对于 AP 模式连接简化操作,更加贴近于市场
1、手机连上 WiFi,打开智能硬件指定 APP 软件,进入配置界面,输入手机所在 WiFi 密码,请求配网 TOKEN
2、智能硬件开启混杂模式监听所有网络数据包
3、手机通过广播、组播循环发送 ssid/password/token
4、硬件设备通过 UDP 包(长度)获取配置信息捕捉到 ssid/password/token,连接路由器(广播根据 UDP 包长度,组播根据 IP 地址信息)

这篇关于联盛德W801系列2-WIFI一键配网,信息保存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可