基于51单片机的ESP8266模块驱动程序函数代码

/******************************************************************************/
//STA模式操作步骤:
//AT+CWMODE_CUR=1
//AT+CWJAP_CUR="wifiname","password"
//AT+CIFSR 查看路由器分配的IP
//AT+CCIPMUX=1
//AT+CIPSERVER=1,8888
//AT+CIPSEND
/******************************************************************************/

/******************************************************************************/
// 包含头文件
/******************************************************************************/
#include "config.h"
#include "esp8266.h"
#include "delay.h"
#include "uart.h"


/******************************************************************************/
// 定义接收数据数组和命令执行是否完成的标志位
/******************************************************************************/
uint8 rcvTable[50];
uint8 flag = 0;


/******************************************************************************/
// 函数名称:Uart_Cmd_Display 
// 输入参数:str-发送的命令
// 输出参数:无 
// 函数功能:串口打印单片机向ESP8266发送的命令,便于观察实现现象
/******************************************************************************/
void Uart_Cmd_Display(uint8 *str){
    displayMode;
    Uart_Send_String(str);
    Uart_Send_String("\r\n");
    cmdMode;
}


/******************************************************************************/
// 函数名称:Esp8266_Send_String 
// 输入参数:str-发送的命令
// 输出参数:无 
// 函数功能:向ESP8266模块发送命令
/******************************************************************************/
void Esp8266_Send_String(uint8 *str){
    cmdMode;
    Uart_Send_String(str);
    Uart_Send_String("\r\n");
}


/******************************************************************************/
// 函数名称:Esp8266_Sta_Mode 
// 输入参数:无
// 输出参数:无 
// 函数功能:ESP8266模块设置为STA模式
// 注意:忙信号检查
// 每发送一条命令一定要等待ESP8266完成操作后,再发送下一条命令
/******************************************************************************/
void Esp8266_Sta_Mode(void){
    Uart_Cmd_Display("setting sta mode...\r\n");
    

    flag=0;
    Uart_Cmd_Display("AT+RST");      //重启模块
    Esp8266_Send_String("AT+RST");//返回ready
    while(flag!=0x02);

    flag=0;
    Uart_Cmd_Display("AT+CWMODE_CUR=1");   //设置为sta模式
    Esp8266_Send_String("AT+CWMODE_CUR=1");//返回OK
    while(flag!=0x01);

    flag = 0;
    Uart_Cmd_Display("AT+CWJAP_CUR=\"wifiname\",\"password\"");    //连接到网络
    Esp8266_Send_String("AT+CWJAP_CUR=\"TP-LINK_ZT\",\"95279527\"");//返回OK    
    while(flag!=0x01);

    flag = 0;
    Uart_Cmd_Display("AT+CIPMUX=1");    //设置多连接
    Esp8266_Send_String("AT+CIPMUX=1");    //返回OK
    while(flag!=0x01);

    flag = 0;
    Uart_Cmd_Display("AT+CIPSERVER=1,8888");   //设置为服务器,端口为8888
    Esp8266_Send_String("AT+CIPSERVER=1,8888");//返回OK
    while(flag!=0x01);

    flag = 0;
    Uart_Cmd_Display("AT+CIFSR");   //查询路由器分配的IP地址
    Esp8266_Send_String("AT+CIFSR");//返回OK
    while(flag!=0x01);

    flag = 0;
    Uart_Cmd_Display("sta mode is ready...\r\n"); 
}


/******************************************************************************/
// 函数名称:Esp8266_Show_IP 
// 输入参数:无
// 输出参数:无 
// 函数功能:串口打印路由器分配的IP地址
/******************************************************************************/
void Esp8266_Show_IP(uint8 *ipData){
    uint8 j;
    for(j=10;j<28;j++){
        displayMode;
        Uart_Send_Char(*(ipData+j));                    
        cmdMode;                    
    }
    displayMode;
    Uart_Send_String("\r\n");
    cmdMode;
}


/******************************************************************************/
// 函数名称:arryClear 
// 输入参数:dataArry
// 输出参数:无 
// 函数功能:数组元素清零
/******************************************************************************/
void arryClear(uint8 *dataArry){
    uint8 i;
    for(i=0;i<50;i++){
        *(dataArry+i)=0;
    }
}


/******************************************************************************/
// 函数名称:Uart_Int 
// 输入参数:无
// 输出参数:无 
// 函数功能:串口中断服务程序
// 主要两个功能:
// 1. 忙信号判断 - 单片机发送指令后,根据ESP8266反馈的信息判断指令是否完成
// 2. 任务判断   - 单片机根据从ESP8266模块收到的信息,执行相应的动作(ledOn/ledOff)
/******************************************************************************/
void Uart_Int(void) interrupt 4 {
    static uint8 i = 0;
    if(TI){
        TI = 0;
        led = ~led;
    }
    else{
        RI = 0;
        rcvTable[i]=SBUF;
        if(i==50)i=0;
        i++;

        if(rcvTable[i-1]=='\n'){
            i = 0;
            if((rcvTable[0]=='O')&&(rcvTable[1]=='K')){
                Uart_Cmd_Display("OK\r\n");
                flag = 0x01;
            }
            else if((rcvTable[0]=='r')&&(rcvTable[1]=='e')&&(rcvTable[4]=='y')){
                Uart_Cmd_Display("ready\r\n");    
                flag = 0x02;            
            }
            else if((rcvTable[0]=='+')&&(rcvTable[10]=='I')&&(rcvTable[11]=='P')){
                Esp8266_Show_IP(rcvTable);            
            }
            else if((rcvTable[1]==',')&&(rcvTable[3]=='O')&&(rcvTable[4]=='N')){
                displayMode;
                Uart_Send_String("Link ");
                Uart_Send_Char(rcvTable[0]);                
                Uart_Cmd_Display(":Connected");   //显示连接设备                
            }
            else if((rcvTable[1]==',')&&(rcvTable[3]=='L')&&(rcvTable[4]=='O')){
                displayMode;
                Uart_Send_String("Link ");
                Uart_Send_Char(rcvTable[0]);                
                Uart_Cmd_Display(" Closed");   //显示断开设备            
            }


        }else{
            if((rcvTable[0]=='+')&&(rcvTable[1]=='I')&&(rcvTable[2]=='P')&&(rcvTable[3]=='D')&&
                    (rcvTable[4]==',')&&(rcvTable[9]=='l')&&(rcvTable[10]=='e')&&(rcvTable[11]=='d')&&
                    (rcvTable[12]=='O')&&(rcvTable[13]=='f')&&(rcvTable[14]=='f')){
                        displayMode;
                        Uart_Send_String("Msg from Link ");
                        Uart_Send_Char(rcvTable[5]);
                        Uart_Cmd_Display(": ledOff");   //led off    
                        led = 1;
                        arryClear(rcvTable);
                        i = 0;
                    }
            if((rcvTable[0]=='+')&&(rcvTable[1]=='I')&&(rcvTable[2]=='P')&&(rcvTable[3]=='D')&&
                    (rcvTable[4]==',')&&(rcvTable[9]=='l')&&(rcvTable[10]=='e')&&(rcvTable[11]=='d')&&
                    (rcvTable[12]=='O')&&(rcvTable[13]=='n')){
                        displayMode;
                        Uart_Send_String("Msg from Link ");
                        Uart_Send_Char(rcvTable[5]);                        
                        Uart_Cmd_Display(": ledOn");   //led on
                        led = 0;
                        arryClear(rcvTable);
                        i = 0;                         
                    }                    
            }        
        
        }
}

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GJZGRB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值