色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32+ESP8266連接騰訊IOT微信小程序一鍵配網(wǎng)

1126626497 ? 來(lái)源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2022-03-18 09:20 ? 次閱讀

?

一、環(huán)境介紹

編程軟件:keil5

主控MCU:STM32F103C8T6

WIFI: ESP8266

協(xié)議: MQTT

二、前言

這里的 WIFI型號(hào)不重要、主控MCU不重要,連接的物聯(lián)網(wǎng)平臺(tái)也不重要。

要完成本章節(jié)的內(nèi)容,只要會(huì)熟悉某款單片機(jī)的編程、了解基本的網(wǎng)絡(luò)編程,明白MQTT協(xié)議、能讀懂每個(gè)物聯(lián)網(wǎng)云平臺(tái)的幫助文檔都可以完成最終的效果。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

三、功能介紹

前面有幾篇內(nèi)容都介紹了如何使用在騰訊物聯(lián)網(wǎng)平臺(tái)創(chuàng)建設(shè)備,完成微信小程序與設(shè)備進(jìn)行交互;這些設(shè)備代碼里的連接的WIFI名稱和密碼都是固定,只能通過(guò)每次修改程序、編譯、下載才能更改。一個(gè)正常的物聯(lián)網(wǎng)智能設(shè)備,這樣操作肯定是不合理的,所以這篇內(nèi)容就完成如何使用微信小程序一鍵配網(wǎng),完成設(shè)備的WIFI切換、連接。

現(xiàn)在我們購(gòu)買的智能設(shè)備都有自己的配網(wǎng)方式,比如: 小米的很多設(shè)備,小愛(ài)音箱,攝像頭,掃地機(jī)器人等。這些設(shè)備買回來(lái)之后,用戶可以參考說(shuō)明書,完成對(duì)設(shè)備的配置,讓設(shè)備連接上家里的WIFI,完成網(wǎng)絡(luò)連接。

本次我以智能鎖為產(chǎn)品模型,在騰訊物聯(lián)網(wǎng)平臺(tái)創(chuàng)建一個(gè)設(shè)備,使用STM32F103系統(tǒng)板+ESP8266+LED燈完成智能鎖產(chǎn)品的模擬開發(fā);用戶設(shè)備端可以按下指定的按鍵進(jìn)入配網(wǎng)模式,打開騰訊官方的微信小程序,掃描產(chǎn)品二維碼,根據(jù)步驟完成對(duì)設(shè)備的配網(wǎng)操作。

騰訊物聯(lián)網(wǎng)支持了好幾種配網(wǎng)模式,我這里選擇的是“softAP”模式來(lái)完成配網(wǎng)操作。

softAP 模式配網(wǎng)的原理介紹: 正常情況下我們買回來(lái)的新設(shè)備內(nèi)部是沒(méi)有我們自己家WIFI的信息的,也就是說(shuō)這個(gè)設(shè)備上電之后自己不知道該連接哪一個(gè)WIFI;這時(shí)我們就需要想辦法把我們自己家里的WIFI名稱、WIFI密碼告訴這個(gè)設(shè)備,這個(gè)設(shè)備就可以去連接了。 那問(wèn)題是怎么去告訴設(shè)備這些信息? 設(shè)備一般都有進(jìn)入配網(wǎng)模式的按鈕,進(jìn)入配網(wǎng)模式之后,會(huì)將設(shè)備內(nèi)部的WIFI設(shè)置成“softAP”模式,也就是設(shè)備自己會(huì)創(chuàng)建一個(gè)WIFI熱點(diǎn)出來(lái)并創(chuàng)建UDP服務(wù)器監(jiān)聽連接,這時(shí)我們打開騰訊官方的微信小程序,按照指引去連接這個(gè)WIFI,連上之后,微信小程序會(huì)通過(guò)UDP協(xié)議將WIFI的配置信息傳輸給設(shè)備WIFI,設(shè)備WIFI收到之后,再切換模式為STA模式,去連接目標(biāo)WIFI,連接成功之后,登錄云平臺(tái),綁定設(shè)備,完成配網(wǎng)。 這其中的交互協(xié)議,后面再細(xì)說(shuō)。

四、在騰訊云平臺(tái)上創(chuàng)建智能鎖

本章節(jié)只會(huì)展示幾個(gè)關(guān)鍵步驟,如果之前沒(méi)有使用過(guò)騰訊物聯(lián)網(wǎng)云平臺(tái)可以參考這里學(xué)習(xí)一遍:STM32+ESP8266+MQTT協(xié)議連接騰訊物聯(lián)網(wǎng)開發(fā)平臺(tái)_DS小龍哥的博客-CSDN博客

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

功能很簡(jiǎn)單,只有一個(gè)屬性,就是鎖的開關(guān)狀態(tài)。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

這里可以配置微信小程序的詳細(xì)參數(shù),配網(wǎng)的設(shè)置也這個(gè)頁(yè)面上:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

下面進(jìn)行配網(wǎng)設(shè)置:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

選擇配網(wǎng)模式:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

這個(gè)頁(yè)面比較重要,需要將設(shè)備進(jìn)入配網(wǎng)的方法告訴用戶,引導(dǎo)用戶去操作,完成進(jìn)入配網(wǎng)模式:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

保存之后,打開微信小程序“騰訊連連”,掃描右下角的這個(gè)二維碼,進(jìn)行配網(wǎng),完成設(shè)備添加。(一般正常產(chǎn)品,會(huì)將這個(gè)二維碼打印出來(lái),貼在設(shè)備上,方便用戶掃描)

(提示: 做這一步,要先設(shè)計(jì)好設(shè)備端的程序,設(shè)備上電能正常的運(yùn)行,才能做)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

下面是手機(jī)上的截圖: (根據(jù)頁(yè)面上的提示操作設(shè)備)

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

按下開發(fā)板子上的S2進(jìn)入配網(wǎng)模式:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

在串口上也可以看到提示信息。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

這時(shí)繼續(xù)操作微信小程序上的步驟,選擇設(shè)備的WIFI進(jìn)行連接: 之后在下一個(gè)頁(yè)面會(huì)自動(dòng)等待配網(wǎng)成功(沒(méi)有截圖),設(shè)備配網(wǎng)成功之后會(huì)出現(xiàn)提示,這時(shí)設(shè)備就已經(jīng)在線了

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

?

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

打開控制臺(tái)已經(jīng)看到設(shè)備上線了:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

這時(shí)進(jìn)入小程序頁(yè)面,就可以對(duì)智能鎖進(jìn)行操作了:

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

到此,配網(wǎng)已經(jīng)完成,接下來(lái)就介紹設(shè)備端的代碼。

五、STM32設(shè)備端代碼--這才是核心

關(guān)于配網(wǎng)的流程,在騰訊官網(wǎng)有詳細(xì)介紹,看這里:物聯(lián)網(wǎng)開發(fā)平臺(tái) softAP 配網(wǎng)開發(fā) - 設(shè)備端開發(fā)指南 - 文檔中心 - 騰訊云

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?

由于關(guān)聯(lián)代碼較多,這里只提供主要的邏輯代碼,其他的代碼可以自己下載完整源碼查看:基于STM32+ESP8266設(shè)計(jì)智能鎖(支持微信小程序一鍵配網(wǎng)連接騰訊云平臺(tái)).7z_STM32+ESP8266-嵌入式文檔類資源-CSDN下載

完整項(xiàng)目源碼下載地址:https://download.csdn.net/download/xiaolong1126626497/19137788

main.c 代碼:

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include 
#include "timer.h"
#include "bluetooth.h"
#include "esp8266.h"
#include "mqtt.h"

/*
智能鎖(自己的設(shè)備)

MQTT服務(wù)器地址: 106.55.124.154
MQTT服務(wù)器端口: 1883
MQTT客戶端ID: 3XM7FNOG4Llock
MQTT用戶名: 3XM7FNOG4Llock;12010126;F8Q4P;1624710719
MQTT登錄密碼: 5d87e9a5bf8ae6295493c263b91aaebc4311f3e95763efe7f31be76c8578f9ec;hmacsha256

訂閱主題: $thing/down/property/3XM7FNOG4L/lock
發(fā)布主題: $thing/up/property/3XM7FNOG4L/lock
發(fā)布消息: {"method":"report","clientToken":"123","params":{"lock":1}}
*/

#define SERVER_IP "106.55.124.154"http://服務(wù)器IP
#define SERVER_PORT 1883 //端口號(hào)

#define CONNECT_WIFI  "_CMCC-Cqvn"   //將要連接的路由器名稱 --不要出現(xiàn)中文、空格等特殊字符
#define CONNECT_PASS "_99pu58cb"     //將要連接的路由器密碼

//騰訊物聯(lián)網(wǎng)服務(wù)器的設(shè)備信息
#define MQTT_ClientID "3XM7FNOG4Llock"
#define MQTT_UserName "3XM7FNOG4Llock;12010126;F8Q4P;1624710719"
#define MQTT_PassWord "5d87e9a5bf8ae6295493c263b91aaebc4311f3e95763efe7f31be76c8578f9ec;hmacsha256"

//訂閱與發(fā)布的主題
#define SET_TOPIC  "$thing/down/property/3XM7FNOG4L/lock"  //訂閱
#define POST_TOPIC "$thing/up/property/3XM7FNOG4L/lock"  //發(fā)布

//微信小程序配網(wǎng)數(shù)據(jù)訂閱與發(fā)布
#define SET_WEIXIN_TOPIC  "$thing/down/service/3XM7FNOG4L/lock"http://訂閱
#define POST_WEIXIN_TOPIC "$thing/up/service/3XM7FNOG4L/lock"http://發(fā)布

char mqtt_message[200];//上報(bào)數(shù)據(jù)緩存區(qū)

int main()
{
   u32 time_cnt=0;
   u32 i;
   u8 key;
   u8 stat=0;
    
   //1.初始化需要使用的硬件
   LED_Init();
   BEEP_Init();
   KEY_Init();
    
   //2. 初始化串口1(打印調(diào)試信息)與串口3(與WIFI通信)
   USART1_Init(115200);
   TIMER1_Init(72,20000); //超時(shí)時(shí)間20ms
   USART3_Init(115200);//串口-WIFI
   TIMER3_Init(72,20000); //超時(shí)時(shí)間20ms
   USART1_Printf("正在初始化WIFI請(qǐng)稍等.\n");
  
   //3. 檢測(cè)WIFI硬件 
   while(1)
   {
        //如果硬件有問(wèn)題. 蜂鳴器以300ms的頻率報(bào)警
        if(ESP8266_Init())
        {
          delay_ms(300);
          BEEP=!BEEP;
          USART1_Printf("ESP8266硬件檢測(cè)錯(cuò)誤.\n");  
        }
        else
        {
            BEEP=0; //關(guān)閉蜂鳴器
            break;  //硬件沒(méi)有問(wèn)題. 退出檢測(cè)
        }
   }       
  
   //4. 上電如果檢測(cè)到S2按鍵按下就表示需要進(jìn)入配網(wǎng)狀態(tài)
    if(KEY_S2)
    {
        delay_ms(100);
        if(KEY_S2)
        {
            while(1)//連接服務(wù)器
            {
                printf("進(jìn)入配網(wǎng)模式.....\n");
                BEEP=1;
                delay_ms(100);
                BEEP=0;
                
                //清除之前的WIFI連接信息(連接個(gè)無(wú)效的WIFI),防止默認(rèn)連接上 上次的WIFI,導(dǎo)致配網(wǎng)錯(cuò)誤
                ESP8266_SendCmd("AT+CWJAP="666","12345678"\r\n");
                delay_ms(200);
                
                stat=Esp8266_STA_TCPclinet_Init((u8 *)SERVER_IP,SERVER_PORT);
                if(stat==0 || stat==0x80)break;
                delay_ms(500);
                printf("stat=%d\r\n",stat);
            }
        }
        else
        {
            stat=0xFF;
        }
    }
    else
    {
        stat=0xFF;
    }
    
    //連接默認(rèn)WIFI
    if(stat==0xFF)
    {
        printf("連接默認(rèn)的WIFI.\n");
         //非加密端口
        USART1_Printf("WIFI:%d\n",ESP8266_STA_TCP_Client_Mode(CONNECT_WIFI,CONNECT_PASS,SERVER_IP,SERVER_PORT,1));
    }
    
    //2. MQTT協(xié)議初始化	
    MQTT_Init(); 
    //3. 連接OneNet服務(wù)器        
    while(MQTT_Connect(MQTT_ClientID,MQTT_UserName,MQTT_PassWord))
    {
        USART1_Printf("服務(wù)器連接失敗,正在重試...\n");
        delay_ms(500);
    }
    USART1_Printf("服務(wù)器連接成功.\n");
    
    //3. 訂閱主題
    if(MQTT_SubscribeTopic(SET_TOPIC,0,1))
    {
        USART1_Printf("主題訂閱失敗.\n");
    }
    else
    {
        USART1_Printf("主題訂閱成功.\n");
    }        
   
    
    if(stat==0x80)//進(jìn)入配網(wǎng)模式需要給微信小程序返回token值
    {
          //訂閱微信topic
         if(MQTT_SubscribeTopic(SET_WEIXIN_TOPIC,0,1))printf("訂閱失敗\r\n"); 
        //返回平臺(tái)數(shù)據(jù),告知微信連連連接服務(wù)器成功
        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"} 配網(wǎng)成功后微信小程序返回?cái)?shù)據(jù)
    }
    
    while(1)
    {    
        key=KEY_Scan(0);
        if(key==2)
        {
            time_cnt=0;
            sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"lock":1}}");
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("開鎖.\r\n");
        }
        else if(key==3)
        {
            time_cnt=0;
            sprintf(mqtt_message,"{"method":"report","clientToken":"123","params":{"lock":0}}");
            MQTT_PublishData(POST_TOPIC,mqtt_message,0);
            USART1_Printf("關(guān)鎖\r\n");
        }  

        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            for(i=0;i
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

ESP8266的核心代碼:

//存放ESP8266的詳細(xì)信息
struct ESP8266 esp8266_info;

/*SoftAP配網(wǎng)*/
u8 ESP8266_SoftAP_MOde(void)
{
    u8 token[]="{"cmdType":2,"productId":"3XM7FNOG4L","deviceName":"lock","protoVersion":"2.0"}\r\n";//連接狀態(tài)信息
    char *p=NULL;
    char data[256];
    char buff[100];
    u8 i=0;
    u32 time1=0,time2=0;
    USART3_RX_CNT=0;
    USART3_RX_FLAG=0;
    while(1)
    {
        if(USART3_RX_FLAG)
        {
            USART3_RX_BUFFER[USART3_RX_CNT]='\0';
            printf("rx=%s",USART3_RX_BUFFER);
            //+IPD,97,192.168.4.2,52021:{"cmdType":1,"ssid":"wbyq_wifi","password":"12345678","token":"df4a4c90abee98c9a443ae8ffd8cc16b"
            p=strstr((char *)USART3_RX_BUFFER,"+IPD");
            if(p)
            {
                strcpy(data,p);//將接收到的數(shù)據(jù)拷貝一份保存
                p+=strlen("+IPD");
                p+=1;
                while(*p!=',' && *p!='\0')p++;
                p++;//跳過(guò)字符',',獲取到IP地址起始位置
                i=0;
                //IP地址解析
                while(*p!=',' && *p!='\0')
                {
                   buff[i++]=*p++;
                }
                buff[i]='\0';
                strcpy((char *)esp8266_info.esp8266_ip,buff);
                //端口號(hào)解析
                p++;
                i=0;
                while(*p!=':' && *p!='\0')
                {
                   buff[i++]=*p++; 
                }
                buff[i]='\0';
                esp8266_info.esp8266_prot=atoi(buff);//字符串轉(zhuǎn)整數(shù)
                //printf("ip=%s:%d\r\n",esp8266_info.esp8266_ip,esp8266_info.esp8266_prot);
                printf("ret:%d\r\n",Esp8266_UDP_SendData((u8*)esp8266_info.esp8266_ip,esp8266_info.esp8266_prot,token));//上報(bào)連接狀態(tài)
            }
           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數(shù)據(jù),需要返回給平臺(tái)
           printf("wifi_name:%s\r\n",esp8266_info.esp8266_name);
           printf("wifi_key:%s\r\n",esp8266_info.esp8266_key); 
           printf("wifi_token:%s\r\n",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;//超時(shí)退出
        }
    }
    return 1;
}


/*******************************************************************************************************************
**形參: wifi_name --WIFI名
**      password  --密碼
**      remote_ip  --遠(yuǎn)端IP地址(255.255.255.255為廣播地址)
**      remote_prot  --遠(yuǎn)端端口號(hào)
**      localhost    ---本地端口號(hào)
**返回值:0 --成功,
**       其它值 --失敗
**示例:ESP8266_UDP_STA_Mode("360WIFI_123","12345678","172.20.7.2",10500,8080);
*********************************************************************************************************************/
u8 ESP8266_UDP_STA_Mode(u8 *wifi_name,u8 *password,u8 *remote_ip,u16 remote_prot,u16 localprot)
{
    char buff[100];
    USARTx_StringSend(USART3,"+++"); //退出透?jìng)髂J?    delay_ms(1000);
    
    printf("重啟模塊.......\r\n");
    USARTx_StringSend(USART3,"AT+RST\r\n");
    delay_ms(1000);
    delay_ms(1000); 
    printf("關(guān)回顯.......\r\n");
    if(ESP8266_SendCmd("ATE0\r\n"))return 2; 
    printf("設(shè)置為STA模式.......\r\n");
    if(ESP8266_SendCmd("AT+CWMODE=1\r\n"))return 3;   
    printf("連接WIFI.......\r\n");
    snprintf(buff,sizeof(buff),"AT+CWJAP="%s","%s"\r\n",wifi_name,password);
    if(ESP8266_SendCmd(buff))return 5;   
    printf("查詢IP.......\r\n");
    if(ESP8266_SendCmd("AT+CIFSR\r\n"))return 6; 
    printf("建立UDP連接.....\r\n");
    snprintf(buff,sizeof(buff),"AT+CIPSTART="UDP","%s",%d,%d,0\r\n",remote_ip,remote_prot,localprot);
    if(ESP8266_SendCmd(buff))return 7; 
    printf("設(shè)置透?jìng)?......\r\n");
    if(ESP8266_SendCmd("AT+CIPMODE=1\r\n"))return 8; 
    printf("發(fā)送數(shù)據(jù).......\r\n");
    USARTx_StringSend(USART3,"AT+CIPSEND\r\n");
    return 0;
}


/****************STA+TCPclinet初始化*************
**
**
const char *STA_TCPCLINET[]=
{
	"AT\r\n",//測(cè)試指令
	"ATE0\r\n",//關(guān)回顯
	"AT+CWMODE=1\r\n",//設(shè)置STA模式
	"AT+RST\r\n",//模塊復(fù)位
	"ATE0\r\n",//關(guān)回顯
	"AT+CWJAP="HUAWEIshui","asdfghjkl12"\r\n",//連接wifi
	"AT+CIPMUX=0\r\n",//設(shè)置單連接
	"AT+CIFSR\r\n",//查詢IP
	"AT+CIPSTART="TCP","192.168.43.204",8080\r\n",//連接服務(wù)器
	"AT+CIPMODE=1\r\n",//設(shè)置透?jìng)髂J?	"AT+CIPSEND\r\n",//開始發(fā)送數(shù)據(jù)
};
返回值: 0x7f --退出透?jìng)髂J绞?**      0x80 --進(jìn)入配網(wǎng)模式正常退出
**      0    --未進(jìn)入配網(wǎng)模式正常退出
**      其他值  --異常退出
*****************************************************/
u8 Esp8266_STA_TCPclinet_Init(u8 *server_ip,u16 server_port)
{
	char buff[100];
	/*退出透?jìng)髂J?/
	u8 i=0;
    u8 stat=0;
    u32 id;
	for(i=0;i<5;i++)
	{
		USARTx_StringSend(USART3,"+++");//退出透?jìng)髂J?		delay_ms(100);
		if(Esp8266_SendCmdCheckStat("AT\r\n","OK\r\n")==0)
		{
			i=0;
			break;
		}
	}
	if(i!=0)
	{
		printf("退出透?jìng)髂J绞r\n");
		return 0x7f;
	}
	printf("1.模塊復(fù)位\r\n");
	if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 1;	
	delay_ms(1000);
	delay_ms(1000);
	printf("2.關(guān)回顯\r\n");
	if(Esp8266_SendCmdCheckStat("ATE0\r\n","OK\r\n"))return 2;  
    if(ESP8266_GetWifi_Stat())//查詢WIFI連接狀態(tài),未連接成功則進(jìn)入配網(wǎng)模式
    {
        BEEP=1;
        delay_ms(100);
        BEEP=0;
        delay_ms(100);
        BEEP=1;
        delay_ms(100);
        BEEP=0;
        stat=1;//進(jìn)入配網(wǎng)模式標(biāo)志位 
        //查詢IP地址  
        printf("3.設(shè)置模式AP\r\n");
        if(Esp8266_SendCmdCheckStat("AT+CWMODE=2\r\n","OK\r\n"))return 3;	
        printf("4.設(shè)置IP地址\r\n");
        if(Esp8266_SendCmdCheckStat("AT+CIPAP=\"192.168.4.1\",\"192.168.4.1\",\"255.255.255.0\"\r\n","OK"))return 4;
        printf("4.設(shè)置熱點(diǎn)信息\r\n");
        id=*(vu32*)(0x1FFFF7E8);//使用STM32的ID作為WIFI名
        snprintf((char *)esp8266_info.esp8266_name,sizeof(esp8266_info.esp8266_name),"wbyq_%d",id);
        snprintf(buff,sizeof(buff),"AT+CWSAP=\"%s\",\"12345678\",1,4\r\n",esp8266_info.esp8266_name);
        printf("wif_name:%s\r\n",esp8266_info.esp8266_name);
        
        if(Esp8266_SendCmdCheckStat(buff,"OK\r\n"))return 5; 
        printf("5.顯示端口.......\r\n");
        if(Esp8266_SendCmdCheckStat("AT+CIPDINFO=1\r\n","OK"))return 6;     
        printf("6.設(shè)置要連接的UDP\r\n"); 
        if(Esp8266_SendCmdCheckStat("AT+CIPSTART=\"UDP\",\"192.168.4.255\",8266,8266,0\r\n","OK\r\n"))return 7; 
        printf("7.獲取微信小程序傳遞過(guò)來(lái)的熱點(diǎn)信息\r\n");
        if(ESP8266_SoftAP_MOde())return 8;
        printf("8.設(shè)置模式STA\r\n");
        if(Esp8266_SendCmdCheckStat("AT+CWMODE=1\r\n","OK\r\n"))return 9;	
        printf("9.模塊復(fù)位\r\n");
        if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 10;	
        delay_ms(1000);
        delay_ms(1000);
        printf("10.連接WIFI\r\n");
        snprintf((char *)buff,sizeof(buff),"AT+CWJAP=\"%s\",\"%s\"\r\n",esp8266_info.esp8266_name,esp8266_info.esp8266_key);//字符串拼接
        if(Esp8266_SendCmdCheckStat(buff,"WIFI GOT IP"))return 11;        
    }
	printf("11.設(shè)置單連接\r\n");
	if(Esp8266_SendCmdCheckStat("AT+CIPMUX=0\r\n","OK"))return 12;		
	snprintf(buff,sizeof(buff),"AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",server_ip,server_port);
//	printf("buff:%s\r\n",buff);
	printf("12.連接服務(wù)器\r\n");
	if(Esp8266_SendCmdCheckStat(buff,"OK"))return 13;	
	printf("13.配置透?jìng)髂J絓r\n");
	if(Esp8266_SendCmdCheckStat("AT+CIPMODE=1\r\n","OK\r\n"))return 14;	
	printf("14.開始發(fā)送數(shù)據(jù)\r\n");
	if(Esp8266_SendCmdCheckStat("AT+CIPSEND\r\n",">"))return 15;	
	if(stat)return 0x80;//進(jìn)入配網(wǎng)模式并且正常退出
    else return 0;//未進(jìn)入配網(wǎng)模式,正常退出
}

/**************************獲取WIFI連接狀態(tài)信息***************************/
u8 ESP8266_GetWifi_Stat(void)
{
    u16 i=0;
    u16 time=0;
    u16 time2=0;
    USART3_RX_CNT=0;
    USART3_RX_FLAG=0;
    USARTx_StringSend(USART3,"AT+CWJAP?\r\n");//查詢WIFI連接狀態(tài)
    while(1)
    {
       if(USART3_RX_FLAG)
       {
           USART3_RX_BUFFER[USART3_RX_CNT]='\0';
           printf("rx=%s\r\n",USART3_RX_BUFFER);
           if(strstr((char *)USART3_RX_BUFFER,"+CWJAP") || strstr((char *)USART3_RX_BUFFER,"WIFI GOT IP"))
           {
                USART3_RX_CNT=0;
                USART3_RX_FLAG=0;
                LED1=1;
                return 0;
           }
           else
           {
              USART3_RX_CNT=0;
              USART3_RX_FLAG=0;
              memset(USART3_RX_BUFFER,0,sizeof(USART3_RX_BUFFER));
           }
       }
       delay_ms(10);
       i++;
       time++;
       time2++;
       if(time>=1000)
       {
            time=0;
            USARTx_StringSend(USART3,"AT+CWJAP?\r\n");
       }
       if(time2>=300)
       {
            LED1=!LED1;
           time2=0;
       }
       if(i>=100*60)
       {
           LED1=1;
           break;
       }
    }
    return 1;
}
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

?


?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

    350992
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355743
  • IOT
    IOT
    +關(guān)注

    關(guān)注

    187

    文章

    4202

    瀏覽量

    196693
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    962

    瀏覽量

    44964
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    650

    瀏覽量

    22487
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何讓esp8266 wifi模組和APP通信?

    esp8266 wifi模組用手機(jī)一鍵網(wǎng)成功(station模式)后,wifi模組和手機(jī)所wifi在
    發(fā)表于 06-27 00:32

    為什么ESP8266連接固定的路由會(huì)在程序中寫死呢

    為什么ESP8266連接固定的路由會(huì)在程序中寫死呢?ESP8266是怎樣自動(dòng)連接次配置的路由
    發(fā)表于 12-02 06:06

    STM32+ESP8266怎么會(huì)上傳數(shù)據(jù)呢

    STM32+ESP8266上傳數(shù)據(jù)是怎么回事呢?STM32+ESP8266怎么會(huì)上傳數(shù)據(jù)呢?
    發(fā)表于 01-18 06:58

    使用STM32驅(qū)動(dòng)ESP8266連接路由器

    層,物理層:例如我要使用STM32驅(qū)動(dòng)ESP8266連接路由器然后路由器外網(wǎng),那么ESP8266
    發(fā)表于 01-18 08:05

    請(qǐng)問(wèn)STM32+ESP8266如何獲取網(wǎng)絡(luò)時(shí)間?

    請(qǐng)問(wèn)STM32+ESP8266如何獲取網(wǎng)絡(luò)時(shí)間?
    發(fā)表于 01-19 06:15

    ESP8266一鍵燒寫軟件下載

    ESP8266一鍵燒寫軟件下載
    發(fā)表于 11-22 17:00 ?31次下載

    使用esp8266實(shí)現(xiàn)STM32聯(lián)網(wǎng)(最簡(jiǎn)單USART方法)

    到電腦上的java程序esp8266STM32連接,電腦通過(guò)STM32配置
    發(fā)表于 11-22 11:51 ?1.3w次閱讀

    ESP8266 修復(fù)刷完nodemcu固件后無(wú)法連接wifi網(wǎng)絡(luò)的故障

    最近到手的wifi開發(fā)板,編寫了個(gè)stm32連接DHT11采集當(dāng)前溫濕度數(shù)據(jù)(為什么不直接使用esp8266的DHT模塊直接采集溫濕度,因?yàn)槲野l(fā)現(xiàn)nodemcu的DHT采集溫濕度實(shí)在
    發(fā)表于 10-26 17:51 ?12次下載
    <b class='flag-5'>ESP8266</b> 修復(fù)刷完nodemcu固件后無(wú)法<b class='flag-5'>連接</b>wifi網(wǎng)絡(luò)的故障

    ESP8266連接手機(jī)

    與模塊連接,實(shí)現(xiàn)局域網(wǎng)無(wú)線控制。3為STA+AP 模式:兩種模式的共存模式,即可以通過(guò)互聯(lián)網(wǎng)控制可實(shí)現(xiàn)無(wú)縫切換,方便操作。ESP8266有幾種不同的使用方式,適用于不同水平的開發(fā)工作者。我主要使用...
    發(fā)表于 11-30 16:06 ?37次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>連接</b>手機(jī)

    ch340非一鍵下載電路燒錄esp8266程序

    一鍵下載呢,事實(shí)上卻沒(méi)有那么簡(jiǎn)單。筆者受大佬設(shè)計(jì)的啟發(fā),摸索出種無(wú)需外圍電路就可實(shí)現(xiàn)ch340燒錄esp8266的方法。esp8266,8個(gè)引腳,
    發(fā)表于 01-12 19:29 ?7次下載
    ch340非<b class='flag-5'>一鍵</b>下載電路燒錄<b class='flag-5'>esp8266</b><b class='flag-5'>程序</b>

    STM32 + ESP8266 + MQTT協(xié)議連接OneNet

    STM32+ESP8266使用標(biāo)準(zhǔn)MQTT協(xié)議登錄Onenet服務(wù)器,實(shí)現(xiàn)數(shù)據(jù)交互。
    的頭像 發(fā)表于 02-28 13:22 ?1.9w次閱讀
    <b class='flag-5'>STM32</b> + <b class='flag-5'>ESP8266</b> + MQTT協(xié)議<b class='flag-5'>連接</b>OneNet

    STM32 + ESP8266 + MQTT協(xié)議連接騰訊IOT平臺(tái)

    本文章接下會(huì)介紹如何在騰訊物聯(lián)網(wǎng)平臺(tái)上創(chuàng)建設(shè)備、配置設(shè)備、推送到程序、并編寫STM32設(shè)備端代碼,使用
    的頭像 發(fā)表于 02-28 13:28 ?5227次閱讀
    <b class='flag-5'>STM32</b> + <b class='flag-5'>ESP8266</b> + MQTT協(xié)議<b class='flag-5'>連接</b><b class='flag-5'>騰訊</b><b class='flag-5'>IOT</b>平臺(tái)

    智慧農(nóng)業(yè):STM32+ESP8266+騰訊物聯(lián)網(wǎng)+小程序

    本項(xiàng)目采用STM32F103ZET6 + ESP8266 設(shè)計(jì)個(gè)智慧農(nóng)業(yè)管理系統(tǒng), 能夠獲取空氣中的溫濕度數(shù)據(jù),光照度數(shù)據(jù)等,根據(jù)種植區(qū)的空氣溫濕度數(shù)據(jù),判斷是否進(jìn)行灌溉;可以通過(guò)ESP82
    的頭像 發(fā)表于 02-28 13:56 ?8008次閱讀
    智慧農(nóng)業(yè):<b class='flag-5'>STM32+ESP8266</b>+<b class='flag-5'>騰訊</b>物聯(lián)網(wǎng)+小<b class='flag-5'>程序</b>

    Esp8266連接器擴(kuò)展器開源項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《Esp8266連接器擴(kuò)展器開源項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 07-05 11:15 ?4次下載
    <b class='flag-5'>Esp8266</b><b class='flag-5'>連接</b>器擴(kuò)展器開源項(xiàng)目

    STM32+ESP8266連接電腦Qt網(wǎng)絡(luò)上位機(jī)——QT篇

    本文簡(jiǎn)單介紹下手寫網(wǎng)絡(luò)調(diào)試器并連接ESP8266模塊 上篇 : STM32+ESP8266連接電腦Qt網(wǎng)絡(luò)上位機(jī)——準(zhǔn)備工作 目錄
    發(fā)表于 05-09 14:22 ?21次下載
    <b class='flag-5'>STM32+ESP8266</b><b class='flag-5'>連接</b>電腦Qt網(wǎng)絡(luò)上位機(jī)——QT篇
    主站蜘蛛池模板: 999精品国产人妻无码系列| 中文字幕本庄优花喂奶| bbw美女与zooxx| 老师紧窄粉嫩| 99这里只有是精品2| 日本妈妈xxxx| 国产精品久久久久久人妻香蕉 | 青青国产在线观看视频| 国产成人免费高清在线观看| 日本调教网站| 国产亚洲日韩在线播放不卡| 在线中文字幕| 色多多污污在线观看网站| 精品国产乱码久久久久久乱码 | 99免费精品| 午夜福利92看看电影80| 久久久久伊人| 国产免费午夜| videos gratis欧美另类| 性xxx在线观看| 暖暖视频在线高清播放| 国产色精品久久人妻无码看片| 这里只有精品网| 午夜福利32集云播| 欧美另类一区| 旧里番6080在线观看| 国产精品资源网站在线观看| 99久久免费国产精精品| 亚洲精品无码久久久久A片 | 国际老妇高清在线观看| 97精品国产亚洲AV超碰| 亚洲免费精品视频| 婷婷色色狠狠爱| 色婷婷AV国产精品欧美毛片| 麻豆人妻换人妻X99| 精品一区二区三区免费观看| 国产精品乱码色情一区二区视频| qvod在线| oldgrand欧洲老妇人| 99久久国内精品成人免费| 中文中幕无码亚洲在线|