微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 51单片机AT指令控制ESP8266

51单片机AT指令控制ESP8266

时间:10-02 整理:3721RD 点击:
ESP8266无法识别单片机发送的AT指令,把AT指令直接当数据发送出去了是怎么回事呢?ESP8266的RXD接51的TXD,TXD接51的RXD。代码如下,我直接用串口调试测试AT指令完全可行,但是使用单片机却没有调试出来,发送消息时ESP8266蓝灯也在闪烁,判断为ESP8266并未识别AT指令,没有wifi连接等信息,只是直接就传输出去了,ESP8266做的是客户端.忘大神解答一下ESP8266.c文件
#include"esp8266.h"
int a;
uchar dat,flag = 1;
/*******************************************************************************
* 函 数 名         : ms_delay
* 函数功能                   : 延时若干毫秒
* 输    入         : uint t
* 输    出         : 无
*******************************************************************************/
void ms_delay(uint t)
{
      uint i,j;
      for(i=t;i>0;i--)
       for(j=110;j>0;j--);
}
/*******************************************************************************
* 函 数 名         : us_delay
* 函数功能                   : 延时若干微妙
* 输    入         : uchar t
* 输    出         : 无
*******************************************************************************/
void us_delay(uchar t)
{
      while(t--);
}
/*******************************************************************************
* 函 数 名         : Send_Uart
* 函数功能                   : 串口发送数据
* 输    入         : uchar Value
* 输    出         : 无
*******************************************************************************/
void Send_Uart(uchar value)
{
      ES=0;         //关闭串口中断
      SBUF=value;     //发送
      while(TI==0);    //等待发送完毕
      TI=0;         //清发送完毕中断请求标志位
      ES=1;         //允许串口中断
}
/*******************************************************************************
* 函 数 名         : send_com
* 函数功能                   : 向ESP8266发送命令
* 输    入         : uchar *puf
* 输    出         : 无
*******************************************************************************/
void send_com(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(50);
}
/*******************************************************************************
* 函 数 名         : send_data
* 函数功能                   : ESP8266发送数据
* 输    入         : uchar *puf
* 输    出         : 无
*******************************************************************************/
void send_data(uchar *puf)                       // 数组指针*puf指向字符串数组               
{
        send_com("AT+CIPSEND=4");
        
        /*
        do{                                                                        //连接服务端
                if(RI)
                {            
                    dat=SBUF;        
                    RI=0;
                    if(dat=='K')
                        flag = 0;
                }
        }while(flag);
        */
        ms_delay(50);                                                //等待先发送完成
        flag = 1;                                                         //复位标志
        
        while(*puf!='\0')                                    //遇到空格跳出循环
        {
           Send_Uart(*puf);                                   //向WIFI模块发送控制指令。
           us_delay(5);
           puf++;      
        }
        us_delay(5);
        Send_Uart('\n');                                           //换行
        ms_delay(1);
}         
/*******************************************************************************
* 函 数 名         : init_esp
* 函数功能                   : ESP8266初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void init_esp()
{
        uint num;
        ms_delay(2000);                                            //延时,保证模块已正常开机
    send_com("AT");
//        do{                                                                        //检测模块能否正常收到AT指令
//        if(RI)
//                {
//                        dat = SBUF;
//                        RI = 0;
//                        if(dat=="K")
//                    flag = 0;     
//                }
//        }while(flag);
        ms_delay(100);                                            //延时,保证模块收发完成
//        flag = 1;
//AT+CWMODE=1
        send_com("AT+CWMODE=3");   
//        do{                                                                        //检测模块能否正常收到AT指令
//        if(RI)
//                {
//                        dat = SBUF;
//                        RI = 0;
//                        if(dat=='K')
//                    flag = 0;     
//                }
//        }while(flag);
        ms_delay(100);                                            //延时,保证模块收发完成
        flag = 1;
        
        send_com("AT+RST");   
//        do{                                                                        //检测模块能否正常收到AT指令
//        if(RI)
//                {
//                        dat = SBUF;
//                        RI = 0;
//                        if(dat=='K')
//                    flag = 0;     
//                }
//        }while(flag);
        ms_delay(100);                                            //延时,保证模块收发完成
        flag = 1;
        send_com("AT+CWJAP=\"WIFI\",\"12345678\"");  
//        do{                                                                        //检测模块能否正常收到AT指令
//        if(RI)
//                {
//                        dat = SBUF;
//                        RI = 0;
//                        if(dat=='K')
//                    flag = 0;     
//                }
//        }while(flag);
         
        ms_delay(100);                                            //延时,保证模块收发完成
        flag=1;
        
        send_com("AT+CIPSTART=\"TCP\",\"113.142.153.38\",\"8084\"");   
//        do{                                                                        //检测模块能否正常收到AT指令
//        if(RI)
//                {
//                        dat = SBUF;
//                        RI = 0;
//                        if(dat=='K')
//                    flag = 0;     
//                }
//        }while(flag);
        
        ms_delay(100);                                            //延时,保证模块收发完成
        flag = 1;
}
main.c文件
#include<reg52.h>
#include"esp8266.h"
#include"ds18b20.h"
/*******************************************************************************
* 函 数 名         : UartInit
* 函数功能                   : 串口初始化
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void UartInit(void)                //9600bps@11.0592MHz
{
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位数据,可变波特率
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器0为16位定时器,定时器1为8位自动重装方式
        TL1 = 0xFA;                        //设定定时器1初值
        TH1 = 0xFA;                        //设定定时器1重装值
        ET1 = 0;                        //禁止定时器1中断
        TR1 = 1;                        //启动定时器1
}
/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main()
{
        uint count;
        UartInit();
//        lcd_reset();
        init_esp();
        while(1)
        {
                count ++;
                //LcdDisplay(Ds18b20ReadTemp());
//                key_scan();
                if(count >= 60000)
                {
                        count = 0;
                        send_data("1234");
//                        send_com("hell");
//                        send_temp();
                }
        }
}
static uchar datas[10];
void Uart() interrupt 4
{
        //ESP8266默认数据帧格式:接收多个连接数据 "\r\n+IPD,%d,%d:data\r\n",ID号,数据data长度
        //                       接收一个连接数据可能有两种 1."\r\n+IPD,0,%d:data",data长度 2."\r\ndata\r\n"
        //接收数据长度自己设定
        int        len = 10;
        int i = 0;
        RI = 0;
        ES = 0;
        while(len--)
        {
                datas = SBUF;
                i++;
        }
        ES = 1;
}

已退回5积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top