找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[代码请教]关于ESP8266模块与单片机和手机通信的

[复制链接]
跳转到指定楼层
楼主
ID:296257 发表于 2018-3-24 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问为什么(Rxbuff[0]=='0')&&(Rxbuff[1]==',')&&(Rxbuff[3]=='O')这个条件能够判断是否有客户端连接到WiFi以及 为什么(Rxbuff[9]=='1')&&(Rxbuff[10]=='0')能够判断手机发送过来的指令要求关灯

全部代码如下
#include "DHT11.h"
#include <stdio.h>
#include "string.h"
extern unsigned char  F16T,F16RH;                //温湿度数据
sbit LED1=P2^0;
sbit LED2=P2^3;
#define uchar unsigned char
#define uint unsigned int
unsigned char idata Rxbuff[50],Rxnum;
unsigned char        Recwifi_data[5],led[2];
char *strx=0;
char clinetid;//连接ID
unsigned char getflag;//获取标志
void Get_Clinet(void);
void InitUART(void)                         //这是串口的基本配置,配置他的波特率是9600.这些参数都是标准的。
{
    TMOD = 0x20;
    SCON = 0x50;
    TH1 = 0xFD;
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;
    ES = 1;
    TR1 = 1;
}

/******************************************************************************/
void delayms(unsigned int x)
{
        unsigned int i;
        while(x--)
                for(i=125;i>0;i--);
}
/*
* UART 发送一字节
*/
void UART_send_byte(char dat)
{
        SBUF = dat;                                        //发送
        while (TI == 0);                        //等待发送完毕
        TI = 0;                                                //清发送完毕中断请求标志位
}

/*
* UART 发送字符串
*/
void Send_Str(unsigned char *buf)
{
        while (*buf != '\0')
        {
                UART_send_byte(*buf++);
        }
}

void ESP8266_SERVER(void)//服务器建立
{
        Send_Str("AT\r\n");
        delayms(500);
        Send_Str("AT\r\n");
        delayms(500);
        Send_Str("AT\r\n");
        delayms(500);
        Send_Str("ATE0\r\n");          //关闭回显
        delayms(500);
           Send_Str("AT+CWSAP=\042ESP8266_001\042,\0421234567890\042,5,3\r\n");          //设置显示名称和密码ESP8266_001           1234567890
        delayms(500);
        Send_Str("AT+CIPMUX=1\r\n");//启动多连接,建立服务器都需要配置
        delayms(500);       

        Send_Str("AT+CIPSERVER=1,5000\r\n");//建立服务器
        delayms(500);       
        Send_Str("AT+CIPSTO=0\r\n");

}

void Get_Clinet(void)//判断是否获取到了客户端接入
{
        if((Rxbuff[0]=='0')&&(Rxbuff[1]==',')&&(Rxbuff[3]=='O'))//返回连接值
        {         
                getflag=1;
        }
        if((Rxbuff[0]=='0')&&(Rxbuff[1]==',')&&(Rxbuff[3]=='L'))//返回连接值
        {         
                getflag=0;
        }

}

void Send_DATA(uchar *buffer)
{
    Send_Str("AT+CIPSEND=0,7\r\n");
        delayms(300);
    Send_Str(buffer);//发送数据
        delayms(500);
        if((Rxbuff[9]=='1')&&(Rxbuff[10]=='0'))//关灯
        LED1=1;
        if((Rxbuff[9]=='1')&&(Rxbuff[10]=='1'))//开灯
        LED1=0;
        if((Rxbuff[9]=='2')&&(Rxbuff[10]=='0'))        //关灯
        LED2=1;
        if((Rxbuff[9]=='2')&&(Rxbuff[10]=='1'))//开灯
        LED2=0 ;
}
void main()
{
          unsigned char   Tx_Buf[10];
          unsigned char LEDstatus;//灯的状态
          delayms(500);
        delayms(500);
        delayms(1000);          //延时一段时间,让WIFI模块稳定
        InitUART();                        //初始化串口
    ESP8266_SERVER();        //初始化ESP8266
        while(1)       
        {          
                  Get_Clinet();
                if(getflag)
                {
                          getDHT11(); //获取温湿度值
                          Tx_Buf[0]='T';        //帧头
                          Tx_Buf[1]=F16T/10%10+0x30;                 //将温湿度数据送往发送数组,送给蓝牙模块让手机APP显示
                          Tx_Buf[2]=F16T%10+0x30;               
                          Tx_Buf[3]=F16RH/10%10+0x30;
                          Tx_Buf[4]=F16RH%10+0x30;
                        LEDstatus=LED1;
                           Tx_Buf[5]=LEDstatus+0x30;//发送灯的状态
                        LEDstatus=LED2;
                        Tx_Buf[6]=LEDstatus+0x30;
                           Send_DATA(Tx_Buf)        ;//发送数据
                }
        }
}

/*****************串口接收中断函数,接收数据*********************/
void UARTInterrupt(void) interrupt 4
{       
        if(RI)
    {
                ES=0;
        RI = 0;
              Rxbuff[Rxnum]=SBUF;
                if(Rxbuff[Rxnum]=='\n')
                {
                        Rxnum=0;
                }
            else
                {
                        Rxnum++;
                        if(Rxnum>22)
                        Rxnum=0;
                }
                ES=1;
    }          
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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