器材:51单片机、esp8266
接线方式:VCC-3V3、GND-GND、TX--RX、RX-TX
源码:
#include <REGX52.H>
#include <string.h>
#define SIZE 12 //好处直接改空定义数据即可
sfr AUXR = 0x8E; //手册定义
sbit LED1 = P3^7;
sbit LED2 = P3^6;
char buffer[SIZE];
char WL_NET_flag = 0; //用于当联网标志位
char OK_NET_flag = 0;
char LICEN_NET_flag = 0; //连入服务成功标志位
char LWMS[] = "AT+CWMODE=2"; //路由器模式
char DLJ[] = "AT+CIPMUX=1"; //多连接
char JLFU[] = "AT+CIPSERVER=1"; // default port = 333连接服务器
char FSSJ[] = "AT+CIPSEND=0,5"; // 发送5个字节在连接0通道上
void Uart1_Init() //串口初始化
{ AUXR = 0x01; //让波特率更加稳定,防止掉帧
SCON = 0x50; //配置串口工作模式,REN为1则接收数据
TMOD &= 0x0F;
TMOD |= 0x20; //配置定时器为8位自动重装模式
TL1 = 0xFD;
TH1 = 0xFD; //8位自动重装模式TH1存放的值自动存入TL1
TR1 = 1; //启动定时器
ES = 1; //串口中断打开
EA = 1;
}
void Delay1000ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void senddate(char date) //串口发出数据函数
{
SBUF = date;
while(!TI); //直到等于1时发送成功,TI为0时变1发送成功;为1变0时不循环
TI = 0; //无时差
}
void sendstring(char* str) //传入字符串
{
while(*str != '\0')
{
senddate(*str); //将字符串打印出来
str++; //地址偏移
}
}
void main()
{
LED1 = 1;
LED2 = 1;
Uart1_Init();
Delay1000ms();
sendstring(LWMS);
while(!OK_NET_flag);
OK_NET_flag = 0;
sendstring(DLJ);
while(!OK_NET_flag);
OK_NET_flag = 0;
sendstring(JLFU);
while(!LICEN_NET_flag);
OK_NET_flag = 0;
if(LICEN_NET_flag == 1)
{
LED1 = 0;
LED2 = 0;
} //路由模式成功标志显示
while(1)
{
sendstring(FSSJ);
Delay1000ms();
Delay1000ms();
sendstring("hello");
Delay1000ms();
Delay1000ms();
}
}
void UART_Routine() interrupt 4 //串口中断
{
static int i = 0;
char tmp;
if(RI==1)
{
RI=0; //手动复位
tmp = SBUF;
if(tmp == 'W'||tmp == 'O'||tmp == 'L'||tmp == 'F'||tmp == ':')
{
i = 0;
}
buffer[i] = tmp; //做个假数据为了确定字符不移位
i++;
if(buffer[0] == 'W' && buffer[5] == 'G')
{
WL_NET_flag = 1;
memset(buffer,'\0',SIZE); //清0;便于OK的查找
}
if(buffer[0] == 'O' && buffer[1] == 'K')
{
OK_NET_flag = 1;
memset(buffer,'\0',SIZE);
}
if(buffer[0] == ':' && buffer[1] == 'o'&&buffer[1] == 'p')
{
LED1 = 0;
memset(buffer,'\0',SIZE);
}
if(buffer[0] == ':' && buffer[1] == 'c'&& buffer[1] == 'l')
{
LED1 = 1; //为了查找联网状态给的回应
memset(buffer,'\0',SIZE); //一旦查到就会转到中断
}
if(i == 12)
{
i = 0;
}
}
}
————————————————