|
請問為什么(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;
}
}
|
|