一、系統(tǒng)方案 本設(shè)計(jì)采用STC89C52單片機(jī)作為主控制器,液晶1602顯示溫濕度,按鍵設(shè)置溫濕度閥值,實(shí)際溫濕度低于設(shè)置下限或者大于上限,蜂鳴器報(bào)警,手機(jī)APP顯示溫濕度,同時(shí)APP可以設(shè)置溫濕度閥值,實(shí)現(xiàn)下位機(jī)和手機(jī)APP的雙向通訊。
二、硬件設(shè)計(jì) 原理圖如下: 最終實(shí)物圖片: 三、單片機(jī)軟件設(shè)計(jì) 單片機(jī)代碼主要是串口初始化、串口中斷服務(wù)程序。首先是串口初始化: void Uart_init() { TMOD=0x20; //波特率發(fā)生器T1的工作方式為2,自動(dòng)填裝初值 EA=1; TH1=0xfd; TL1=0xfd; TR1=1; ET1=0; SM0=0; SM1=1; REN=1; ES=1; } 貼上51單片機(jī)負(fù)責(zé)串口發(fā)送的兩個(gè)函數(shù): void mcu_pc(unsigned char x)//串口發(fā)送程序 發(fā)送單個(gè)字節(jié) { SBUF=x; while(TI==0); TI=0; } void Send2_Str(char *s)//發(fā)送字符串 { while (*s) //Check the end of the string { mcu_pc(*s++); //Send current char and increment string ptr } } 在串口中斷中處理接收到的數(shù)據(jù): void Usart() interrupt 4 { if(RI==1) { receiveData=SBUF;//出去接收到的數(shù)據(jù) RI = 0;//清除接收中斷標(biāo)志位 } } WIFI模塊初始化 Send2_Str("AT+CWMODE=2\r\n");//選擇AP模式 delay(1000); Send2_Str("AT+RST\r\n");//復(fù)位 delay(1000); Send2_Str("AT+CWSAP=\"APP\",\"12345678\",11,3\r\n");//模塊創(chuàng)建熱點(diǎn) delay(1000);
Send2_Str("AT+CIPMUX=1\r\n");//開啟多連接 delay(1000); Send2_Str("AT+CIPSERVER=1,5000\r\n");//開啟TCP服務(wù),設(shè)置端口號(hào) delay(1000); Send2_Str("AT+CIPSTO=0\r\n");//永遠(yuǎn)不超時(shí) delay(1000);
四、App軟件設(shè)計(jì) APP界面比較簡(jiǎn)單,操作之前打開手機(jī)WIFI,連接上下位機(jī)創(chuàng)建的熱點(diǎn)APP,密碼12345678,連接成功之后,點(diǎn)擊手機(jī)APP上面連接,手機(jī)界面會(huì)顯示連接成功,之后手機(jī)APP和下位機(jī)就可以實(shí)現(xiàn)數(shù)據(jù)的交換,放上一個(gè)手機(jī)APP的截圖:
|