以下代码是基于51单片机的ESP8266WIFI模块和HTTP通信,使用AT指令进行,因为需要设计和后端进行交接,所以还有  //get请求/post请求略,可参看截图写出。

为了更好的验证模块是否在接收指令之后能够正确返回,即OK,我加入了字符串检验,即与OK匹配,如果匹配,可以通过串口助手接收OK的返回,如果任意一条没有返回,就会重复发送指令,直到成功。实际运用时,可以省略。

#include <reg52.h>
#include <string.h>
#include <intrins.h>
 
typedef unsigned char u8;
typedef unsigned int u16;
 
unsigned char Usart_Receive[20]={0};
unsigned char Usart_Cnt=0;
bit Usart_AT_flage;
 
u8 dat;
 
void Init(void)
{
	TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}
 
void delay5ms(void)   //误差 -0.000000000001us
{
    unsigned char a,b;
    for(b=15;b>0;b--)
        for(a=152;a>0;a--);
}
 
void delay1s(void)   //误差 -0.000000000227us
{
    unsigned char a,b,c;
    for(c=13;c>0;c--)
        for(b=247;b>0;b--)
            for(a=142;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}
 
void Sent_ZF(u8 dat)  //发送一个字节
{
	ES = 0;
	TI=0;
	SBUF = dat;
	while(!TI);
        TI = 0;
        ES = 1;
}
 
void AT_Send_String(u8 *string)  //发送字符串
{
  while(*string)
  {
    Sent_ZF(*string++);
		delay5ms();
  }
}
 
void ESP8266_Init()
{
	while(1)
	{
		AT_Send_String("AT\r\n");
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
			if(strstr(Usart_Receive, "OK"))
			{
				Usart_AT_flage = 0;
				AT_Send_String("OK\r\n");
				break;
			}	
		}
	}
	while(1)
	{
		AT_Send_String("AT+CWMODE=1\r\n");    //配置WiFi模组工作模式为单STA模式,并把配置保存在flash 
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
			if(strstr(Usart_Receive, "OK"))
			{
				Usart_AT_flage = 0;
				AT_Send_String("OK\r\n");
				break;
			}	
		}
	}
	while(1)
	{
		AT_Send_String("AT+CWJAP=\"guazhou\",\"123456789\"\r\n");	   //!连接网络 
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
			if(strstr(Usart_Receive, "OK"))
			{
				Usart_AT_flage = 0;
				AT_Send_String("OK\r\n");
				break;
			}	
		}
	}
	while(1)
	{
		AT_Send_String("AT+CIPSTART=\"TCP\",\"192.168.43.119\",8080\r\n");		  //连接服务器 
		delay1s();
		delay1s();
		delay1s();
		if(Usart_AT_flage ==1)
		{
			if(strstr(Usart_Receive, "OK"))
			{
				Usart_AT_flage = 0;
				AT_Send_String("OK\r\n");
				break;
			}	
		}
	}	
}
 
void main()
{
    Init();
    ESP8266_Init();
    while(1);
}
 
void InterruptUART(void) interrupt 4
{
	if(RI)
	{
		RI=0;
		Usart_Receive[Usart_Cnt]=SBUF;
		Usart_Cnt++;
		if(Usart_Receive[Usart_Cnt-2]=='\r'&&Usart_Receive[Usart_Cnt-1]=='\n')   //检测倒数一二位
		{
			Usart_Cnt=0;
			Usart_AT_flage=1;
				
		}
		else if(Usart_Cnt>20)
		{
			Usart_Cnt=0;
		}
	}
	else
		TI=0;
}
 

 

 

大概如下: