51怎么发AT指令啊?求大神指教(ESP8266)-(代码见正文)
时间:10-02
整理:3721RD
点击:
主函数是这样写的:调试的时候只打印esp8266启动信息,AT指令在串口助手可以看到但是没有数据返回。
#include<reg52.h>
#include<intrins.h>
#include<string.h>
#include"uart.h"
#define Buf_Max 50
unsigned char xdata Rec_Buf[Buf_Max];
unsigned char i = 0;
void CLR_Buf(void);
bit Hand(unsigned char *a);
void init();
void delay(unsigned char i);
char code str1[]="AT\r\n"; // 联机指令,返回"OK"
char code str2[]="AT+CWMODE=1\r\n"; // 设置ESP8266的工作模式,返回"OK"或者"no change"
char code str3[]="AT+CWJAP=\"lces\",\"88518851\"\r\n"; // 连接到WiFi热点,lces为热点名称,88518851为密码;连接成功返回“OK”
char code str4[]="AT+CIFSR\r\n"; // 本机IP地址查询指令
char code str5[]="AT+CIPSTART=\"TCP\",\"192.168.23.3\",8234\r\n"; // 连接到TCP服务器,返回“Linked”
char code str6[]="AT+CIPSEND=6\r\n"; // 发送数据指令
char code str7[]="hello!\r\n";
sbit LED1 = P1^0; // 定义LED1为P5.0
sbit LED2 = P1^1; // 定义LED2为P5.1
sbit LED3 = P1^2; // 定义LED3为P5.2
void main()
{
init();
ES=1;
EA=1;
LED1=0;
delay(3000);
LED1=1;
delay(3000);
CLR_Buf();
SendString("AT+RST");
SendString("\r\n");
SendString(str1);
while(!Hand("OK"))
{
SendString(str1);
LED2=0;
delay(500);
}
CLR_Buf();
LED2=1;
delay(3000);
while(!Hand("OK"))
{
SendString(str2);
LED3=1;
delay(500);
}
LED3=1;
delay(3000);
}
void delay(unsigned char i)
{
unsigned char m,n;
for(m=i;m>0;m--)
for(n=125;n>0;n--);
}
void init(void) //串口初始化
{
EA=0; //暂时关闭中断
TMOD=0x20; //定时器1工作在模式2,自动重装模式
SCON=0x50; //串口工作在模式1
TH1=0xfd; //计算定时器重装值
TL1=0xfd;
PCON=0x00; //串口波特率加倍
ES=1; //串行中断允许
TR1=1; //启动定时器1
REN=1; //允许接收
EA=1; //允许中断
}
void uart(void) interrupt 4 //串口发送中断
{
ES = 0;
if (RI)
{
RI = 0; //清除RI位
Rec_Buf[i] = SBUF;
i++;
if(i>Buf_Max)
{
i = 0;
}
}
if (TI)
{
TI = 0; //清除TI位
}
ES = 1;
}
bit Hand(unsigned char *a)
{
if(strcmp(Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
void CLR_Buf(void)
{
unsigned char k;
for(k=0;k<Buf_Max;k++)
{
Rec_Buf[k] = 0;
}
i = 0;
}
以下是串口发送函数:
#include<reg52.h>
void SendString(char *s);
void SendString(char *s)
{
while(*s != '\0')
{
SBUF = *(s++);
while(!TI);
TI = 0;
}
}
#include<reg52.h>
#include<intrins.h>
#include<string.h>
#include"uart.h"
#define Buf_Max 50
unsigned char xdata Rec_Buf[Buf_Max];
unsigned char i = 0;
void CLR_Buf(void);
bit Hand(unsigned char *a);
void init();
void delay(unsigned char i);
char code str1[]="AT\r\n"; // 联机指令,返回"OK"
char code str2[]="AT+CWMODE=1\r\n"; // 设置ESP8266的工作模式,返回"OK"或者"no change"
char code str3[]="AT+CWJAP=\"lces\",\"88518851\"\r\n"; // 连接到WiFi热点,lces为热点名称,88518851为密码;连接成功返回“OK”
char code str4[]="AT+CIFSR\r\n"; // 本机IP地址查询指令
char code str5[]="AT+CIPSTART=\"TCP\",\"192.168.23.3\",8234\r\n"; // 连接到TCP服务器,返回“Linked”
char code str6[]="AT+CIPSEND=6\r\n"; // 发送数据指令
char code str7[]="hello!\r\n";
sbit LED1 = P1^0; // 定义LED1为P5.0
sbit LED2 = P1^1; // 定义LED2为P5.1
sbit LED3 = P1^2; // 定义LED3为P5.2
void main()
{
init();
ES=1;
EA=1;
LED1=0;
delay(3000);
LED1=1;
delay(3000);
CLR_Buf();
SendString("AT+RST");
SendString("\r\n");
SendString(str1);
while(!Hand("OK"))
{
SendString(str1);
LED2=0;
delay(500);
}
CLR_Buf();
LED2=1;
delay(3000);
while(!Hand("OK"))
{
SendString(str2);
LED3=1;
delay(500);
}
LED3=1;
delay(3000);
}
void delay(unsigned char i)
{
unsigned char m,n;
for(m=i;m>0;m--)
for(n=125;n>0;n--);
}
void init(void) //串口初始化
{
EA=0; //暂时关闭中断
TMOD=0x20; //定时器1工作在模式2,自动重装模式
SCON=0x50; //串口工作在模式1
TH1=0xfd; //计算定时器重装值
TL1=0xfd;
PCON=0x00; //串口波特率加倍
ES=1; //串行中断允许
TR1=1; //启动定时器1
REN=1; //允许接收
EA=1; //允许中断
}
void uart(void) interrupt 4 //串口发送中断
{
ES = 0;
if (RI)
{
RI = 0; //清除RI位
Rec_Buf[i] = SBUF;
i++;
if(i>Buf_Max)
{
i = 0;
}
}
if (TI)
{
TI = 0; //清除TI位
}
ES = 1;
}
bit Hand(unsigned char *a)
{
if(strcmp(Rec_Buf,a)!=NULL)
return 1;
else
return 0;
}
void CLR_Buf(void)
{
unsigned char k;
for(k=0;k<Buf_Max;k++)
{
Rec_Buf[k] = 0;
}
i = 0;
}
以下是串口发送函数:
#include<reg52.h>
void SendString(char *s);
void SendString(char *s)
{
while(*s != '\0')
{
SBUF = *(s++);
while(!TI);
TI = 0;
}
}
应该没什么问题吧
模块根本就来不及初始化。
要延时一段时间?
不错的文件,值得收藏