esp8266模块通过观察LED检测AT指令进行状态

器材:单片机、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;
            }
        }
    }

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值