查看: 2586|回复: 6

[原创] 【高校争霸赛】智能家居进度④——ESP8266连接云平台

[复制链接]
  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
    发表于 2016-11-14 12:52:18 | 显示全部楼层 |阅读模式
    所属团队:济南大学 1209Lab
    选用WIFI模块:ESP8266-WROOM-02
    连接云平台:微分云平台  http://123.56.93.246:8080/v4/ui_main.html
    数据交互:将温度传感器、湿度传感器和光照传感器的数据上传至云平台,实时显示;能够通过网页云平台实时控制灯和电机的运转
    这边主要介绍ESP8266的使用和数据传输的显示
    首先我们使用的ESP8266-WROOM-02 QQ截图20161114121152.jpg 主要有以下特性
    QQ截图20161114121144.jpg

    我们通过连接手机热点,访问外部服务器,与微分电子的云平台进行数据交互,下面贴出代码。


    #include "ESP8266.h"

    #define ESP8266_UART  LPC_USART1  //连接ESP8266的串口

    #define ESP8266_Send_Quote      uart_PutChar(ESP8266_UART,34)   //发送引号
    #define ESP8266_Send_Comma      uart_PutChar(ESP8266_UART,44)   //发送逗号
    #define ESP8266_Send_Tab        uart_PutChar(ESP8266_UART,13)   //发送\r
    #define ESP8266_Send_Enter      uart_PutChar(ESP8266_UART,10)   //发送\n

    char* ESP8266_AT      = "AT\r\n";    //测试AT
    char* ESP8266_RST     = "AT+RST\r\n";//复位ESP8266
    char* ESP8266_Version = "AT+GMR\r\n";//查看版本信息

    char* ESP8266_Mode_STA    = "AT+CWMODE=1\r\n";//模式设置:进入STA模式
    char* ESP8266_Mode_AP     = "AT+CWMODE=2\r\n";//模式设置:进入AP模式
    char* ESP8266_Mode_STA_AP = "AT+CWMODE=3\r\n";//模式设置:进入STA+AP模式

    char* ESP8266_STA_WIFI_SSID     = "lab09";         //STA模式下连接AP的SSID:TP-LINK_5BBA54
    char* ESP8266_STA_WIFI_Password = "12091209";      //STA模式下连接AP的密钥:12091211

    char* ESP8266_STA_List_AP        = "AT+CWLAP\r\n";  //搜索并列出附近可用AP
    char* ESP8266_STA_Quit_AP        = "AT+CWQAP\r\n";  //退出与目标AP的连接
    char* ESP8266_STA_Join_AP        = "AT+CWJAP=";     //加入目标AP
    char* ESP8266_STA_Connect_Server = "AT+CIPSTART=";  //连接指定服务器的端口
    char* ESP8266_STA_Data_Length    = "AT+CIPSEND=";   //设置向服务器发送数据的长度

    char* ESP8266_Server_IP   =  "123.56.93.246";  //微分云平台IP:123.56.93.246
    char* ESP8266_Server_Port =  "9900";          //微分云平台端口号:9900
            
    char* ESP8266_TCP  = "TCP";                    //TCP类型
    char* ESP8266_UDP  = "UDP";                    //UDP类型

    char* ESP8266_Data = "test is ok";

    const uint8_t LED_ID[16]={0x00,0x00,0x04,0x47,0xde,0x80,0xaf,0x44,0xe4,0x3c,0xfe,0x59,0x66,0x00,0xc5,0x32};
    const uint8_t Temp_ID[16]={0x00,0x00,0xf2,0x7f,0xa1,0xc4,0xd7,0x19,0x6b,0x3d,0xb4,0x12,0xb5,0xcc,0xf5,0xab};
    const uint8_t Hum_ID[16]={0x00,0x00,0x64,0xd7,0x85,0x73,0x4e,0x22,0x95,0x96,0x4c,0x43,0x03,0x60,0x2a,0x9e};
    const uint8_t Light_ID[16]={0x00,0x00,0x37,0xab,0xe4,0xee,0x9a,0x11,0xff,0xf4,0x56,0x1b,0xcf,0x29,0xad,0x30};

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称ED_Send_Data
    *  功能说明:通过微分云平台控制LED灯和对指令进行回应
    *  参数说明:State:数据包的类型     
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:无
    *  作    者:何昌昕
    *************************************************************************/
    void LED_Send_Data(uint8_t State)
    {
        uint8_t i;
        for(i=0;i<16;i++)
        {
            uart_PutChar(ESP8266_UART,LED_ID);
        }
        uart_PutChar(ESP8266_UART,0x00);
        uart_PutChar(ESP8266_UART,0x13);
        switch(State)
        {
            case 0:uart_PutChar(ESP8266_UART,0x00);break;//设备认证
            case 1:uart_PutChar(ESP8266_UART,0x03);break;//回应心跳
            case 2:uart_PutChar(ESP8266_UART,0x07);break;//回应开灯
            case 3:uart_PutChar(ESP8266_UART,0x09);break;//回应关灯
        }
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:Temp_Send_Data
    *  功能说明:向微分云平台发送温度传感器的数据
    *  参数说明:State:数据包的类型     
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:无
    *  作    者:何昌昕
    *************************************************************************/
    void Temp_Send_Data(uint8_t temp)
    {
        uint8_t i;
        for(i=0;i<16;i++)
        {
            uart_PutChar(ESP8266_UART,Temp_ID);
        }
        uart_PutChar(ESP8266_UART,0x00);//发送字节数高位
        uart_PutChar(ESP8266_UART,0x14);//发送字节数低位
        uart_PutChar(ESP8266_UART,0x00);//数据包类型
        uart_PutChar(ESP8266_UART,temp);//数据
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:Hum_Send_Data
    *  功能说明:向微分云平台发送湿度传感器的数据
    *  参数说明:State:数据包的类型     
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:无
    *  作    者:何昌昕
    *************************************************************************/
    void Hum_Send_Data(uint8_t temp)
    {
        uint8_t i;
        for(i=0;i<16;i++)
        {
            uart_PutChar(ESP8266_UART,Hum_ID);
        }
        uart_PutChar(ESP8266_UART,0x00);//发送字节数高位
        uart_PutChar(ESP8266_UART,0x14);//发送字节数低位
        uart_PutChar(ESP8266_UART,0x00);//数据包类型
        uart_PutChar(ESP8266_UART,temp);//数据
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称ight_Send_Data
    *  功能说明:向微分云平台发送光照传感器的数据
    *  参数说明:State:数据包的类型     
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:无
    *  作    者:何昌昕
    *************************************************************************/
    void Light_Send_Data(uint8_t temp)
    {
        uint8_t i;
        for(i=0;i<16;i++)
        {
            uart_PutChar(ESP8266_UART,Light_ID);
        }
        uart_PutChar(ESP8266_UART,0x00);//发送字节数高位
        uart_PutChar(ESP8266_UART,0x14);//发送字节数低位
        uart_PutChar(ESP8266_UART,0x00);//数据包类型
        uart_PutChar(ESP8266_UART,temp);//数据
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:ESP8266_Check_Cmd
    *  功能说明:对返回的指令进行检查
    *  参数说明:str:想要收到的结果
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:无
    *  作    者:何昌昕
    *************************************************************************/
    uint8_t* ESP8266_Check_Cmd(char* str)
    {
        char *strx;
        //strx=strstr((const char*)info.RevBuff,(const char*)str);
      return (uint8_t*)strx;
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:ESP8266_Send_Cmd
    *  功能说明:向ESP8266模块发送AT指令
    *  参数说明:cmd:字符串指令     
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:无
    *  作    者:何昌昕
    *************************************************************************/
    void ESP8266_Send_Cmd(char* cmd)
    {
        uint8_t i ;
        for(i=0;i<strlen(cmd);i++)
        {
            uart_PutChar(ESP8266_UART,cmd);
        }
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:ESP8266_Join_AP
    *  功能说明:向ESP8266模块发送连接目标AP的指令
    *  参数说明:无   
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:根据不同场合更改不同设备的SSID和Password
    *  作    者:何昌昕
    *************************************************************************/
    void ESP8266_Join_AP(void)
    {
        ESP8266_Send_Cmd(ESP8266_STA_Join_AP);
        ESP8266_Send_Quote;
        ESP8266_Send_Cmd(ESP8266_STA_WIFI_SSID);
        ESP8266_Send_Quote;   
        ESP8266_Send_Comma;
        ESP8266_Send_Quote;                 
        ESP8266_Send_Cmd(ESP8266_STA_WIFI_Password);
        ESP8266_Send_Quote;
        ESP8266_Send_Tab;
        ESP8266_Send_Enter;
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:ESP8266_Connect_Server
    *  功能说明:在STA模式下,向ESP8266模块发送连接目标服务器的指定端口
    *  参数说明:无   
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:根据不同场合更改不同服务器的IP和Port
    *  作    者:何昌昕
    *************************************************************************/
    void ESP8266_Connect_Server(void)
    {
        ESP8266_Send_Cmd(ESP8266_STA_Connect_Server);
        ESP8266_Send_Quote;
        ESP8266_Send_Cmd(ESP8266_TCP);
        ESP8266_Send_Quote;   
        ESP8266_Send_Comma;
        ESP8266_Send_Quote;                 
        ESP8266_Send_Cmd(ESP8266_Server_IP);
        ESP8266_Send_Quote;   
        ESP8266_Send_Comma;
        ESP8266_Send_Cmd(ESP8266_Server_Port);
        ESP8266_Send_Tab;
        ESP8266_Send_Enter;
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:ESP8266_Send_Data
    *  功能说明:在STA模式下,向ESP8266模块发送数据
    *  参数说明:无   
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:根据不同场合更改数据长度
    *  作    者:何昌昕
    *************************************************************************/
    void ESP8266_Send_Data(char* length)
    {
        ESP8266_Send_Cmd(ESP8266_STA_Data_Length);
        ESP8266_Send_Cmd(length);
        ESP8266_Send_Tab;
        ESP8266_Send_Enter;
    }

    /*************************************************************************
    *                     1 2 0 9 电 机 拖 动 实 验 室
    *  函数名称:ESP8266_Data_Handle
    *  功能说明:接收数据提取和处理
    *  参数说明:无   
    *  函数返回:无
    *  修改时间:2016年10月30日
    *  备       注:根据不同情形来更改判断标准
    *  作    者:何昌昕
    *************************************************************************/
    /*void ESP8266_Data_Handle(void)
    {
        uint8_t i;
        if(info.RevFlag==0xff)
        {
            if(DiffTime(info.RevTime,GetTime())>50)
            {               
                for(i=0;i<info.RevCount;i++)
                {
                    uart_PutChar(USART3,info.RevBuff);
                }            
            printf("%d",info.RevCount);            
            printf("%d",info.RevBuff[info.RevCount-7]);
            switch(info.RevBuff[info.RevCount-7])
            {
                case 1:
                            printf("Connect is successful!");        
                            break;
                case 2:
                            printf("Check the heart!");        
                            ESP8266_Send_Data("19");
                            delay_ms(100);
                            LED_Send_Data(1);
                            break;
                case 6:
                            printf("开灯");        
                            LED1=0;
                            ESP8266_Send_Data("19");
                            delay_ms(100);
                            LED_Send_Data(2);
                            break;               
                case 8:
                            printf("关灯");   
                            LED1=1;
                            ESP8266_Send_Data("19");
                            delay_ms(100);
                            LED_Send_Data(3);   
                            break;
                default:break;
            }        
            info.RevCount=0;
            info.RevFlag=0;      
            }
        }.
    }*/

    /*----------------------------end of ESP8266.c-------------------------------*/
    登陆云平台,网址上面已经给出,查看“我的设备”,添加设备会生成对应设备的ID,我们只需要按照云平台给定的协议进行发送即可显示,下面贴一张湿度传感器的数据,具体效果待全部完成后贴出视频。
    QQ截图20161114125154.jpg QQ截图20161114125203.jpg


    签到
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 1784 天

    [LV.Master]伴坛终老

    65

    主题

    7545

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    12763
    最后登录
    2024-4-27
    发表于 2016-11-14 13:03:16 | 显示全部楼层
    很好的东西
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7452
    最后登录
    2024-1-28
    发表于 2016-11-14 13:04:34 | 显示全部楼层
    6666,支持一个
    来根华子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    836

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3975
    最后登录
    2024-4-16
    发表于 2016-11-14 13:27:08 | 显示全部楼层
    大赞,另外问一句。现在这种传感器的云平台是不是有统一的模板了啊?类似wordpress啊那种。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    15270
    最后登录
    1970-1-1
    发表于 2016-11-14 14:45:10 | 显示全部楼层
    不错不错
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
     楼主| 发表于 2016-11-14 15:37:07 | 显示全部楼层
    mgn 发表于 2016-11-14 13:27
    大赞,另外问一句。现在这种传感器的云平台是不是有统一的模板了啊?类似wordpress啊那种。 ...

    这个我不太清楚,云平台确实是一个很好的解决方案
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:51
  • 签到天数: 2628 天

    [LV.Master]伴坛终老

    45

    主题

    5184

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    10677
    最后登录
    2024-4-26
    发表于 2016-11-14 22:50:25 | 显示全部楼层
    这个好赞
    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 20:35 , Processed in 0.158899 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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