51单片机驱动ESP8266

写在前面

之前博主学习了很多网络编程的东西是因为工作上要开始做“智能家居”、物联网方面的东西了。
下面主角要登场了。就是单片机。

关于ESP8266你必须知道的

博主使用的是安信可的产品,12S
51单片机驱动ESP8266_第1张图片
常用AT指令:
(1) 设置模块为ST模式:发送:AT+CWMODE=1;返回:OK

(2) 查看当前WiFi列表:AT+CWLAP返回: OK

(3) 加入当前无线网络:发送命令:AT+CWJAP=”MERSAIN”,”XXXXXXXX”

第一个填你想要连接的WiFi名称,第二个填WiFi的密码

(4)查看当前模块IP地址:发送: AT+CWLIF返回:当前IP地址

(5)开启多连接模式 :发送命令:AT+CIPMUX=1返回:OK

(6)建服务器 发送命令:AT+CIPSERVER=1,8080(设置指令)

指令:AT+CIPSERVER=[,]

说明::0-关闭server模式,1-开启server模式 :端口号,缺省值为333 响应:OK

重点注意:
单片机发过去的时候要主要每条指令要换行 例如send(“AT+RST\r\n”); //往串口发重启指令

硬件连接

TXD RXD 互相对接,GND共地,VCC:wifi模块要接3.3V

51代码

#include 
#include 
#include



#define uchar unsigned char 
#define uint unsigned int

uchar ReceiveData[5];  //回传的数组
uchar countnumber;

void uart_init()      //串口的初始化
{
	//[email protected]
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器1时钟为Fosc,即1T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xDC;		//设定定时初值
	TH1 = 0xDC;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA = 1;
	ES = 1;

} 



void delayms(uint xms)  //延时
{
uint i,j;
for(i=xms;i>0;i--)
	for(j=110;j>0;j--);
}


void Sent_ZF(uchar dat)  //发送一个字节
{
	ES = 0;
	TI=0;
	SBUF = dat;
	while(!TI);
    	TI = 0;
	ES = 1;
}

void send(uchar *string)  //发送字符串
{
while(*string)
 {
	Sent_ZF(*string++);

	}

}

void Uart1() interrupt 4     //串口1 接收数据4wei(收到8266回传的OK,其实是\r\nOK)
{                            //当然是因为目前8266里面刷的AT固件是出厂默认固件
	uchar a;
	if (RI==1)
	{

	//RI=0;       //复位中断请求标志,接收数据后置1
	a=SBUF;     //接收数据
	RI=0;       //复位中断请求标志,接收数据后置1


	*(ReceiveData + countnumber)=a;
	countnumber++;

	if (countnumber>4)
	{
		countnumber=0;

	}
}

} 



uchar data_compare(uchar *p)  //比较字符串
{
	if(strstr(ReceiveData,p)!=NULL)
	return 1;
	else
	return 0;
}




void wifi_init()      //初始化wifi模块
{
	while(1)
	{
	send("AT+RST\r\n");   //往串口发重启指令
	if(data_compare("OK"))break;
	
	delayms(600);         //适当延时,给wifi模块一点反应时间

	}
	memset(ReceiveData,0,5);


	while(1)
	{
	send("AT+CWMODE=1\r\n");  //选择STA模式
	if(data_compare("OK"))break;
	
	delayms(600);         //适当延时,给wifi模块一点反应时间

	}
	memset(ReceiveData,0,5);

	while(1)
	{
	send("AT+CIPMUX=0\r\n");  //单通道模式
	if(data_compare("OK"))break;
	
	delayms(600);         //适当延时,给wifi模块一点反应时间

	}
	memset(ReceiveData,0,5);



	while(1)
	{
	send("AT+CIPSTART=\"TCP\",\"192.168.1.100\",8080\r\n");   //往串口发重启指令
	if(data_compare("OK"))break;
	
	delayms(600);         //适当延时,给wifi模块一点反应时间

	}
	memset(ReceiveData,0,5);

	while(1)
	{
	send("AT+CIPMODE=1\r\n");  //选择透传
	if(data_compare("OK"))break;
	
	delayms(600);         //适当延时,给wifi模块一点反应时间

	}
	memset(ReceiveData,0,5);


	while(1)
	{
	send("AT+CIPSEND\r\n");  //发送数据命令
	if(data_compare("OK"))break;
	
	delayms(600);         //适当延时,给wifi模块一点反应时间

	}
	memset(ReceiveData,0,5);

}



void main()
{

	P27=0;      //蜂鸣器
	uart_init();
	delayms(2000);
	wifi_init();    //就可连上服务端了

	while(1)
	{
	
		;
	
	}
}

ESP8266固件

配套刷的是出厂默认固件,可去安信可官网下载

结束

以后会对其进行完善的

你可能感兴趣的:(51单片机驱动ESP8266)