SoftAP模式简介 SoftAP配网步骤详细说明

描述

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

  1. SoftAP模式简介

    设备备通过 softAP 方式创建一个 Wi-Fi 热点,手机连接该热点,再通过数据通道例如 TCP/UDP 通讯,将目标 Wi-Fi 路由器的 SSID/PSW 传递该设备,设备获取后,即可连接 Wi-Fi 路由器从而连接互联网。同时,为了对设备进行绑定,手机 App 可以利用该 TCP/UDP 数据通道,将后台提供的配网 Token 发送给设备,并由设备转发至物联网后台,依据 Token 可以进行设备绑定。本文档主要指导您如何使用softAP 方式配网开发。

  2.SoftAP配网步骤

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

      2.配置WiFi 模式位softAP 配网模式。

      3.小程序按照提示依次获取 Wi-Fi 列表,输入家里目标路由器的 SSID/PSW,再选择设备 softAP 热点的 SSID/PSW。

      4.手机连接设备 softAP 热点成功后,小程序作为 UDP 客户端会连接 Wi-Fi 设备上面的 UDP 服务(默认 IP 为192.168.4.1,端口为8266)。

      5.小程序给设备 UDP 服务,发送目标 Wi-Fi 路由器的 SSID/PSW 以及配网 Token。

      6.如果2秒之内,未收到设备回复,则重复步骤5,UDP 客户端重复发送目标 Wi-Fi 路由器的 SSID/PSW 及配网 Token。(如果重复发送5次,都没有收到回复,则认为配网失败,Wi-Fi 设备有异常)

     7.如果步骤5收到设备回复,则说明设备端已收到 Wi-Fi 路由器的 SSID/PSW 及 Token,正在连接 Wi-Fi 路由器,并上报 Token。此时小程序会提示手机也将连接 Wi-Fi 路由器,并通过 Token 轮询物联网后台,来确认配网及设备绑定是否成功。

    7.设备端在成功连接 Wi-Fi 路由器后,需要通过 MQTT 连接物联网后台,并将小程序发送的配网 Token。

  3.硬件设置与WIFI接入

   1.登录腾讯云平台,进入交互开发,选择配网引导。

WIFI

      2.选择配网方式为AirKiss协议配网。点保存后即可生成二维码。

WIFIWIFI

    3.微信小程序daunt配网引导。

WIFI

      4.开始配网,配置热点信息。

WIFI

    5.开始配网,等待配网完成。

WIFI

    6. 配网调试信息

WIFI

4.程序设计

      softAP模式配置

/*SoftAP配网*/
u8 ESP8266_SoftAP_MOde(void)
{
    u8 token[]="{"cmdType":2,"productId":"LA57WTHWi2","deviceName":"Smart_123","protoVersion":"2.0"}rn";//连接状态信息
    char *p=NULL;
    char data[256];
    char buff[100];
    u8 i=0;
    u32 time1=0,time2=0;
    usart3_cnt=0;
    usart3_flag=0;
    while(1)
    {
        if(usart3_flag)
        {
            usart3_rx_buff[usart3_cnt]='�';
            printf("rx=%s",usart3_rx_buff);
            //+IPD,97,192.168.4.2,52021:{"cmdType":1,"ssid":"wbyq_wifi","password":"12345678","token":"df4a4c90abee98c9a443ae8ffd8cc16b"
            p=strstr((char *)usart3_rx_buff,"+IPD");
            if(p)
            {
                strcpy(data,p);//将接收到的数据拷贝一份保存
                p+=strlen("+IPD");
                p+=1;
                while(*p!=',' && *p!='�')p++;
                p++;//跳过字符',',获取到IP地址起始位置
                i=0;
                //IP地址解析
                while(*p!=',' && *p!='�')
                {
                   buff[i++]=*p++;
                }
                buff[i]='�';
                strcpy((char *)esp8266_info.esp8266_ip,buff);
                //端口号解析
                p++;
                i=0;
                while(*p!=':' && *p!='�')
                {
                   buff[i++]=*p++; 
                }
                buff[i]='�';
                esp8266_info.esp8266_prot=atoi(buff);//字符串转整数
                //printf("ip=%s:%drn",esp8266_info.esp8266_ip,esp8266_info.esp8266_prot);
                printf("ret:%drn",Esp8266_UDP_SendData((u8*)esp8266_info.esp8266_ip,esp8266_info.esp8266_prot,token));//上报连接状态
            }
           ESP8266_GetData(data,(char *)esp8266_info.esp8266_name,"ssid");//WIFI名
           ESP8266_GetData(data,(char *)esp8266_info.esp8266_key,"password");//密码
           ESP8266_GetData(data,(char *)esp8266_info.token,"token");//token数据,需要返回给平台
//           printf("wifi_name:%srn",esp8266_info.esp8266_name);
//           printf("wifi_key:%srn",esp8266_info.esp8266_key); 
//           printf("wifi_token:%srn",esp8266_info.token);            
           LED1=1;
           return 0;
        }
        Delay_Ms(1);
        time1++;
        time2++;
        if(time2>=100)
        {
           time2=0;
           LED1=!LED1;
        }  
        if(time1>=1000*300)
        {
            LED1=1;
            break;//超时退出
        }
    }
    return 1;
}

 

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分