日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式云IOT技術圈
[導讀]???? 點擊上方嵌入式開發(fā)圈 記得關注我們哦! ????這是我之前學習ESP8266想的思路,后續(xù)用STM32來實現其中一個或兩個功能。 一、ESP8266配網(使用手機APP來給模組配置) 假設已經開發(fā)了一個手機APP,這個APP完成的功能如下: 1、連接設備接的模塊ESP8266生成的

    

點擊上方嵌入式開發(fā)圈 記得關注我們哦!

    這是我之前學習ESP8266想的思路,后續(xù)用STM32來實現其中一個或兩個功能。

一、ESP8266配網(使用手機APP來給模組配置)


假設已經開發(fā)了一個手機APP,這個APP完成的功能如下:

1、連接設備接的模塊ESP8266生成的熱點

2、給設備熱點發(fā)送要連接的路由器的名字和密碼

配網流程

1、設備讓ESP8266進入AP模式設備MCU通過串口給ESP8266發(fā)送AT+CWMODE=2,讓ESP8266進入AP模式。如果進入AP模式成功,用手機可以搜索到ESP8266模塊的熱點信息。


2、用手機APP去連接這個熱點發(fā)送路由器ssid和password,假設格式為: ssid:“xxx”,password:“xxxx”


3、解析APP發(fā)過來的字符串格式ESP8266串口收到格式:

ssid:“xxx”,password:"xxxx"這個字符串設備MCU處理收到的這個字符串,將ssid和password提取出來。分別保存到緩存區(qū)SSID、PASSWORD。


4、設備讓ESP8266進入STA模式設備MCU通過串口給ESP8266發(fā)送AT+CWMODE=1,讓ESP8266進入STA模式。


5、設備連接路由器拿保存在緩存區(qū)的SSID和PASSWORD,設備通過串口給ESP8266發(fā)送連接指令AT+CWJAP=“SSID”,“PASSWORD”


6、連接公網服務器

===>120.78.136.134:8888AT+CIPSTART=“TCP”,“120.78.136.134”,9002

    配網成功!如果以后不在初始化設置模式下,不會執(zhí)行該流程,默認開機直接連接對應的熱點和服務器。

 


二、ESP8266配網(使用上位機串口來給模組配置)


假設已經開發(fā)了一個上位機,這個上位機完成的功能如下:

1、上位機通過串口連接設備

2、具有設置wifi帳號和密碼的功能(其實就是發(fā)送一條串口指令,帶有wifi帳號和密碼)

3、具有設置服務器ip和端口號的功能(其實就是發(fā)送一條串口指令,帶有服務器ip和端口號)

配網流程

1、直接讓設備進入STA模式    上位機通過串口給接有ESP8266的設備發(fā)送AT+CWMODE=1,讓ESP8266進入STA模式。

2、設備接收到上位機發(fā)送過來的進入STA模式的指令,透傳給ESP8266,    這時ESP8266如果設置成功,則處于STA模式。

3、特定模式下(初始化設置),線程等待上位機下發(fā)的指令指令格式:(1)設置wifi連接路由器SSID:“xxxx”,“PASSWORD”:“xxxxx”(2)設置wifi連接服務器SERVER_IP:“xxx.xxx.xxx.xxx”,PORT:“xxxx”

4、設備接收到上位機下發(fā)的指令,進行解析后分別保存在緩存區(qū)中。

5、設備連接路由器    拿保存在緩存區(qū)的SSID和PASSWORD,設備通過串口給ESP8266發(fā)送連接指令AT+CWJAP=“SSID”,“PASSWORD”

6、連接公網服務器

===>xxx.xx.xxx.xxx:xxxx例如:AT+CIPSTART=“TCP”,“120.78.136.134”,9002

    配網成功!如果以后不在初始化設置模式下,不會執(zhí)行該流程,默認開機直接連接對應的熱點和服務器。


三、ESP8266配網(使用上位機網絡TCP來給模組配置)


假設以及開發(fā)了一個上位機,這個上位機完成的功能如下:

1、上位機可以用TCP/IP連接wifi熱點(ESP8266)===>需要知道esp8266的ip和端口號,通過window網絡狀態(tài)可以查到。

2、具有設置wifi帳號和密碼的功能(其實就是發(fā)送一條串口指令,帶有wifi帳號和密碼)

3、具有設置服務器ip和端口號的功能(其實就是發(fā)送一條串口指令,帶有服務器ip和端口號)

配網流程

設備端

1、直接讓設備進入AP模式上位機通過串口給接有ESP8266的設備發(fā)送AT+CWMODE=2,讓ESP8266進入AP模式。

指令:

AT+CWMODE=2

2、重啟設備,確保AP模式設置成功指令:

AT+RST

3、開啟多路連接指令:

AT+CIPMUX=1

4、為設備端創(chuàng)建熱點指令:

AT+CWSAP=“WIFI名稱”,“WIFI密碼”,1,4

5、設備端啟動服務器指令:

AT+CIPSERVER=1,8080

PC端

1、事先需要讓PC去連接wifi熱點===>WIFI名稱、WIFI密碼

2、通過網絡連接詳情查看當前熱點的IPv4服務器地址

3、PC端開發(fā)的上位機連接IPv4服務器地址,端口號就是設備端指定的端口號:8080

4、PC端開發(fā)的上位機下發(fā)指令給設備端指令格式:

(1)設置wifi連接路由器SSID:“xxxx”,“PASSWORD”:“xxxxx”

(2)設置wifi連接服務器

SERVER_IP:“xxx.xxx.xxx.xxx”,PORT:“xxxx”

設備端

1、解析字符串,如果含有

SSID:“xxxx”,“PASSWORD”:“xxxxx”,取得ssid和password,保存到設備端的FLASH中,如果為其它,則設定接收出錯的條件。

2、解析字符串,如果含有如下字符串:

SERVER_IP:“xxx.xxx.xxx.xxx”,PORT:“xxxx”

這時候程序解析取得server_ip和port,保存到設備端的FLASH中,如果為其它,則設定接收出錯的條件。

3、如果已經解析完兩個字符串,自動重啟,切換到STA模式,取出ssid和password,連接ap,連接成功后,接下來取出flash中的server_ip和port,連接服務器,如果成功,則可進入數據上傳,如果不成功,則返回ap連接,依次進行,直到成功后,此時程序中連接成功的標志會置一。

4、定時查詢與服務器端確認是否連接成功,如果不成功,需要重新連接服務器。

5、可上傳數據

    ESP8266端,其實我已經寫好了一個程序,只是還不是那么的完善,但現在已經可以用了,分享出來,大家可以去完善它。

    大致程序框架設計如下,分別是配置WIFI的過程以及正常連接WIFI的過程:

//配置wifi網絡int Cofig_Wifi_NetWork(void){ int ret = -1 ; char *buf = NULL;
while(1) { switch(ESP8266_INFO.config_network_status) { case CHECK_WIFI_EXIST: ret = Wifi_Test_Exist();
if(0 != ret) { printf("wifi初始化失敗,請檢查硬件是否連接!\r\n"); ESP8266_INFO.config_network_status = CHECK_WIFI_EXIST ; LED1(ON); return -1 ; } else { ESP8266_INFO.config_network_status = WIFI_SET_MODE ; LED1(OFF); } break ;
case WIFI_SET_MODE: ret = Wifi_Set_Mode(3);
if(0 != ret) { printf("wifi設置模式失敗\r\n"); ESP8266_INFO.config_network_status = CHECK_WIFI_EXIST ; LED1(ON); } else { ESP8266_INFO.config_network_status = WIFI_BUILD_AP ; LED1(OFF); } break ;
case WIFI_BUILD_AP: printf("準備ap....\n"); ret = ESP8266_BuildAP("ESP8266", "123456", WPA2_PSK);
if(1 != ret) { printf("wifi創(chuàng)建AP失敗...\r\n"); ESP8266_INFO.config_network_status = CHECK_WIFI_EXIST ; LED1(ON); } else { ESP8266_INFO.config_network_status = WIFI_CONFIG_MULTI ; LED1(OFF); printf("創(chuàng)建ap成功\n"); } break ;
case WIFI_CONFIG_MULTI: printf("配置多連接模式!\r\n"); ret = ESP8266_Enable_MultipleId(ENABLE);
if(1 != ret) { printf("配置多連接失敗\n"); ESP8266_INFO.config_network_status = WIFI_BUILD_AP ; LED1(ON); } else { ESP8266_INFO.config_network_status = WIFI_START_SERVER ; LED1(OFF); } break ;
case WIFI_START_SERVER: ret = ESP8266_StartOrShutServer(ENABLE, "8080", "10") ;
if(1 != ret) { printf("創(chuàng)建端口號:%d失敗\r\n", 8080); ESP8266_INFO.config_network_status = WIFI_CONFIG_MULTI ; LED1(ON); } else { printf("創(chuàng)建端口號:%d成功\r\n", 8080); ESP8266_INFO.config_network_status = WIFI_GET_AP_IP ; LED1(OFF); } break ;
case WIFI_GET_AP_IP: buf = malloc(20); if(buf == NULL) return -1;
if(1 != ESP8266_Inquire_ApIp(buf, 20)) { if(1 == ESP8266_StartOrShutServer(DISABLE, "8080", "5000")) { printf("關閉服務器成功!\r\n"); ESP8266_INFO.config_network_status = WIFI_START_SERVER ; //回到開啟服務器的流程 LED1(OFF); } free(buf); } printf("獲取ap ip:%s成功\r\n", buf); free(buf); ESP8266_INFO.config_network_status = WAIT_CLIENT_CONNECT; break ;
case WAIT_CLIENT_CONNECT: while(1) { //接收上位機連接 ret = ESP8266_Get_IdLinkStatus(); if(0 != ret) { printf("設備已和上位機建立連接....\r\n"); ESP8266_INFO.config_network_status = BACK_TO_CONFIG_PROCESS ; LED1(ON); break ; } LED2(ON); Delay_ms (10); LED2(OFF); Delay_ms(10); } break ;
default: break ; }
if(ESP8266_INFO.config_network_status == BACK_TO_CONFIG_PROCESS) { LED1(OFF); LED2(OFF); LED3(OFF); break ; } }
return 0 ;}
//wifi正常連接流程void Wifi_NetWork_Process(void){ int ret = -1 ;
while(1) { switch(ESP8266_INFO.wifi_status) { case WIFI_EXIST_CHECK: ret = Wifi_Test_Exist();
if(0 != ret) { printf("wifi硬件故障!\n"); return ; }
ESP8266_INFO.wifi_status = WIFI_SET_MODE ; break ;
case WIFI_SET_MODE: ret = Wifi_Set_Mode(STA);
if(0 != ret) { printf("wifi設置模式失敗\r\n"); ESP8266_INFO.wifi_status = WIFI_EXIST_CHECK ; } else ESP8266_INFO.wifi_status = WIFI_CONNECT_ROUTER;
break ;
case WIFI_CONNECT_ROUTER: ret = Wifi_Connect_Router((const char *)ESP8266_INFO.wifi_ssid, (const char *)ESP8266_INFO.wifi_password);
if(ret != 0) { printf("連接wifi熱點失敗\n"); ESP8266_INFO.wifi_status = WIFI_SET_MODE ; return ; } else { printf("連接wifi熱點:%s成功\n", ESP8266_INFO.wifi_ssid); ESP8266_INFO.wifi_status = WIFI_CLOSE_MULTI ; }
case WIFI_CLOSE_MULTI:
//關閉多連接 if(1 != ESP8266_Enable_MultipleId(DISABLE)) { printf("關閉多連接失敗!\n"); ESP8266_INFO.wifi_status = WIFI_CONNECT_ROUTER ; } else { printf("關閉多連接成功!\n"); ESP8266_INFO.wifi_status = WIFI_CONNECT_SERVER ; }
break ;
case WIFI_CONNECT_SERVER: ret = Wifi_Connect_Server("TCP", (const char *)ESP8266_INFO.server_ip, atoi((char *)ESP8266_INFO.server_port));
if(ret != 0) { printf("連接服務器失敗\n"); ESP8266_INFO.wifi_status = WIFI_CONNECT_ROUTER ; } else { printf("連接服務器:%s成功\n", ESP8266_INFO.server_ip); ESP8266_INFO.wifi_status = WIFI_CONFIG_OK ; }
break ;
default: break ; }
//wifi連接成功 if(WIFI_CONFIG_OK == ESP8266_INFO.wifi_status) { LED3(ON); break ; } }
return ;}

//返回當前子串在原字符串中的索引int Sub_String_Index(char *str, char *sub_str){ char *p1 = NULL ; char *__str = str ; char *__sub_str = sub_str ; p1 = strstr(__str, __sub_str); return p1 - __str ;}

/////////////////////////////////////ESP8266解析參數int Esp8266_Process_Para(void){ char *str = NULL ; char *p1 = NULL ; char *p2 = NULL ; int index1 = 0, index2 = 0 ;
//開始wifi配置 while(1) { //如果該標志為0,則代表上位機已經連上設備了 if(BACK_TO_CONFIG_PROCESS == ESP8266_INFO.config_network_status) { if(0 == ESP8266_Get_IdLinkStatus()) { printf("客戶端已掉線,需重新連接....\n"); LED2(ON); Delay_ms(300); LED2(OFF); Delay_ms(300); } //此時客戶端沒有掉線 else { printf("客戶端已連接,可下發(fā)數據....\n"); //準備配置wifi_ssid str = ESP8266_ReceiveString(DISABLE); p1 = str + 12 ;
if(NULL != strstr(p1, "SSID")) { //拷貝wifi ssid index1 = Sub_String_Index(p1, "="); index2 = Sub_String_Index(p1, ";"); memcpy(ESP8266_INFO.wifi_ssid, p1 + index1 + 1, index2 - index1 - 1); //拷貝wifi密碼 p2 = p1 + index2 + 1 ; index1 = Sub_String_Index(p2, "=") ; index2 = Sub_String_Index(p2, ";") ; memcpy(ESP8266_INFO.wifi_password, p2 + index1 + 1, index2 - index1 - 1); printf("wifi_ssid:%s wifi_password:%s\r\n", ESP8266_INFO.wifi_ssid, ESP8266_INFO.wifi_password); macESP8266_Usart ("setting ssid_password success"); ESP8266_INFO.wifi_config_ap_flag = 1 ; } else if(NULL != strstr(p1, "SERVER_IP")) { //拷貝服務器相關參數===>server_ip index1 = Sub_String_Index(p1, "="); index2 = Sub_String_Index(p1, ";"); memcpy(ESP8266_INFO.server_ip, p1 + index1 + 1, index2 - index1 - 1); //拷貝服務器相關參數===>server_port p2 = p1 + index2 + 1 ; index1 = Sub_String_Index(p2, "=") ; index2 = Sub_String_Index(p2, ";") ; memcpy(ESP8266_INFO.server_port, p2 + index1 + 1, index2 - index1 - 1); printf("server_ip:%s server_port:%s\r\n", ESP8266_INFO.server_ip, ESP8266_INFO.server_port); macESP8266_Usart ("setting server_ip port success"); ESP8266_INFO.wifi_cofnig_server_flag = 1 ; }
//如果都配置了,則進入正常啟動流程 if((1 == ESP8266_INFO.wifi_config_ap_flag) && (1 == ESP8266_INFO.wifi_cofnig_server_flag)) { ESP8266_INFO.config_network_status = 1 ; return ESP8266_INFO.config_network_status ; } } } else if(1 == ESP8266_INFO.config_network_status) { return ESP8266_INFO.config_network_status ; } }}

手機APP設計得比較簡陋

以下使用QT設計的一個簡單的配置工具界面

韋東山精品嵌入式課程(包含裸機、驅動、應用、系統(tǒng))






商務合作

深圳市云之手科技有限公司

支持我請給我在看,讓更多人知道!



免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉