器材:单片机、esp8266、USB转TTL
源码:
#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; //wifi连接成功标志位
char OK_NET_Flag = 0; //连接ok标志位 将安信可串口助手翻译过来
code char LJWL[] = "AT+CWJAP=\"lihahaha\",\"18355804262\"\r\n"; // 连接wifi,wifi模块变成路由器 \表示保留他原本意义
code char LJWUQ[] = "AT+CIPSTART=\"TCP\",\" 192.168.62.47\",8880\r\n"; // 电脑寻找wifi模块的IP地址 连接成功 code作用专门找个空间存放这些存不下的东西
char TROW[] = "AT+CIPMODE=1\r\n"; // 开启透传
char SJCS[] = "AT+CIPSEND\r\n"; // 数据传送
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()
{
int mark = 0;
LED1 = 1;
LED2 = 1;
Uart1_Init();
Delay1000ms();
sendstring(LJWL);
while(!WL_NET_Flag) //当WL_NET_flag为1是成功则 !WL_NET_flag为0则往下走
while(!OK_NET_Flag)
OK_NET_Flag = 0;
sendstring(LJWUQ);
while(!OK_NET_Flag)
OK_NET_Flag = 0; //清零
sendstring(TROW);
while(!OK_NET_Flag)
OK_NET_Flag = 0;
sendstring(SJCS);
while(!OK_NET_Flag)
if(WL_NET_Flag == 1)
{
LED1 = 0;
}
if(OK_NET_Flag == 1) //用于检测是否联网成功
{
LED2 = 0;
}
while(1)
{
Delay1000ms();
sendstring("wo shi ni ba ba\r\n");
}
}
void UART_Routine() interrupt 4 //串口中断
{
static int i = 0;
char tmp;
if(RI==1) //中断接收标志,查51手册
{
RI=0; //手动复位
tmp = SBUF;
if(tmp == 'W'||tmp == 'O'||tmp == 'L')
{
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] == 'L' && buffer[2] == '1')
{
LED1 = 0;
memset(buffer,'\0',SIZE);
}
if(buffer[0] == 'L' && buffer[2] == '0')
{
LED1 = 1; //为了查找联网状态给的回应
memset(buffer,'\0',SIZE); //一旦查到就会转到中断
}
if(i == 12) //数组满12清0
{
i = 0;
}
}
}