51单片机和ESP8266实现通讯的编程思想和代码
1硬件电路
硬件就不细说咯,注意:51单片机上的TXD(P31)需要连上esp8266的RXD,单片机上的RXD(P3^0)需要连上esp8266的TXD,esp8266的RXD的EN端连接上5V电压(高电平的时候使能)
2编程思想
在使用esp8266的时候需要在电脑上运用串口助手进行调试(调节波特率,设置工作方式等),当转移到51单片机上使用时,同样需要对ESP8266进行初始化,同时还需要对单片机进行初始化配置(开定时器,开串口中断等)。然后在发送数据的时候,单片机首先将数据发送到SBUF缓存区,然后再发送出去,接收数据时,数据同样先被保存到SBUF缓存区,然后在保存进自己定义的数组中。
综上,实现WiFi点亮led灯的步骤是:
1,首先对单片机和esp8266进行初始化,对ESP8266进行初始化的时候就需要先将ESP8266的指令保存到数组中,然后再发送到ESP8266内部。
单片机初始化代码:
void UartInit(void) //2400bps@12.000MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器1时钟为Fosc/12,即12T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
ES=1; //开启串口中断
EA=1;
对ESP8266进行初始化代码(两部分,第一部分编辑发送字节函数,第二部分将ESP的初始化指令保存在数组中然后在发送出去):
1
void Send_Uart(uchar value)
{
ES=0; //关闭串口中断
TI=0; //清发送完毕中断请求标志位
SBUF=value; //发送
while(TI==0); //等待发送完毕
TI=0; //清发送完毕中断请求标志位
ES=1; //允许串口中断
}
void ESP8266_Set(uchar *puf) // 数组指针*puf指向字符串数组
{
while(*puf!='\0') //遇到空格跳出循环
{
Send_Uart(*puf); //向WIFI模块发送控制指令。
us_delay(5);
puf++;
}
us_delay(5);
Send_Uart('\r');//回车
us_delay(5);
Send_Uart('\n'); //换行
ms_delay(1000);
}
oid ESP8266_Sent(uchar *puf) // 数组指针*puf指向字符串数组
{
ESP8266_Set("AT+CIPSEND=0,4");
while(*puf!='\0') //遇到空格跳出循环
{
Send_Uart(*puf);