找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4654|回复: 0
打印 上一主题 下一主题
收起左侧

11. ESP8266串口WiFi模块 AP+STATION 模式测试程序

[复制链接]
跳转到指定楼层
楼主
ID:406210 发表于 2018-10-7 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/************************************************************************************

#include "stc15f2k60s2.h"            // 单片机STC15F2K60S2头文件,可以不再加入reg51.h
#include <intrins.h>                                        // 加入此头文件后,可使用_nop_库函数
#include "delay.h"                        // 延时函数头文件
#include "uart.h"                                // 串行通信函数头文件
#include <string.h>           // 加入此头文件后,可使用strstr库函数

//sbit RST = P2^6;

#define Buf_Max 50

unsigned char xdata Rec_Buf[Buf_Max];
unsigned char i = 0;   
void CLR_Buf(void);                                  
bit  Hand(unsigned char *a);        

         
sbit LED1 = P5^0;                    // 定义LED1为P5.0
sbit LED2 = P5^1;                                // 定义LED2为P5.1
sbit LED3 = P5^2;                                // 定义LED3为P5.2
sbit OP_relay = P3^5;                // 定义光耦继电器控制I/O为P3.5

char code str1[]="AT\r\n";                                                        //  联机指令,返回"OK"
char code str2[]="AT+CWMODE=3\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.191.1\",8234\r\n";    //  连接到TCP服务器,返回“Linked”
char code str6[]="AT+CIPSEND=6\r\n";                                                                                                                             //  发送数据指令
char code str7[]="hello!\r\n";                                                                                                                                                           //  数据内容
char code str8[]="AT+CIPSERVER=1,5000\r\n";                                                                                                   //  建立TCP服务器,开放端口8888                                                       
char code str9[]="AT+CIPMUX=1\r\n";                                                                                                                                   //        打开多连接       
char code str10[]="AT+RST\r\n";                                                                                                                                                         //  软件复位
char code str11[]="AT+CIPSEND=0,15\r\n";                                                                                                                   //  发送数据指令,基于多路连接模式
char code str12[]="Command Executed!\r\n";                                                                                                           //  数据内容

void main()                                                  // 主函数     
{       
//        bit Order_flag;
  P1M0 = 0x00;
  P1M1 = 0x00;
  P3M0 = 0x00;
  P3M1 = 0x00;
  P5M0 = 0x00;
  P5M1 = 0x00;       
//        RST = 1;                                      // ESP8266复位功能脚,拉低会将ESP8266复位
        UartInit();                                                                                                // 初始化串口
        ES = 1;                                       // 串口1中断打开
        IE2 = 0x01;                                   // 串口2中断打开
        EA = 1;                                       // 总中断打开
        DelayMS(1000);                                                                          // 延时一段时间,让ESP8266启动
        DelayUS(100);
  U1SendString(Rec_Buf);                        // 将ESP8266启动信息通过串口1打印出  
  U1SendString("\r\n");       
  U1SendString("Welcome to LCE STUDIO, Please wait while we are getting the device ready\r\n");       
        CLR_Buf();                                                 //清除缓存内容       

       
        while(!Hand("OK"))                            //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
        {
                U2SendString(str1);                         //发送联机指令
                DelayMS(500);
        }
        CLR_Buf();                                    //清除缓存内容
  U1SendString("OK,Succeed Establish connection with ESP8266\r\n");               


       
        while(!(Hand("OK")|Hand("no change")))        //判断是否设置成功,如不成功,延时后再次发送
        {               
                U2SendString(str2);                         //发送设置ESP8266工作模式指令       
                DelayMS(500);               
        }
        if(Hand("OK"))                                 
        {
                        CLR_Buf();
                        U2SendString(str10);                 
                        DelayMS(500);                       
        }
        CLR_Buf();                 
  U1SendString("OK,ESP8266 has been set as AP+Station Mode\r\n");       

        while(!Hand("OK"))                             
        {
                U2SendString(str9);                                //设置为多路连接      
                DelayMS(500);
        }
        CLR_Buf();

        while(!Hand("OK"))                                   // 建立TCP 服务器,并开放端口8888
        {
                U2SendString(str8);                          
                DelayMS(500);
        }
        CLR_Buf();       

        while(!Hand("OK"))                                    //  查询模块当前IP地址
        {
                U2SendString(str4);                          
                DelayMS(500);
        }
        U1SendString(Rec_Buf);
        U1SendString("Congratulations, Everything is set up! TCP sever:192.168.4.1, Port: 5000");
        CLR_Buf();       
       

       
  while (1)                                                        // 主循环  
    {
//  U1SendString(Rec_Buf);                        // 将ESP8266启动信息通过串口1打印出                       
//                                        DelayMS(1000);       
//                                        DelayMS(1000);                       

                        if(Hand("ESPGLED1"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED1 = 1;                               
                                        CLR_Buf();
                                        U1SendString("Command: Turn off LED1, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                                               
                                }  

                                else if(Hand("ESPKLED1"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED1 = 0;                               
                                        CLR_Buf();
                                        U1SendString("Command: Turn on LED1, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                               
                                }        
                               
                        else if(Hand("ESPGLED2"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED2 = 1;                               
                                        CLR_Buf();
                                        U1SendString("Command: Turn off LED1, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                                               
                                }  
                               
                        else if(Hand("ESPKLED2"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED2 = 0;                               
                                        CLR_Buf();
                                        U1SendString("Command: Turn on LED1, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                               
                                }

                        else if(Hand("ESPGLED3"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED3 = 1;                               
                                        CLR_Buf();
                                        U1SendString("Command: Turn off LED1, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                                               
                                }  
                               
                        else if(Hand("ESPKLED3"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED3 = 0;                               
                                        CLR_Buf();
                                        U1SendString("Command: Turn on LED1, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                               
                                }                 
                               
                        else if(Hand("ESPKJDQ1"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        OP_relay = 0;                               
                                        CLR_Buf();
                                        U1SendString("Command: OP relay Enable, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                                               
                                }  
                               
                        else if(Hand("ESPGJDQ1"))                            //  收到关闭LED1的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        OP_relay = 1;                               
                                        CLR_Buf();
                                        U1SendString("Command: OP relay Disable, Executed!\r\n");               
                                        ES = 1;               
                                        IE2 = 0x01;                               
                                }                                                 
/*                               
                        if(Order_flag == 1)
                        {

                                while(!Hand("SEND OK"))                                                                             //判断是否发送数据成功,如不成功,延时后再次发送
                                        {

                                                U2SendString(str11); //数据发送指令
                                                DelayMS(100);               

                                                U2SendString(str12); //数据内容       
                                                DelayMS(500);

                                        }
                                        CLR_Buf();       
                                        Order_flag = 0;
                                }
*/
   }
               
}

bit Hand(unsigned char *a)
{
    if(strstr(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;                    
}

void Uart1() interrupt 4 using 1
{
        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;
}



void Uart2() interrupt 8 using 1
{
                IE2 = 0x00;       
    if (S2CON & S2RI)
    {
        S2CON &= ~S2RI;         
                                Rec_Buf[i] = S2BUF;
                                i++;               
                                if(i>Buf_Max)         
                                {
                                        i = 0;
                                }     
    }
    if (S2CON & S2TI)
    {
        S2CON &= ~S2TI;            
    }
                IE2 = 0x01;               
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表