0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

WIFI智能配网简介及操作流程说明

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-26 14:09 次阅读

1.WIFI智能配网简介

Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指定的热点或路由器,并加入后者所建立的 Wi-Fi 网络
对于具备丰富人机界面包括屏幕/键盘的设备,例如电脑手机,可以直接输入 SSID/PSW 进行连接。
对于不具备丰富人机交互界面的物联网 Wi-Fi 设备,例如智能灯、扫地机器人等,则可以借助手机等智能设备,以某种配网方式将 SSID/PSW 传递该设备。

配网有多种方式,包括 SmartConfig、softAP、Airkiss 等,各自的特点比较如下:

配网方式 特点
WPS 存在安全性问题
SmartConfig 较便捷,但一般为各厂商采用私有协议,兼容性和互操作性较差
softAP 适配性兼容性较好,但手机端需要做两次 Wi-Fi 连接设置的切换,步骤较复杂
Airkiss 操作便捷无需热点配置,但为微信客户端私有协议,需设备端适配兼容
ble combo 操作便捷,但需要设备端支持 Wi-Fi+BLE 的 Combo 芯片方案

下面我们将以SmartConfig配网模式为例实战应用。相关操作步骤可参考腾讯云平台SmartConfig 配网开发文档

SmartConfig 配网开发文档:https://cloud.tencent.com/document/product/1081/48405

SmartConfig智能配网主要便于物联网设备接入云平台,只需相应app或者相关微信小程序(例腾讯连连)即可让设备快速入围,接入服务器。下面以微信小程序腾讯连连、云平台为腾讯云服务器,接入协议为MQTT3.1为例说明。

2.配网流程

1.在腾讯云平台选择智能配网模式。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

2.通过腾讯连连小程序进入配网模式,则可以在物联网开发平台服务获取到当次配网的 Token值;

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

3.配网调试信息

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_centerwatermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

4.微信小程序腾讯连连查看设备信息

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

3.软件设计

3.1 设置WIFI工作模式为:STA+TCPClinet,获取wifi连接状态,连接失败则进入配网模式,最终实现腾讯云平台连接

/****************STA+TCPclinet初始化*************/
u8 Esp8266_STA_TCPclinet_Init(u8 *wifi_name,u8 *wifi_key,u8 *server_ip,u16 server_port)
{
	char buff[100];
	/*退出透传模式*/
	u16 i=0;
    u8 stat=0;
	for(i=0;i<5;i++)
	{
		Usartx_SendString(USART3,(u8 *)"+++");//退出透传模式
		Delay_Ms(500);
		if(Esp8266_SendCmdCheckStat("ATrn","OKrn")==0)
		{
			i=0;
			break;
		}
	}
	if(i!=0)
	{
		printf("1.退出透传模式失败rn");
		return 0x7f;
	}
	printf("2.模块复位rn");
	if(Esp8266_SendCmdCheckStat("AT+RSTrn","OKrn"))return 1;	
	Delay_Ms(1000);
	Delay_Ms(1000);
	printf("3.关回显rn");
	if(Esp8266_SendCmdCheckStat("ATE0rn","OKrn"))return 2;   
	printf("4.设置模式STArn");
	if(Esp8266_SendCmdCheckStat("AT+CWMODE=1rn","OK"))return 4;
	if(ESP8266_GetWifi_Stat())//查询WIFI连接状态,未连接成功则进入配网模式
    {
        BEEP=1;
        Delay_Ms(100);
        BEEP=0;
        Delay_Ms(100);
        BEEP=1;
        Delay_Ms(100);
        BEEP=0;
        stat=1;//进入配网模式标志位         
        if(ESP8266_SetSmartMode())return 4;//配网失败  
    }
	printf("5.设置单连接rn");
	if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0rn","OK"))return 5;		
	snprintf(buff,sizeof(buff),"AT+CIPSTART="TCP","%s",%drn",server_ip,server_port);
//	printf("buff:%srn",buff);
	printf("6.连接服务器rn");
	if(Esp8266_SendCmdCheckStat(buff,"OK"))return 6;	  
	printf("7.配置透传模式rn");
	if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1rn","OKrn"))return 7;	
	printf("8.开始发送数据rn");
	if(Esp8266_SendCmdCheckStat("AT+CIPSENDrn",">"))return 8;	
	if(stat)return 0x80;//进入配网模式并且正常退出
    else return 0;//未进入配网模式,正常退出
}

3.2 smartconfig配网函数

本函数主要共能为配置WIFI 模式为Smart配网模式,连接WIFI热点,获取token信息上报到服务器。

/*开启Smart模式*/
u8 ESP8266_SetSmartMode(void)
{
    char buff[200];
    printf("1.进入smart配网模式rn");
    u32 time1=0,time2=0;
    if(Esp8266_SendCmdCheckStat("AT+CWSTARTSMARTrn","OK"))return 0x81;//开启Smart失败
    usart3_cnt=0;
    usart3_flag=0;
    while(1)
    {
        if(usart3_flag)
        {
            usart3_rx_buff[usart3_cnt]='�';
            printf("rx:%srn",usart3_rx_buff);
            if(strstr((char *)usart3_rx_buff,"smartconfig connected wifi"))//连接热点成功
            {
                usart3_cnt=0;
                usart3_flag=0;
                printf("2.关Smart模式rn");
                if(Esp8266_SendCmdCheckStat("AT+CWSTOPSMARTrn","OK"))return 0x82;  
                break;
            }
            else
            {
                usart3_cnt=0;
                usart3_flag=0;
                memset(usart3_rx_buff,0,sizeof(usart3_rx_buff));
            }
        }
        Delay_Ms(1);
        time1++;
        time2++;
        if(time2>=100)//配网模式100ms闪烁一次
        {
            time2=0;
            LED1=!LED1;
        }
        if(time1>=1000*300)return 0x83;//超时退出
    }
    printf("3.显示端口rn");
    if(Esp8266_SendCmdCheckStat("AT+CIPDINFO=1rn","OK"))return 0x84;
    printf("4.查询IPrn");
    if(ESP8266_GetIP())return 0x85; 
    printf("5.设置要连接的UDPrn"); 
    snprintf(buff,sizeof(buff),"AT+CIPSTART="UDP","%s",8266,8266,0rn",esp8266_info.esp8266_ip);
    if(Esp8266_SendCmdCheckStat(buff,"OKrn"))return 0x86; 
    printf("6.网络数据解析rn");
    if(ESP8266_NetworkConfig())return 7;  
    printf("7.模块复位rn");
    if(Esp8266_SendCmdCheckStat("AT+RSTrn","OKrn"))return 0x87;	
    Delay_Ms(1000);
    Delay_Ms(1000);    
    return 0;
}

3.3.微信小程序配网数据订阅与发布

通过订阅微信小程序信息,获取token值,将获取到的信息上报到微信小程序,从而实现设备配网。

//微信小程序配网数据订阅与发布
#define SET_WEIXIN_TOPIC  "$thing/down/service/LA54WTHWL3/Smart_123"//订阅
#define POST_WEIXIN_TOPIC "$thing/up/service/LA54WTHWL36/Smart_123"//发布 
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70#pic_center

3.4 主函数

int main()
{
    int i=0,key;
	u8 stat=0;
	u32 time=0;
	u16 cnt=0;
	float temp;
	Beep_Init();//蜂鸣器初始化
	Led_Init();//LED初始化
	Key_Init();//按键初始化
	Usartx_Init(USART1,115200,72);
	Usartx_Init(USART3,115200,36);
	TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
	TIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20ms
	DS18B20_Init();	
//	RTC_Init();//RTC初始化
	printf("初始化完成rn");
	while(1)
	{
		stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
		if(stat==0 || stat==0x80)break;
		printf("stat=%drn",stat);  
	}
	printf("服务器连接成功rn");
	while(1)
	{
		MQTT_Init();
		if(MQTT_Connect(ClientID,Username,Password)==0)break;
		Delay_Ms(500);
		printf("正在连接....rn");
	}
	printf("连接成功rn");
    if(stat==0x80)//进入配网模式需要给微信小程序返回token值
    {
          //订阅微信topic
         if(MQTT_SubscribeTopic(SET_WEIXIN_TOPIC,0,1))printf("订阅失败rn"); 
        //返回平台数据,告知微信连连连接服务器成功
        snprintf(mqtt_message,sizeof(mqtt_message),"{"method":"app_bind_token","clientToken":"client-1234","params": {"token":"%s"}}",esp8266_info.token);
        MQTT_PublishData(POST_WEIXIN_TOPIC,mqtt_message,0);
        //Smart_home{"method":"app_bind_token_reply","clientToken":"client-1234","code":0,"status":"success"} 配网成功后微信小程序返回数据
    }
    //订阅物联网平台数据
    stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
    if(stat)printf("订阅失败rn");   
	while(1)
	{
		if(usart3_flag)
		{
            for(i=0;i=5000)
		{
			time=0;
			MQTT_SentHeart();//发送心跳包
		}
		if(cnt>=2000)
		{
			cnt=0;
			temp=DS18B20_GetTemp()*0.0625;
			sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"LED1":1,"temp":%.2f,"L":356}}",temp);//温度
			MQTT_PublishData(POST_TOPIC,mqtt_message,0);
		}
	}
}
;i++)>


审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9050

    浏览量

    85249
  • wi-fi
    +关注

    关注

    14

    文章

    2119

    浏览量

    124375
  • 智能配电
    +关注

    关注

    0

    文章

    96

    浏览量

    9939
收藏 人收藏

    评论

    相关推荐

    扫码时,LCD出现分屏是什么原因导致的?

    在扫码或者智能时,中间看串口好像是少了6,7帧画面,如图下图日志所示,应该是WIFI写f
    发表于 06-11 06:27

    根据espesp-idfexampleswifismart_config例程来编写的智能,怎么做才能判断智能连接是否失败?

    (wifi_config_t)); /* 将结构体数据清零 */ /* 将智能设备发送来的WiFi的ssid、password及MAC
    发表于 06-19 07:00

    ESP32C3 wifi失败的原因?

    1, 采用官方提供的at固件,固件版本V2.4.2; 2,发送AT+CWSTARTSMART进入WiFi,启动app; 问题:在2
    发表于 06-26 06:00

    迪文屏说明

    。 DGUS 2平台支持手动和一键两种网络配置方式,适用于智能家居、智慧建筑、检测仪表等多种应用场景中。
    发表于 04-29 16:05

    wifi模块问题

    在网上搜了索到了两种方式,不过都还有一下疑惑, 在这里请教一下大家:1 AP 模式连接疑问地方: 设备设置为AP模式,创建了一个没有密码的SSID,设备需要进入怎样的环境才能收到手机端发过来
    发表于 06-04 02:14

    鸿蒙直播:WiFi IoT 弹出式

    `主题:WiFi IoT 弹出式简介:本次课程由鸿蒙社区活跃、资深的项目经理来给大家带来,在WiFi IoT 开发板上实现的弹出式
    发表于 03-15 10:43

    流程概述

    流程概述协议承载层(Provisioni
    发表于 07-22 08:53

    智能设备zigbee模式

    智能设备有AP个EZ两种模式,如果有Zigbee网关,添加设备时在APP网关界面点添加设备,按下设备叫键就能添加设备,这是不是EZ
    发表于 12-08 15:32

    Hi3861:智能录音笔【环境搭建+

    直接入网(flash存储掉电WIFI信息),若不能直接联网则进行操作,此时拒绝联网只能实现基础录音放音功能,当使用数字管家进行
    发表于 12-31 10:35

    在使用智能时如果输入WiFi的密码是错的,为什么会反复尝试连接WiFi

    我是根据\esp\esp-idf\examples\wifi\smart_config例程来编写的智能,如果输入密码是错的,程序也不会返回信息给手机APP,要怎么做才能判断
    发表于 02-17 07:07

    JDBC操作流程说明

    JDBC操作流程说明JDBC操作流程说明JDBC操作
    发表于 11-10 15:32 4次下载

    【技术分享】WiFi模块常见的方式简介

    方式。WiFi模块常见的WiFi模块方式,一般可以归类为直接
    的头像 发表于 05-07 22:54 7892次阅读
    【技术分享】<b class='flag-5'>WiFi</b>模块常见的<b class='flag-5'>配</b><b class='flag-5'>网</b>方式<b class='flag-5'>简介</b>

    关于Wifi设备的问题

    今天写个物联网的技术文章——关于Wifi设备为什么失败。这相信是很多做过Wifi产品的制造业企业遇到的客诉最多的问题——消费者因Wifi
    的头像 发表于 06-04 14:09 7533次阅读
    关于<b class='flag-5'>Wifi</b>设备的<b class='flag-5'>配</b><b class='flag-5'>网</b>问题

    WIFI模块的各种方式之比较(串口AT、SmartConfig、微信Airkiss、WEB网页....)

    不够好的WIFI模组,在使用智能时,经常会遇到很难成功的情形。而在终端用户那边,因为操作的复杂性,导致
    的头像 发表于 08-09 19:22 5809次阅读

    涂鸦智能联手亚马逊,推出蓝牙无感知解决方案

    “每次买智能设备,最烦的就是第一次流程太麻烦了,操作步骤少说也有9步左右,中间还很容易连接错误之类的,但凡一个步骤不对,都需要从头开始
    的头像 发表于 11-21 09:50 784次阅读
    涂鸦<b class='flag-5'>智能</b>联手亚马逊,推出蓝牙无感知<b class='flag-5'>配</b><b class='flag-5'>网</b>解决方案