在萬物互聯(lián)的時(shí)代,各家互聯(lián)網(wǎng)公司都大力推廣物聯(lián)網(wǎng)平臺(tái),WIFI作為連接平臺(tái)的其中一種樞紐,ESP8266就是其中的一個(gè)典型代表。ESP8266模塊內(nèi)置TCP/IP協(xié)議棧,采用串口AT指令集操作方式,操作簡(jiǎn)單。
ESP8266工作模式有AP、STA、AP+STA共存模式;內(nèi)置TCP/IP協(xié)議棧,通信方式支持TCP和UDP兩種方式。
TCP/IP協(xié)議源于1969年,是針對(duì)Internet開發(fā)的一種體系結(jié)構(gòu)和協(xié)議標(biāo)準(zhǔn),目的在于解決異種計(jì)算機(jī)網(wǎng)絡(luò)的通信問題。使得網(wǎng)絡(luò)在互聯(lián)時(shí)能為用戶提供一種通用、一致的通信服務(wù)。是Internet采用的協(xié)議標(biāo)準(zhǔn)。 TCP/IP是一組通信協(xié)議的代名詞,是由一系列協(xié)議組成的協(xié)議簇。它本身指兩個(gè)協(xié)議集:
TCP(傳輸控制協(xié)議)。
IP(互聯(lián)網(wǎng)絡(luò)協(xié)議)。
TCP協(xié)議:
即傳輸控制協(xié)議,是一個(gè)可靠的、面向連接的協(xié)議。 具有連接建立、數(shù)據(jù)傳輸和連接釋放這三個(gè)階段,在傳送數(shù)據(jù)時(shí)是按序傳送的。
UDP協(xié)議:
采用無連接的方式,不管發(fā)送的數(shù)據(jù)包是否到達(dá)目的主機(jī),數(shù)據(jù)包是否出錯(cuò)。收到數(shù)據(jù)包的主機(jī)也不會(huì)告訴發(fā)送方是否正確收到了數(shù)據(jù),它的可靠性是由上層協(xié)議來保障的。
1.STA+UDP相關(guān)配置指令
"AT\r\n",//測(cè)試指令
"AT+RST\r\n",
"ATE0\r\n",
"AT+CWMODE=1\r\n",//STA模式
"AT+CWJAP="360WIFI_123","12345678"\r\n",//連接WIFI
"AT+CIFSR\r\n",//查詢IP
"AT+CIPSTART="UDP","172.20.7.2",10500,8080,0\r\n",//建立UDP
"AT+CIPMODE=1\r\n",//設(shè)置透?jìng)髂J? "AT+CIPSEND\r\n",//發(fā)送數(shù)據(jù)
2.STA+UDP模式配置函數(shù)設(shè)計(jì)
/*******************************************************************************************************************
**形參: 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];
u8 i=0;
for(i=0;i<5;i++)
{
USARTx_SendStr(USART3,(u8 *)"+++"); //退出透?jìng)髂J? Delay_Ms(1000);
printf("1.測(cè)試指令.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT\r\n",(u8 *)"OK")==0)break;
}
if(i==5)return 1;
printf("2.重啟模塊.......\r\n");
USARTx_SendStr(USART3,(u8 *)"AT+RST\r\n");
Delay_Ms(1000);
Delay_Ms(1000);
printf("3.關(guān)回顯.......\r\n");
if(ESP8266_SendCmd((u8 *)"ATE0\r\n",(u8 *)"OK"))return 2;
printf("4.設(shè)置為STA模式.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CWMODE=1\r\n",(u8 *)"OK"))return 3;
printf("6.連接WIFI.......\r\n");
snprintf(buff,sizeof(buff),"AT+CWJAP=\"%s\",\"%s\"\r\n",wifi_name,password);
if(ESP8266_SendCmd((u8 *)buff,(u8 *)"OK"))return 5;
printf("7.查詢IP.......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CIFSR\r\n",(u8 *)"OK"))return 6;
ESP8266_GetData((char *)usart3_rx_buff,esp8266_info.ipaddr,"STAIP");
printf("8.建立UDP連接.....\r\n");
snprintf(buff,sizeof(buff),"AT+CIPSTART=\"UDP\",\"%s\",%d,%d,0\r\n",remote_ip,remote_prot,localprot);
if(ESP8266_SendCmd((u8 *)buff,(u8 *)"OK"))return 7;
printf("9.設(shè)置透?jìng)?......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CIPMODE=1\r\n",(u8 *)"OK"))return 8;
printf("10.發(fā)送數(shù)據(jù).......\r\n");
if(ESP8266_SendCmd((u8 *)"AT+CIPSEND\r\n",(u8 *)">"))return 9;
esp8266_info.port=localprot;
return 0;
}
運(yùn)行效果:
-
TCP
+關(guān)注
關(guān)注
8文章
1353瀏覽量
79070 -
UDP
+關(guān)注
關(guān)注
0文章
325瀏覽量
33938 -
ESP8266
+關(guān)注
關(guān)注
50文章
962瀏覽量
45002
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論