找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ESP8266云连接控制程序

  [复制链接]
跳转到指定楼层
楼主
ID:114320 发表于 2016-5-8 03:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        即便不那么懂单片机,按照操作步骤,也可以在地球任何可以上网的地方,控制家里想要控制的东东啦。ESP8266和单片机IAP15W4K58S4是通过串口通信的,除了电源就两根线……

/************************************************************************************
Copyright,  LCE STUDIO   
程序名称:ESP8266 云连接控制程序(18.432MHz)
功能说明: 该程序将ESP8266设置为STATION工作模式,并通过家用wifi热点云服务器建立连接,
                                        手机APP通过注册后并关联该ESP8266模块,通过互联网发送关灯与开灯的指令,
                                         单片机解析后执行
                                        串口1波特率为9600,用于后台监控
                                        串口2波特率为115200,用于与ESP8266模块进行通信
程序版本:1.0 (2015/09)
************************************************************************************/


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

sbit RST = P2^6;
sbit LED1 = P5^0;
sbit LED2 = P5^1;
sbit LED3 = P5^2;

#define Buf_Max 50

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





char code str1[]="AT\r\n";                                                        //  联机指令,返回"OK"
char code str2[]="AT+CWMODE=1\r\n";                                               //  设置ESP8266的工作模式,返回"OK"或者"no change"
char code str3[]="AT+CWJAP=\"WiFi362\",\"1234567890\"\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 AT_CLDSTART[]="AT+CLDSTART\r\n";
char code AT_SMARTLINK[]="AT+CWSMARTSTART=1\r\n";
char code AT_LANSTART[]="AT+LANSTART\r\n";


void main()                                                  // 主函数     
{        

        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 LSE 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,Succee Establish connection with ESP8266\r\n");               
        LED1 = 0;


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

        DelayMS(1000);        
        U2SendString(AT_SMARTLINK);
        DelayMS(1000);               
        do                                                                 //此循环完成SMARTLINK 的配置
        {               
                LED1=1;
                DelayMS(500);
                LED1=0;
                DelayMS(500);
//                U1SendString(Rec_Buf);               
        }while(strstr(Rec_Buf,"WIFI GOT")==NULL); //此循环完成SMARTLINK 的配置        
        U1SendString("OK,ESP8266 is configured as SMARTLINK!");        
        CLR_Buf();  

        U2SendString(AT_CLDSTART); //加入安信可云
        DelayMS(1000);
        do                                                                 //此循环完成安信可云的配置
        {               
                LED1=1;
                DelayMS(500);
                LED1=0;
                DelayMS(500);
//                U1SendString(Rec_Buf);               
        }while(strstr(Rec_Buf,"OK")==NULL); //此循环完成SMARTLINK 的配置        
        U1SendString("OK,ESP8266 is Linked with Cloud Sever!\r\n");                        
        CLR_Buf();

        U2SendString(AT_LANSTART);//开启内网模式(此模式下,模组会用内网回应手机APP 要查询的ID 和KEY)
        DelayMS(1000);
        do                                                                 //此循环完成安信可云的配置
        {

                LED1=1;
                DelayMS(500);
                LED1=0;
                DelayMS(500);
//                U1SendString(Rec_Buf);               
        }while(strstr(Rec_Buf,"OK")==NULL); //此循环完成SMARTLINK 的配置               
        U1SendString("OK,ESP8266 Internal LAN mode is Started!\r\n");


  while (1)                                                        // 主循环  
    {
                        if(Hand("LIGHT:0"))                            //  收到“openled1”的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                       
                                        LED1 = 0;
                                        LED2 = 0;        
                                        LED3 = 0;                                                
                                        CLR_Buf();
                                        U1SendString("Command: LEDs turn on, Executed!\r\n");                                                
                                        ES = 1;               
                                        IE2 = 0x01;                                                
                                }      
                        else if(Hand("LIGHT:1"))                         //  收到“openled2”的指令
                                {
                                        ES = 0;
                                        IE2 = 0x00;                                                
                                        LED1 = 1;
                                        LED2 = 1;        
                                        LED3 = 1;        

                                        CLR_Buf();
                                        U1SendString("Command: LEDs turn off, Executed!\r\n");                                                
                                        ES = 1;                                       
                                        IE2 = 0x01;                                                                                
                                }                                       
    }
}

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 = 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 = S2BUF;
                                i++;               
                                if(i>Buf_Max)         
                                {
                                        i = 0;
                                }     
    }
    if (S2CON & S2TI)
    {
        S2CON &= ~S2TI;            
    }
                IE2 = 0x01;               
}



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

使用道具 举报

沙发
ID:79544 发表于 2016-5-10 14:37 | 只看该作者
楼主你好:手机APP从哪里下载?能附上手机APP吗》感谢!
回复

使用道具 举报

板凳
ID:134790 发表于 2016-7-24 13:48 | 只看该作者
楼主,手机app可以共享一下吗?谢谢
回复

使用道具 举报

地板
ID:140042 发表于 2016-9-21 23:20 来自触屏版 | 只看该作者
他这个只给了这个完整程序的主程序  其中调用程序都没有加出来  还有串口通讯等  1406428654  可以相互交流哈  
回复

使用道具 举报

5#
ID:171355 发表于 2017-4-29 10:58 | 只看该作者
楼主,调用程序,和串口通信的程序分享一下。254637162 感谢!
回复

使用道具 举报

6#
ID:210861 发表于 2017-9-6 15:04 | 只看该作者
谢谢楼主!再详细一点就更好了!
回复

使用道具 举报

7#
ID:106272 发表于 2017-9-22 10:38 | 只看该作者
不够详细,全套有没?
回复

使用道具 举报

8#
ID:380117 发表于 2019-4-13 15:04 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
ID:360590 发表于 2019-4-15 18:21 | 只看该作者
手机APP从哪里下载?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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