




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
摘要隨著5G時(shí)代的到來,萬物互聯(lián)即將成為現(xiàn)實(shí),智能家居也悄然聲息地進(jìn)入到人們的生活中,我們的生活方式也會(huì)發(fā)生翻天覆地的改變,變得更方便,變得更高質(zhì)量。智能家居是Iot以住宅為平臺,將總線技術(shù)、無線網(wǎng)絡(luò)技術(shù)、安全防范技術(shù)、自動(dòng)控制技術(shù)、音視頻技術(shù)等技術(shù)按照人們的需求有機(jī)結(jié)合在一起,搭建成一個(gè)高質(zhì)量、高效率的日常事務(wù)和各設(shè)備管理系統(tǒng),與普通家居相比,不僅提高家居安全性、舒適性、便利性,環(huán)保性,還節(jié)省了各種能源費(fèi)用。本設(shè)計(jì)利用Crotex-M3內(nèi)核的STM32作為智能家居控制系統(tǒng)的上位機(jī),通過GUI界面查看各傳感器反饋的實(shí)時(shí)信息,也可以通過操控圖形界面來根據(jù)這些信息進(jìn)行對應(yīng)的處理。大部分模塊由STC89C52單片機(jī)作為下位機(jī)來驅(qū)動(dòng),安防方面的模塊由STM32驅(qū)動(dòng),STM32和AT89C52之間通過ESP8266模塊作為通訊工具,利用IEEE802.11(WIFI)協(xié)議進(jìn)行通訊。本篇畢業(yè)設(shè)計(jì)論文主要詳細(xì)描述了智能家居中的安防系統(tǒng)開發(fā)和各相關(guān)模塊的功能實(shí)現(xiàn)的具體過程,最終利用GSM模塊,人體紅外傳感器,指紋識別模塊,攝像頭監(jiān)控等實(shí)現(xiàn)實(shí)時(shí)報(bào)警提醒和遠(yuǎn)程監(jiān)控,及時(shí)做好相應(yīng)的措施來避免災(zāi)難的發(fā)生和人員傷亡,保證財(cái)產(chǎn)安全。關(guān)鍵字:嵌入式;STM32;智能家居;指紋識別;遠(yuǎn)程監(jiān)控;GSM
Designofsmarthomesystem——SecuritysystemsoftwaredevelopmentAbstractWiththecomingof5Gera,theInternetofeverythingisabouttobecomeareality,smarthomealsoquietlyentersintopeople'slife,andourlifestylewillchangedramatically,becomemoreconvenient,becomehigherquality.SmarthomeisIOT'sresidentialplatform,whichcombinesbustechnology,wirelessnetworktechnology,securitytechnology,automaticcontroltechnology,audioandvideotechnologyandothertechnologiesaccordingtopeople'sneedstobuildahigh-qualityandefficientdailyaffairsandequipmentmanagementsystem.Comparedwithordinaryhome,itnotonlyimproveshomesafety,comfort,convenience,andenvironmentalsosavesallkindsofenergycosts.Inthisdesign,STM32ofcrotex-m3coreisusedastheuppercomputerofsmarthomecontrolsystem.Thereal-timeinformationfedbackbyeachsensorcanbeviewedthroughGUIinterface,andthecorrespondingprocessingcanbecarriedoutaccordingtotheseinformationthroughtheoperationofgraphicinterface.MostofthemodulesaredrivenbySTC89C52asthelowercomputer,andthesecuritymoduleisdrivenbySTM32.BetweenSTM32andAT89C52,thecommunicationtoolisesp8266module,whichusesIEEE802.11(WiFi)protocoltocommunicate.Thisthesismainlydescribesthedevelopmentofthesecuritysysteminthesmarthomeandthespecificprocessofthefunctionrealizationofeachrelatedmodule.Finally,theGSMmodule,humaninfraredsensor,fingerprintidentificationmodule,cameramonitoringandothermodulesareusedtorealizethereal-timealarmandremotemonitoring,andcorrespondingmeasuresaretakenintimetoavoidtheoccurrenceofdisastersandcasualtiesandensurethepropertysafety.Keywords:embedded;STM32;smarthome;fingerprintrecognition;remotemonitoring;GSM
目錄1、緒論 、緒論1.1智能家居系統(tǒng)研究背景隨著人們的生活水平不斷提高,人們對生活環(huán)境的要求逐漸升高,人們越發(fā)重視家庭中生活的舒適,安全和便利。因此,從市場需求的角度來看,智能家居具有廣闊的發(fā)展前景。智能家居在中國擁有6年的開發(fā)經(jīng)驗(yàn)。從人們的第一個(gè)夢想到今天的現(xiàn)實(shí)生活,智能家居已廣為人知并被廣泛接受。隨著未來幾十年的積極發(fā)展,智能家居將會(huì)變得越來越廣泛。從理論上講,智能家居的研究促進(jìn)了家居領(lǐng)域智能技術(shù)的深入發(fā)展,為各種新型智能家居產(chǎn)品的設(shè)計(jì)和開發(fā)提供了一定的依據(jù),產(chǎn)生了一定的社會(huì)與經(jīng)濟(jì)效益。現(xiàn)在,由于國內(nèi)外還沒有對智能家具進(jìn)行系統(tǒng)的研究,作為主要的研究內(nèi)容具有現(xiàn)實(shí)意義。1.2智能家居中安防系統(tǒng)的重要性安防系統(tǒng)被稱為第一道屏障,作為家庭保障的核心功能,在智能家居中肯定是不可缺少的。不少人覺得,家里正常不會(huì)出事,發(fā)生概率不大,所以覺得安防系統(tǒng)在智能家居中是多此一舉,但是相關(guān)調(diào)查發(fā)現(xiàn)在美國,有六成以上的人都是因?yàn)橹悄芗揖酉到y(tǒng)能夠?yàn)樗麄儙戆踩U喜艜?huì)選擇智能家居的。安防系統(tǒng)監(jiān)測到煤氣泄漏、電路故障、火災(zāi)、非法闖入等異常時(shí)會(huì)進(jìn)行報(bào)警通告與采取緊急措施,全面保障的財(cái)產(chǎn)安全、人身健康與人身安全。
2、智能家居控制系統(tǒng)方案設(shè)計(jì)2.1總體思路整個(gè)系統(tǒng)由上位機(jī)和下位機(jī)組成,上位機(jī)負(fù)責(zé)開發(fā)可視界面,可以在界面查看當(dāng)前每個(gè)傳感器的數(shù)據(jù)也可以在界面控制下位機(jī)來驅(qū)動(dòng)每個(gè)模塊。上位機(jī)從下位機(jī)獲取了傳感器數(shù)據(jù)之后,會(huì)實(shí)時(shí)地在LCD液晶屏上反映出來,從而使屋子內(nèi)的情況了如指掌。溫度和濕度每個(gè)人對其要求不同,可以設(shè)定一個(gè)令自己舒適的數(shù)值范圍,若傳感器反饋的溫度數(shù)值不在這個(gè)范圍內(nèi),則會(huì)給下位機(jī)一個(gè)代表風(fēng)強(qiáng)度的數(shù)字量給單片機(jī)進(jìn)行D/A轉(zhuǎn)換,從而調(diào)節(jié)風(fēng)扇的強(qiáng)度。也是如此,只不過控制的是除濕器和增濕器,還有每個(gè)燈泡的亮度也可以單獨(dú)控制。上位機(jī)在這整個(gè)系統(tǒng)中充當(dāng)了大腦的位置,大腦發(fā)出的控制信號通過神經(jīng)中樞—ESP8266無線通信模塊傳輸信息最終來控制身體各個(gè)部位的肌肉—下位機(jī)從而驅(qū)動(dòng)各個(gè)模塊工作。不過也不是的所有的下位機(jī)動(dòng)作都需要與上位機(jī)交互的,它也有屬于自己的一個(gè)機(jī)制,例如窗簾拉到盡頭就不會(huì)繼續(xù)控制電機(jī)運(yùn)作等,這就好比膝跳反應(yīng)不需要經(jīng)過大腦皮層即可完成動(dòng)作一樣。既然說上位機(jī)相當(dāng)于大腦,那足以說明上位機(jī)的重要性,如果一個(gè)人沒有了大腦的控制,就只是一個(gè)植物人罷了。整個(gè)系統(tǒng)的框架如圖2.1所示,圖2.2是對圖2.1中安防系統(tǒng)的進(jìn)一步劃分。對于安防模塊,像是煙霧,有害氣體濃度等,無法手動(dòng)設(shè)置其報(bào)警閥值,統(tǒng)一按照標(biāo)準(zhǔn)而定。若反饋的有害氣體濃度信息超過規(guī)定閥值,會(huì)觸發(fā)蜂鳴器和報(bào)警燈閃爍,并且會(huì)及時(shí)通知到指定的手機(jī)號碼說明報(bào)警信息,及時(shí)采取相應(yīng)的措施確保家宅安全。檢測到一氧化碳濃度過高了,說明很可能時(shí)煤氣泄漏了,上位機(jī)會(huì)給下位機(jī)一個(gè)打開窗、打開風(fēng)扇的控制信號;檢測到煙霧值過高了,說明很可能發(fā)生火災(zāi)了,上位機(jī)就會(huì)給下位機(jī)一個(gè)打開水閥的信號。在門外有安裝一個(gè)監(jiān)控?cái)z像頭和人體紅外檢測模塊人體紅外檢測模塊如果檢測到門前有人體活動(dòng)時(shí)長超過規(guī)定則判定為試圖非法破解門禁系統(tǒng),系統(tǒng)就會(huì)報(bào)警,并且攝像頭會(huì)截圖當(dāng)前畫面存到SD卡中,且可以在界面查看。門禁系統(tǒng):大門主要使用的是指紋解鎖,超過10次時(shí)就會(huì)禁用指紋10分鐘,禁用指紋鎖期間只能使用輸入密碼解鎖了,密碼鎖也有10次重試機(jī)會(huì),超過之后也會(huì)禁用密碼鎖。
圖2.1智能家居總框架圖2.2安防系統(tǒng)框架2.2安防界面設(shè)計(jì)安防系統(tǒng)的界面設(shè)計(jì):主界面設(shè)有按鈕,可以跳轉(zhuǎn)到其他界面;信息監(jiān)測界面,可以查看當(dāng)前一氧化碳濃度與煙霧濃度的值,當(dāng)傳感器數(shù)據(jù)異常時(shí)會(huì)報(bào)警,還可以手動(dòng)將當(dāng)前傳感器信息與狀態(tài)通過GSM模塊發(fā)送短信到指定手機(jī)號碼;在手動(dòng)控制界面可以通過上面的按鈕控制下位機(jī)進(jìn)行開/關(guān)報(bào)警燈、報(bào)警蜂鳴器、排氣風(fēng)扇、水閥等操作;在設(shè)置界面可以設(shè)置手機(jī)號、是否開啟GSM服務(wù)、指紋、密碼解鎖的解鎖次數(shù)限制與等待時(shí)間與指紋識別等級等。門禁系統(tǒng)理論上是獨(dú)立在大門上的一個(gè)界面,由于手頭上只有一臺STM32,就只能放在一起了,所以它們之間不是由界面上的按鈕進(jìn)行切換,而是由按下按鍵key0進(jìn)行切換。門禁系統(tǒng)可以通過密碼與指紋兩種方式驗(yàn)證信息,還可以進(jìn)行添加指紋、刪除指紋、更改密碼等操作。圖2.3安防界面的切換3、硬件設(shè)計(jì)3.1上位機(jī)的選擇本系統(tǒng)的上位機(jī)采用正點(diǎn)原子公司集成的精英開發(fā)板,其主控芯片是內(nèi)核為ARMCortex-M3的STM32F103ZET6。與AT89C51相比,價(jià)格雖然高了一點(diǎn)但是性能上是其好幾倍,外設(shè)也比51單片機(jī)豐富很多;STM32有16個(gè)可編程優(yōu)先級,擁有84個(gè)中斷可選擇。所以最終選擇了性價(jià)比相對較高的精英開發(fā)板。圖3.1正點(diǎn)原子STM32F1精英版
開發(fā)板硬件資源主要如圖3.2所示。圖3.2開發(fā)板硬件資源3.2安防模塊介紹3.2.1GSM/GPRS模塊介紹本系統(tǒng)選擇ALIENTEK推出的ATK-SIM900A模塊。圖3.3ATK-SIM900A模塊ATK-SIM900A模塊功能完善,板載SIMCOM公司的工業(yè)級雙頻GSM/GPRS模塊SIM900A。它的工作頻段有900Hhz和1800Mhz兩種,可以低功耗實(shí)現(xiàn)語音、彩信、普通短信和GPRS數(shù)據(jù)的傳輸。ATK-SIM900A通過杜邦線與開發(fā)板連接,在本設(shè)計(jì)中,兩者使用USART3串口通訊。圖3.4開發(fā)板與GSM模塊連接方式圖3.5ATK-SIM900A的通信特性圖3.6ATK-SIM900A的GPRS數(shù)據(jù)特性3.2.2指紋解鎖模塊介紹該模塊主要用于門禁解鎖中,解鎖方式從最初的機(jī)械鎖到后來的密碼鎖、IC卡解鎖,再到即將普及的生物識別解鎖,安全級別不斷提升,也變得越來越方便。生物識別門禁中最常見也是最先普及的就是指紋解鎖了,只需要在指紋采集窗口輕輕一按即可開鎖,避免了丟失或遺忘攜帶鑰匙、IC卡時(shí)無法打開門鎖的囧境,只有在迫不得已手指受傷等情況導(dǎo)致無法識別的時(shí)候才需要用到密碼解鎖。ATK-301電容指紋識別模塊是ALIENTEK推出的一款高性能的電容式半導(dǎo)體指紋識別模塊。ATK-301電容模塊采用了瑞典FPC公司按壓式電容指紋傳感器,該傳感器具有功耗低、穩(wěn)定、圖像一致性效果好、耐靜電等級高的特點(diǎn)。模塊搭配GigaDevice生產(chǎn)的指紋控制專用芯片,針對指紋傳感器做出了大量的圖像優(yōu)化、速度優(yōu)化、算法優(yōu)化,使模塊具有識別速度快,通過率高的等特點(diǎn)。相對傳統(tǒng)光學(xué)指紋模塊,本模塊具有識別速度更快、體積更小、功耗更低等特點(diǎn)。模塊自帶RGB燈,接通電源后會(huì)有藍(lán)綠色漸變的呼吸燈的效果,在識別到指紋時(shí),如果在指紋庫中找不到相應(yīng)的指紋就會(huì)亮紅色,驗(yàn)證成功則變?yōu)榫G色。用戶使用指紋模塊并不需要研究指紋圖像的解析、識別算法,僅需要按照芯片手冊上的通信協(xié)議發(fā)送數(shù)據(jù)即可控制該模塊。圖3.7ATK-LB301模塊正反面圖3.8ATK-LB301技術(shù)指標(biāo)ATK301通過杜邦線與STM32精英開發(fā)板連接,在本設(shè)計(jì)中,兩者使用USART2串口進(jìn)行通訊。圖3.9STM32與ATK-LB301的硬件連接方式3.2.3人體紅外檢測模塊介紹本系統(tǒng)使用的是SR301人體紅外感應(yīng)模塊PIR,是一種被動(dòng)式熱釋電紅外探測器,該模塊工作原理是利用人體一般在37℃左右,會(huì)放出波長大概為10微米的紅外線,這個(gè)波長范圍的紅外線穿過菲涅爾透鏡處理之后匯于熱釋元件上,元件接收到時(shí)就會(huì)失去電荷平衡,向外釋放電荷,從而產(chǎn)生高電平。主要用于樓道燈光控制,ATM安防等,靈敏度高,可靠性強(qiáng)。為什么要使用該傳感器一定要搭配菲涅爾透鏡呢?菲涅爾透鏡是由聚烯烴或玻璃材料注壓而成的薄片,這里的菲涅爾光學(xué)透鏡有兩個(gè)作用:一是可以將輻射匯聚成一點(diǎn)起到放大的作用,二是將入射光的頻率范圍限制在10μm左右,降低白光干擾并且增強(qiáng)了這個(gè)范圍波長光的敏感性,從而來保證接收到的光是人體發(fā)出的。圖3.10SR-301人體紅外檢測表3.1SR-301產(chǎn)品參數(shù)值產(chǎn)品參數(shù)數(shù)值工作電壓12v直流感應(yīng)范圍<=120°0-5m檢測距離5m輸出方式5v高低電平工作溫度20℃+60℃模塊與STM32的連接方式:OUT引腳可以與STM32的任意引腳連接,本設(shè)計(jì)選擇完全獨(dú)立的PA5引腳。產(chǎn)品特性:只針對運(yùn)動(dòng)物體,靜止物體不會(huì)對它造成影響。如果有人在感應(yīng)范圍內(nèi),則一直保持高電平,直到人離開后,才會(huì)變?yōu)榈碗娖?。圖3.11STM32與SR-301傳感器的硬件連接方式
3.2.4攝像頭模塊介紹本系統(tǒng)使用的是帶有OmniVision公司生產(chǎn)的CMOSVGA圖像傳感器的攝像頭。該傳感器體積小,工作電壓低,提供單片VGA攝像頭和影像處理器的所有功能。該產(chǎn)品VGA圖像輸出最高可以達(dá)到60fps。用戶可以完全控制圖像質(zhì)量、數(shù)據(jù)格式和傳輸方式。圖3.12OV7725攝像頭模塊OV7725特點(diǎn):●高敏感度、低電壓適合嵌入式應(yīng)用?!駱?biāo)準(zhǔn)SCCB接口,兼容IIC接口?!裰С肿詣?dòng)曝光控制、自動(dòng)增益控制、自動(dòng)白平衡、自動(dòng)消除燈光條紋、支持伽瑪曲線、飽和度、色度、邊緣等設(shè)置。輸出格式(有效像素):●VGA:640*480(30萬像素)●QVGA:320*240●QQVGA:160*120由于OV7225的PCLK最高可以達(dá)到24MHZ,如果用芯片的IO直接抓取幀信息將十分消耗CPU資源,所以我們需要一個(gè)緩沖區(qū)來間接獲取OV7725的數(shù)據(jù),ALIENTEK的ATK-OV7725自帶一個(gè)FIFO芯片作為圖像數(shù)據(jù)的緩沖區(qū),有了這個(gè)我們就可以很方便的獲取圖片數(shù)據(jù)了,也不會(huì)占耗多少CPU。ATK-OV7725與STM32通過2*9的排針連接,外部通信信號如下:圖3.13通訊信號及作用OV7725讀取圖像過程(VGA640*480為例):Sensor獲取原始幀畫面數(shù)據(jù)->儲存到FIFO存儲器中->在存儲完一幀圖像以后,我們就可開始讀取數(shù)據(jù)了。FIFO讀指針復(fù)位->讀取像素高字節(jié)->讀取第一個(gè)像素低字節(jié)->讀取第二個(gè)像素高字節(jié)->…->循環(huán)讀取全部像素信息。共循環(huán)640*480*2次就完成了一幀圖像數(shù)據(jù)的讀取,再把數(shù)據(jù)傳輸?shù)絃CD液晶屏中,這樣一幀一幀的傳輸我們就可以進(jìn)行監(jiān)控工作了。
4、軟件設(shè)計(jì)4.1開發(fā)工具介紹4.1.1SourceInsight代碼編輯軟件本次設(shè)計(jì)使用了SourceInsight軟件編寫程序。SourceInsight是一款功能強(qiáng)大的代碼編輯閱讀工具,雖說不具有編譯鏈接調(diào)試的功能,但是用該軟件編寫代碼真的是讓人心曠神怡。各種不同意義的詞用不同顏色顯示,讓我們更快區(qū)分這是宏,關(guān)鍵字,全局變量,傳入的參數(shù)還是局部變量等,而且如果輸入既不是變量也不是其他的東西,sourceInsight在其他地方找不到相應(yīng)的聲明,就會(huì)顯示灰色表示輸入錯(cuò)誤。顏色可以根據(jù)自己喜好設(shè)置。圖4.1SourceInsight軟件界面◆支持快速補(bǔ)全功能。◆可改變文本編碼,utf-8、ANSI、GBK等,就不會(huì)像KEIL軟件經(jīng)常出現(xiàn)中文亂碼的問題,這個(gè)問題很嚴(yán)重,如果載入別人的工程容易出現(xiàn)注釋亂碼的情況?!舯A粜薷暮圹E,修改之后行號左邊黃色代表修改之后未保存,綠色代表修改之后已保存,保存后如果再撤銷會(huì)彈出警告,這點(diǎn)小細(xì)節(jié)我覺得處理的挺好的。◆支持高亮,光標(biāo)停留在某個(gè)詞上然后按F8,那么在這整個(gè)工程中其他地方見到這個(gè)詞也會(huì)顯示高亮?!糁С秩炙阉?,在全局搜索功能上輸入關(guān)鍵詞,就會(huì)把整個(gè)工程遍歷一遍,然后顯示出所有含有該關(guān)鍵詞的的文件和行信息?!糇詭П容^功能,支持比較目錄和文件,這也是一個(gè)常用的功能?!糁С挚焖偬D(zhuǎn),這個(gè)時(shí)我喜歡用SourceInsight編寫軟件最重要的一點(diǎn),只要按住CRTL鍵,再左鍵單擊你想查看的變量,函數(shù),頭文件等,都會(huì)跳轉(zhuǎn)到對應(yīng)的定義或者文件中,十分方便。4.1.2MDK5編程軟件本次設(shè)計(jì)使用了MDK5燒錄程序,SourceInsght畢竟只是一個(gè)編寫程序的軟件,要想編譯鏈接有沒有錯(cuò)誤,還是得用MDK5。Keil是美國KeilSoftware公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),被ARM公司收購后,添加了部分ARM的芯片,可以編譯STM32等ARM內(nèi)核的程序了。由于STM32精英開發(fā)板帶有ST-LINK調(diào)試接口,所以可以直接在MDK5上面燒錄程序,很方便,不然就要依靠其他軟件如FlyMCU等燒錄工具來燒錄axf文件,不僅麻煩,而且燒錄的時(shí)間是使用ST-LINK調(diào)試器的兩倍。圖4.2MDK5軟件界面4.1.3串口調(diào)試助手XCOM串口調(diào)試助手是用于調(diào)試串口的工具,由于嵌入式開發(fā)不像純軟件開發(fā)一樣想調(diào)試的時(shí)候加個(gè)printf、puts就能打印在屏幕上得到我們想要的信息,我們的程序時(shí)跑在板子上而不是PC上,所以這個(gè)時(shí)候我們需要通過USART串口讓STM32與PC通訊,把printf打印的消息發(fā)到PC上,調(diào)試助手設(shè)置好波特率和COM口后就可以顯示出來了。圖4.3.1串口調(diào)試助手軟件-查看打印信息本設(shè)計(jì)中除了使用XCOM來接收printf打印之外,還用來調(diào)試ATK-SIM900A模塊與指紋模塊ATK-LB301。圖4.3.2串口調(diào)試助手軟件-發(fā)送命令以及接收應(yīng)答4.1.4SynoChip芯片測試軟件該軟件是一款很簡單很實(shí)用的指紋模塊測試工具,軟件的界面如下:圖4.4SynoChip芯片測試軟件界面圖4.5進(jìn)行完添加指紋操作的部分截圖與硬件連接后打開該軟件選擇串口,選擇正確的波特率與傳感器類型就可以進(jìn)行后續(xù)的使用了。我們可以在這里錄入指紋到芯片里面,也可以刪除芯片里面已錄入的指紋,還可以掃描指紋后查詢該指紋的ID等。錄入的指紋還可以下載它的圖像。圖4.6進(jìn)行完搜索指紋操作的部分截圖4.2操作系統(tǒng)UCOSIIIUCOS是Micrium公司產(chǎn)出的可剝奪型內(nèi)核搶占式調(diào)度的實(shí)時(shí)操作系統(tǒng),UCOS目前有兩個(gè)版本:UCOSII和UCOSIII。該設(shè)計(jì)使用的是UCOSIII。UCOSIII是UCOS的第三代kernel,可裁剪、可剝奪、支持多線程管理,而且線程數(shù)量與優(yōu)先級數(shù)量沒有限制。UCOSIII提供了RTOS所需要的所有功能,包括信同步、多任務(wù)管理與內(nèi)存管理等,防止多個(gè)任務(wù)同時(shí)讀寫一個(gè)數(shù)據(jù)而產(chǎn)生不可預(yù)料的后果,即在一個(gè)數(shù)據(jù)在被其他的任務(wù)訪問時(shí),其他的任務(wù)不可以對該數(shù)據(jù)進(jìn)行訪問。4.2.1UCOSIII任務(wù)管理因?yàn)樵撓到y(tǒng)的上位機(jī)需要做到多個(gè)任務(wù)并行,像是EMWIN界面的觸摸操作,GSM模塊短信發(fā)送等,每個(gè)任務(wù)都需要自己獨(dú)立運(yùn)作,UCOS的多任務(wù)管理使CPU資源的利用達(dá)到了最大化,讓每個(gè)任務(wù)輪流占有CPU的使用權(quán),然后頻繁的切換任務(wù),這樣宏觀地看起來就像是多個(gè)CPU在同時(shí)執(zhí)行多個(gè)任務(wù)一樣了。多任務(wù)的最大好處是充分利用硬件資源,如在單任務(wù)時(shí)遇到delay函數(shù)時(shí),執(zhí)行空語句,CPU空轉(zhuǎn),而在多任務(wù)系統(tǒng)中,則會(huì)先暫時(shí)掛起自己,執(zhí)行正在就緒態(tài)中優(yōu)先級最高的任務(wù),延時(shí)時(shí)間到了再恢復(fù)自身。每個(gè)任務(wù)都有自己的優(yōu)先級,當(dāng)多個(gè)任務(wù)都處于就緒態(tài)的時(shí)候,系統(tǒng)會(huì)根據(jù)優(yōu)先級別優(yōu)先運(yùn)行級別高的任務(wù)。一旦就緒態(tài)中出現(xiàn)比當(dāng)前任務(wù)優(yōu)先級別更高的任務(wù)時(shí),CPU的使用權(quán)就會(huì)被高優(yōu)先級任務(wù)剝奪了。為了防止出現(xiàn)兩個(gè)任務(wù)間相互等待而形成死鎖的情況,UCOSIII每次等待都會(huì)進(jìn)行超時(shí)檢測。要使用UCOSIII至少需要4K以上的RAM,因?yàn)閮?nèi)核就占了4K,加上每個(gè)任務(wù)自己的堆??臻g,本設(shè)計(jì)使用了大概16K的任務(wù)堆棧,STM32F103精英板的SRAM有64K,還有將近一般可以使用,所以也足夠了。UCOSIII的任務(wù)狀態(tài)有5種:休眠態(tài)、等待態(tài)、就緒態(tài)、運(yùn)行態(tài)和中斷服務(wù)態(tài)。表4.1任務(wù)狀態(tài)說明休眠態(tài)該任務(wù)還未交給UCOSIII管理等待態(tài)任務(wù)被掛起后切到后臺等待延時(shí)完畢或某個(gè)事件完成就緒態(tài)任務(wù)正在按照優(yōu)先級排隊(duì),已經(jīng)準(zhǔn)備就緒,等待運(yùn)行中的任務(wù)放棄CPU使用權(quán)運(yùn)行態(tài)程序中只能有一個(gè)任務(wù)運(yùn)行即獲取CPU的使用權(quán)中斷服務(wù)態(tài)當(dāng)中斷響應(yīng)的時(shí)候,當(dāng)前的CPU使用權(quán)會(huì)從當(dāng)前任務(wù)轉(zhuǎn)給中斷服務(wù)函數(shù)。狀態(tài)切換:任務(wù)一開始都是處于休眠態(tài),當(dāng)使用OSTaskCreate()函數(shù)創(chuàng)建任務(wù)后進(jìn)入就緒態(tài),由UCOSIII管理,也可以之后用OSTaskDel()函數(shù)刪除該任務(wù)重新進(jìn)入休眠態(tài)。當(dāng)前有任務(wù)A在運(yùn)行時(shí),有一個(gè)比任務(wù)A優(yōu)先級高的任務(wù)B進(jìn)入了就緒態(tài),此時(shí)A的CPU使用權(quán)被B剝奪,A就會(huì)進(jìn)入就緒態(tài),B進(jìn)入運(yùn)行態(tài)。直到B主動(dòng)放棄CPU使用權(quán),A才會(huì)繼續(xù)運(yùn)行。上述說到任務(wù)遇到delay函數(shù)時(shí)在多任務(wù)系統(tǒng)中,CPU不會(huì)空轉(zhuǎn),會(huì)先暫時(shí)掛起自己,此時(shí)任務(wù)進(jìn)入等待態(tài),執(zhí)行緒態(tài)中優(yōu)先級最高的任務(wù),延時(shí)時(shí)間到了再繼續(xù)運(yùn)行。當(dāng)檢測到各種中斷(例如外部中斷、定時(shí)器中斷、串口中斷等),程序就會(huì)進(jìn)入中斷函數(shù)中,此時(shí)的狀態(tài)為中斷服務(wù)態(tài)。當(dāng)退出中斷函數(shù)后恢復(fù)為運(yùn)行態(tài)。圖4.7各任務(wù)狀態(tài)之間切換4.2.2UCOSIII的移植移植UCOSIII不像ARM移植LINUX的時(shí)候還需要移植UBOOT,內(nèi)核還有文件系統(tǒng),移植過程別提令人多煩惱了,還會(huì)有各種各樣的問題出現(xiàn)。相比之下移植UCOSIII只需要把相應(yīng)的文件放到工程里面一起編譯再添加編譯路徑即可,實(shí)在方便。首先準(zhǔn)備一個(gè)沒有UCOSIII的基礎(chǔ)工程,然后去官方下載UCOSIII的源碼,分好類放進(jìn)對應(yīng)的文件夾中:●uC-CPU文件夾里是與CPU相關(guān)的文件?!駏C-Lib文件夾里是代替標(biāo)準(zhǔn)C庫的文件,如tolower(),memcpy(),rand()?!駏COS-III文件夾里的就是UCOSIII的源碼,包含了一些內(nèi)核功能模塊、中斷處理的任務(wù)代碼、信息處理代碼、信號量管理代碼、任務(wù)管理的代碼等?!馯COS-BSP文件夾放的是與單片機(jī)相關(guān)的板級支持包bsp.c和bsp.h?!馯COS-CONFIG文件夾里的則是一些配置文件。最終工程的UCOSIII目錄樹如下:圖4.8工程中UCOSIII目錄樹
4.3Stemwin圖形界面開發(fā)對于上位機(jī),可以進(jìn)行人機(jī)交互的界面是必不可少的。簡單的圖形界面開發(fā)我們可以直接繪畫2D圖形來模擬各種控件。但是如果需要用到比較復(fù)雜的交互方式,這種方法就會(huì)顯得很笨重,代碼很難編寫,而且這樣寫出的界面看上去也不美觀。這個(gè)時(shí)候我們就要到第三方的圖形軟件庫了,Cortex-A系列的一般用Qt來開發(fā)圖形界面,而Cortex-M系列一般用的是emwin、emXGUI、μCGUI這三種,這三種都是Segger公司推出的產(chǎn)物,其中Emwin更為常用與高級,而STemwin就是Segger授權(quán)給ST公司的版本,也是本設(shè)計(jì)最終決定使用的GUI。4.3.1Stemwin的移植跟移植UCOSIII一樣,都是先從官網(wǎng)下載源碼,Stemwin的源碼在ST官網(wǎng)上能找到。移植方式有無操作系統(tǒng)和帶操作系統(tǒng)兩種,區(qū)別就是一些文件是分OS版和非OS版的,還有就是GUIConf.h文件要進(jìn)行相應(yīng)的修改。在移植好UCOSIII的工程中將EMWIN源碼分好類放進(jìn)對應(yīng)的文件夾中:●Config文件夾存放的是emWin的配置文件。●Inc文件夾存放的是Stemwin函數(shù)的頭文件,包括各種控件。●Config文件夾存放的是emWin的配置文件,可更改分配給emwin的內(nèi)存大小、是否支持觸摸、是否使用操作系統(tǒng)等。圖4.9●OS文件夾存放的是使用操作系統(tǒng)或者裸機(jī)下的驅(qū)動(dòng)文件?!馤ib文件夾存放的就是StemWin的函數(shù)庫。在工程左側(cè)中添加emwin文件然后添加編譯路徑即可。最終工程的EMWIN目錄樹如下:4.10工程中EMWIN目錄樹4.3.2Stemwin的配套開發(fā)工具介紹GUIBuilderGUIBuilder是一個(gè)用于界面設(shè)計(jì)的輔助工具,通過可視化來方便人們對每個(gè)控件的布局,可以在上面完成添加EMWIN目前所有的控件,但是一些在里面只能做到部分屬性的設(shè)置,例如x、y坐標(biāo)以及高度寬度,對齊方式等。還有很多的的屬性,如標(biāo)題欄是否添加最大最小化按鈕,各控件使用什么皮膚,進(jìn)度條的左右顏色等都需要在代碼中添加。圖4.11GUIBuilder軟件界面界面做好之后保存后會(huì)生成一個(gè)c文件,C文件的大致結(jié)構(gòu)如下:控件資源ID分配每個(gè)控件都用一個(gè)ID來表示自己的身份以及確定自身在內(nèi)存中的地址位置。對話框資源表這個(gè)資源表是一個(gè)結(jié)構(gòu)體,描述了控件的類型、控件的ID、控件在界面中的起始坐標(biāo)、寬度高度、特殊參數(shù)等,相當(dāng)于這個(gè)界面的軀殼。會(huì)話回調(diào)函數(shù)這是這個(gè)c文件的靈魂,創(chuàng)建了軀殼之后,還得讓他活起來,即所有的控件動(dòng)作都是在這里執(zhí)行,而且除了位置和尺寸之外的屬性都是通過回調(diào)函數(shù)設(shè)置的,進(jìn)到回調(diào)函數(shù)之后就會(huì)有一個(gè)消息類型的分支選擇,判斷當(dāng)前的消息是需要重繪、定時(shí)器到時(shí)、初始化會(huì)話、窗口移動(dòng)還是控件消息通知等,分支會(huì)根據(jù)消息類型來執(zhí)行不同的動(dòng)作。創(chuàng)建會(huì)話資源表是軀殼,回調(diào)函數(shù)是動(dòng)作,兩者相互依賴,那么創(chuàng)建會(huì)話的意義就是把兩者結(jié)合起來。BmpCvtST如果要使用自己的位圖來代替原本的控件圖形來增加美觀就要用到這款用于轉(zhuǎn)化位圖的軟件,它其中一個(gè)功能是可以將一個(gè)bmp圖像文件轉(zhuǎn)成一個(gè)c文件。如圖4.12:圖4.12BmpCvtST軟件界面圖4.13生成的位圖數(shù)組圖4.14位圖屬性結(jié)構(gòu)體C文件中可以看到一個(gè)數(shù)組和一個(gè)結(jié)構(gòu)體,數(shù)組的每個(gè)元素就是這個(gè)位圖每個(gè)像素的顏色信息,例如這張位圖的像素是75*75,那么這個(gè)生成的數(shù)組長度就是75*75,shortint類型,共占用了11kb的內(nèi)存,因?yàn)檫@個(gè)數(shù)組時(shí)使用了const修飾,所以會(huì)把這個(gè)數(shù)組放進(jìn)flash中,不然的話就是存放在內(nèi)部sram了,上面說到精英的sram只有64K,如果不存放在flash中估計(jì)放四個(gè)這樣的數(shù)組程序就會(huì)崩潰了,這點(diǎn)很重要。結(jié)構(gòu)體則是記錄位圖的長度和寬度、顏色深度、位圖數(shù)據(jù)即上述提到的數(shù)組和RGB輸出格式。這里的RGB輸出格式使用的是RGB565,代表R5、G6、B5,共16位來描述一個(gè)像素點(diǎn)。5、智能家居系統(tǒng)上位機(jī)安防功能設(shè)計(jì)5.1初始化工作上電之后,系統(tǒng)首先對各資源進(jìn)行一次初始化,包括系統(tǒng)、串口、蜂鳴器、LED、LCD、按鍵、觸摸屏、USMART、內(nèi)存池、SRAM、SD卡、FATFS文件系統(tǒng)、人體紅外檢測模塊用的GPIOA_PIN5引腳、字庫最后初始化UCOSIII,然后把掛載SD卡與FLASH掛載到FATFS文件系統(tǒng)上即完成了初始化工作。5.2創(chuàng)建任務(wù)與啟動(dòng)任務(wù)所有任務(wù)如下:5.2.1TOUCH任務(wù)該任務(wù)主要就是一直掃描觸摸屏,并且將當(dāng)前觸摸屏數(shù)據(jù)(包括觸點(diǎn)坐標(biāo),觸點(diǎn)是按下狀態(tài)還是彈起狀態(tài)等)傳遞到GUI的其他函數(shù)中。voidtouch_task(void*p_arg){OS_ERRerr;while(1){GUI_TOUCH_Exec(); //接收觸摸屏信息//延時(shí)5msOSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);}}5.2.2CHECK任務(wù)定時(shí)發(fā)送AT指令給SIM900A來檢查GSM模塊是否連接有異常voidCHECK_task(void*p_arg)//定時(shí)對數(shù)據(jù)進(jìn)行一次檢測{OS_ERRerr;while(1){//判斷GSM模塊是否異常gsmStatus=sim900a_send_cmd("AT","OK",100)?STATUS_FAILED:STATUS_OK;//2秒檢測一次OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err);}}
5.2.3EMWIN任務(wù)這個(gè)就是創(chuàng)建GUI主界面的任務(wù),再根據(jù)選擇跳轉(zhuǎn)到不同的頁面來創(chuàng)建子會(huì)話最后在所選界面的回調(diào)函數(shù)中循環(huán)。voidemwin_task(void*p_arg){OS_ERRerr;GUI_CURSOR_Show();while(1){GUIMain(); //進(jìn)入主界面OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);}}圖5.1emwin任務(wù)所有的任務(wù)結(jié)合在一起就是一個(gè)完整的安防系統(tǒng),在沒有任何操作下,系統(tǒng)運(yùn)行的過程大致如下:系統(tǒng)時(shí)隔一定時(shí)間會(huì)進(jìn)行一次檢測,包括根據(jù)煙霧濃度判斷是否疑似發(fā)生火災(zāi),根據(jù)一氧化碳濃度判斷是否煤氣泄漏。而且當(dāng)有人嘗試破解門禁系統(tǒng),攝像頭會(huì)抓拍當(dāng)前畫面。當(dāng)上述任意一個(gè)事件發(fā)生時(shí),觸發(fā)報(bào)警:蜂鳴器鳴叫,報(bào)警燈閃爍,然后還會(huì)針對每個(gè)事件采取相應(yīng)的措施,在離家模式與GSM模塊通訊情況良好下,系統(tǒng)還會(huì)給指定手機(jī)號碼發(fā)送報(bào)警消息。
5.3界面介紹5.3.1安防-主界面可以跳轉(zhuǎn)到其他界面。圖5.2安防系統(tǒng)主界面5.3.2安防-設(shè)置界面1.可以設(shè)置接收報(bào)警信息和傳感器數(shù)據(jù)信息的手機(jī)號碼。2.可以關(guān)閉/開啟GSM功能。3.可以設(shè)置指紋解鎖的安全等級。4.可以設(shè)置密碼與指紋解鎖次數(shù)限制。5.可以設(shè)置密碼與指紋解鎖次數(shù)用完后的等待時(shí)間。圖5.3設(shè)置界面5.3.3安防-指紋解鎖門禁界面這是設(shè)置在大門外的界面,提示指紋解鎖成功還是失敗,重試機(jī)會(huì),還有添加指紋,刪除指紋等功能。手指破損或者出汗、弄臟手導(dǎo)致無法使用指紋時(shí)還可以選擇通過輸入數(shù)字密碼的方式進(jìn)行解鎖。由于該界面是獨(dú)立的,所以通過按鈕key0在主界面與門禁界面之間切換。密碼鎖部分有0-9數(shù)字鍵,DEL退格鍵,CLR清0鍵,確認(rèn)鍵,還可以更改密碼,添加或刪除指紋。圖5.4指紋解鎖門禁界面5.3.4安防-信息監(jiān)測界面在此界面下可以監(jiān)視煙霧的濃度、一氧化碳的濃度以及是否有人闖入等,可以選擇在家/離家模式,可以發(fā)送當(dāng)前數(shù)據(jù)至目標(biāo)手機(jī)號,可以查看當(dāng)前GSM通訊情況以及信號強(qiáng)弱。還可以在此界面切換到攝像頭監(jiān)控界面。圖5.5信息監(jiān)測界面5.3.5安防-攝像頭監(jiān)控界面攝像監(jiān)控界面可以左半部分看到當(dāng)前門外攝像頭畫面,右半部分可以看到手動(dòng)拍照或者報(bào)警時(shí)抓拍的照片,可以通過按下key1或者key_up鍵來查看上/下一張照片。按下key0則可以實(shí)現(xiàn)拍照功能。圖5.6攝像頭監(jiān)控界面5.3.6安防-手動(dòng)開關(guān)界面在此界面可以進(jìn)行手動(dòng)控制下位機(jī)的動(dòng)作。例如打開關(guān)閉水泵、排氣風(fēng)扇、報(bào)警燈、報(bào)警蜂鳴器等。圖5.7手動(dòng)開關(guān)界面5.4安防系統(tǒng)5.4.1傳感器信息監(jiān)測設(shè)計(jì)上位機(jī)與下位機(jī)通過WIFI通訊,如何通訊不作過多介紹,這里主要說明接收到從下位機(jī)傳來的數(shù)據(jù)后怎么處理,接收完所有的數(shù)據(jù)后,放到一個(gè)數(shù)組里,開始解析這個(gè)數(shù)組從而獲取每個(gè)傳感器的值,然后再判斷每個(gè)值是否有異常,有異常則發(fā)送相應(yīng)的命令控制下位機(jī)執(zhí)行關(guān)閉煤氣閥門,打開水閥等動(dòng)作。通過與組員交流,最終約定好的通訊協(xié)議為:下位機(jī)發(fā)送的數(shù)據(jù)以兩個(gè)字母+4為數(shù)字的方式表示一個(gè)傳感器的值。初步處理下位機(jī)發(fā)送的數(shù)據(jù)后得到類似圖5.8中的SBUF_RECEIPT數(shù)組。圖5.8getSensorData()處理后的數(shù)組SBUF_RECEIPT數(shù)組中的TP2618說明此時(shí)溫度為26.18℃,SM6752則是此時(shí)煙霧傳感器的值是67.52。代碼實(shí)現(xiàn)如下:圖5.9.1parseArray()函數(shù)代碼1圖5.9.2parseArray()函數(shù)代碼2傳入的參數(shù)data就是從下位機(jī)接收的原始數(shù)據(jù),即getSensorData的返回值,本程序中提供了一個(gè)接口,實(shí)現(xiàn)由小組里面負(fù)責(zé)通訊部分的組員完成。char*getSensorData(void){… returnSBUF_RECEIPT;}解析完之后,parseArray()函數(shù)最后返回一個(gè)結(jié)構(gòu)體指針,結(jié)構(gòu)體如圖5.10:圖5.10sensorData_t結(jié)構(gòu)體與sensorType_s枚舉即獲得了每個(gè)傳感器的值,接下來就是判斷數(shù)據(jù)是否異常,這個(gè)就是checkSensorDataStatus()函數(shù)的工作了,它首先調(diào)用了parseArray(getSensorData())獲取每個(gè)傳感器的值與狀態(tài),然后做判斷檢測是否發(fā)生異常,根據(jù)不同的異常類型返回不同的值。圖5.11.1checkSensorDataStatus()函數(shù)代碼1圖5.11.2checkSensorDataStatus()函數(shù)代碼2返回值以通過對每個(gè)bit置位來表示哪些數(shù)據(jù)異常,哪些正常。當(dāng)一氧化碳濃度過高時(shí),第1bit置1;當(dāng)煙霧值過高時(shí),第2bit置1;當(dāng)有人非法破解門禁系統(tǒng)時(shí),第3bit置1,例如最后如果返回6,轉(zhuǎn)換為二進(jìn)制即00000110則說明有人入侵并且還發(fā)生了火災(zāi)。如果cmd不是0,系統(tǒng)會(huì)調(diào)用sendCommand()給下位機(jī)發(fā)送相應(yīng)的指令。/* 發(fā)送命令給下位機(jī)bit0:報(bào)警燈WLbit1:排氣風(fēng)扇FSbit2:報(bào)警器BPbit3:水閥SB */intsendCommand(intcmd){charsendData[30];sprintf(sendData,"WL%dFS%dBP%dSB%d\r\n",\(cmd<<0)?1:0,\(cmd<<1)?1:0,\(cmd<<2)?1:0,\(cmd<<3)?1:0\);send(sendData); //發(fā)送數(shù)據(jù)if(strstr(getSensorData(),"OK")) //接收到應(yīng)答OK,發(fā)送成功return1;else //發(fā)送失敗return0;}sendCommand()函數(shù)的參數(shù)代表的是需要發(fā)送的命令,例如煤氣泄漏時(shí),需要進(jìn)行的措施是打開排氣風(fēng)扇,且報(bào)警燈與報(bào)警蜂鳴器也需要工作,那需要發(fā)送的命令就是00000111,即0x07。經(jīng)過該函數(shù)處理,則發(fā)送給下位機(jī)的數(shù)據(jù)就是[WL1FS1BP1SB0],下位機(jī)接收到后就會(huì)進(jìn)行相應(yīng)的操作。這是由于監(jiān)測到數(shù)據(jù)異常自動(dòng)調(diào)用該函數(shù)控制下位機(jī)的。除此之外,在手動(dòng)控制界面會(huì)根據(jù)按下按鈕之后調(diào)用sendCommand()函數(shù)控制下位機(jī)。把上述所有的函數(shù)結(jié)合在一起就是一個(gè)完整的監(jiān)測循環(huán)了,這個(gè)循環(huán)涉及到三個(gè)系統(tǒng),再簡單概括一下這些函數(shù)的功能:getSensorData()函數(shù)負(fù)責(zé)接收下位機(jī)傳來的數(shù)據(jù),parseArray()函數(shù)負(fù)責(zé)將接收到的數(shù)據(jù)轉(zhuǎn)為對應(yīng)結(jié)構(gòu)體成員變量值,這兩個(gè)函數(shù)都屬于交互系統(tǒng)的范疇。CheckSensorDataStatus()函數(shù)負(fù)責(zé)分析每個(gè)傳感器的變量值是否有異常,異常則在返回值反映哪些數(shù)據(jù)異常,該函數(shù)屬于監(jiān)控系統(tǒng)的范疇。監(jiān)測到數(shù)據(jù)異常了,就肯定得通知和進(jìn)行緊急處理,通知有聲光報(bào)警通知和GSM短信通知,緊急處理則是發(fā)送對應(yīng)命令來控制下位機(jī)作相應(yīng)動(dòng)作,由sendCommand負(fù)責(zé)發(fā)送,既屬于報(bào)警系統(tǒng)也屬于交互系統(tǒng)范疇。GSM報(bào)警設(shè)計(jì)5.4.2小節(jié)會(huì)詳細(xì)說明。邏輯圖如下:圖5.12傳感器信息監(jiān)測邏輯5.4.2報(bào)警系統(tǒng)-GSM短信通知設(shè)計(jì)在程序中添加GSM模塊相關(guān)代碼前先用串口調(diào)試助手調(diào)試一下,了解GSM下的常用AT命令,由于本設(shè)計(jì)只用到了GSM的短信功能,所以只介紹短信相關(guān)的AT命令,首先簡單介紹一下AT指令,AT即Attention,AT指令集是TE或DTE發(fā)送至TA或DCE的。通過TA,TE發(fā)送AT指令來控制移動(dòng)臺的功能。AT指令在手機(jī)通訊中起著重要的作用,能夠通過AT指令控制手機(jī)進(jìn)行撥叫、按鍵控制、GPRS、收發(fā)信息等許多行為。調(diào)試狀態(tài)下,ATK-SIM900A與STM32的硬件連接方式:RXDUSART1的STXDTXDUSART1的SRXD常用的AT指令:●AT輸入該命令后回應(yīng)OK說明通訊成功●AT+CSQ可查詢信號質(zhì)量●AT+CNUM可查詢SIM卡槽內(nèi)的手機(jī)號●AT+CNMI=2,1可設(shè)置收到新消息后開啟串口打印●AT+CMGF=1設(shè)置短消息模式為為文本模式●AT+CSCS="GSM"設(shè)置為GSM字符集●AT+CMGR=n用于讀取SIM卡位置n的信息?!馎T+CLDTMF=2,"x"用于播放按鍵語音●AT+CMGS="手機(jī)號碼"輸入完命令后進(jìn)入一個(gè)編輯短信的狀態(tài),“>”后輸入需要發(fā)送的消息,最后發(fā)送一個(gè)結(jié)束標(biāo)志(16進(jìn)制0x1a)來結(jié)束發(fā)送狀態(tài)。了解這些命令的用法之后我們就知道程序要怎么編寫了,只不過剛剛調(diào)試是用PC發(fā)送命令給ATK-SIM900A,現(xiàn)在將PC換成開發(fā)板而已。程序中是每次發(fā)送短信都是通過調(diào)用sendMsg()函數(shù)來實(shí)現(xiàn)的,該函數(shù)首先發(fā)送一次AT指令檢查GSM模塊運(yùn)行狀態(tài),給了5次重試機(jī)會(huì),收到期待應(yīng)答”O(jiān)K”后輸出目標(biāo)手機(jī)號碼的語音,一位一位通過usart3串口發(fā)送給SIM900A,這一步其實(shí)也可以沒有,但是有語音就能很直觀的知道正在發(fā)短信了。發(fā)送發(fā)送短信指令A(yù)T+CMGS="手機(jī)號碼"指令后如果收到期待應(yīng)答">"即等待輸入狀態(tài)后,就把短信內(nèi)容與結(jié)束符0x1A以unicode編碼格式通過usart3串口發(fā)送至SIM900A,SIM900A如果回應(yīng)+CMGS:一串?dāng)?shù)字,則說明發(fā)送成功了。當(dāng)接收到+CMGS:加一串?dāng)?shù)字說明發(fā)送成功當(dāng)接收到+CMGS:加一串?dāng)?shù)字說明發(fā)送成功圖5.13發(fā)送命令與應(yīng)答圖5.14成功接收到短信圖5.15.1SendMsg()函數(shù)代碼1圖5.15.2SendMsg()函數(shù)代碼2圖5.16調(diào)用SendMsg()函數(shù)程序中使用到這個(gè)模塊的地方有:在信息監(jiān)測界面中,會(huì)定時(shí)接收下位機(jī)傳來的傳感器數(shù)據(jù)與檢測人體紅外傳感器,發(fā)現(xiàn)數(shù)據(jù)異常時(shí)當(dāng)系統(tǒng)開啟了GSM服務(wù)就會(huì)發(fā)送相應(yīng)的報(bào)警信息。在信息監(jiān)測界面中,點(diǎn)擊upload按鈕之后,當(dāng)前傳感器信息就會(huì)作為該函數(shù)的信息內(nèi)容參數(shù)傳入,發(fā)送至目標(biāo)手機(jī)號。圖5.17報(bào)警通知與傳感器數(shù)據(jù)查看圖5.18短信發(fā)送的實(shí)現(xiàn)過程5.4.3門禁系統(tǒng)設(shè)計(jì)指紋鎖驗(yàn)證指紋模塊主要完成的是指紋特征的采集、比對、存儲、刪除等功能。與GSM模塊的設(shè)計(jì)方法一樣,在加進(jìn)程序前,先用串口調(diào)試助手調(diào)試一下,研究它的通訊協(xié)議與命令。ATK-LB301與STM32的通信協(xié)議如表5.1與表5.2。表5.1STM32發(fā)送給模塊的信息格式字節(jié)數(shù)2字節(jié)4字節(jié)1字節(jié)2字節(jié)1字節(jié)不定2字節(jié)名稱包頭芯片地址標(biāo)識符包長度指令參數(shù)n校驗(yàn)和內(nèi)容0xEF010xFFFFFFFF0x01NCmd…和表5.2模塊發(fā)送給STM32的的信息格式字節(jié)數(shù)2字節(jié)4字節(jié)1字節(jié)2字節(jié)1字節(jié)不定2字節(jié)名稱包頭芯片地址標(biāo)識符包長度確認(rèn)碼參數(shù)n校驗(yàn)和內(nèi)容0xEF010xFFFFFFFF0x07NCmd…和◆包頭:協(xié)議規(guī)定的數(shù)據(jù)頭◆芯片地址:芯片的物理地址,默認(rèn)0xffffffff◆包標(biāo)識:0x01表示STM32給模塊發(fā)送指令;0x07表示模塊給STM32發(fā)送指令;0x02表示數(shù)據(jù)包,且后續(xù)還有數(shù)據(jù)包;0x08表示最后一個(gè)數(shù)據(jù)包,即結(jié)束包;◆包長度N:指令、參數(shù)、校驗(yàn)和總字節(jié)數(shù);◆指令:代表不同的操作;◆參數(shù):指令不同時(shí)參數(shù)也不同,代表的意義也不同;◆校驗(yàn)和:是從包標(biāo)識至參數(shù)n所有字節(jié)之和;表5.3常用確認(rèn)碼含義接下來具體看一個(gè)實(shí)例,獲取圖像的過程:先發(fā)送報(bào)頭0xef01,發(fā)送默認(rèn)地址0xFFFFFFFF,包標(biāo)識0x01代表上位機(jī)發(fā)送給模塊,包的長度0x0003,驗(yàn)證指紋的指令碼:0x01,校驗(yàn)和為包標(biāo)識到參數(shù)的和,即1+3+1=0x00005。最后需要發(fā)送的數(shù)據(jù)就是EF01FFFFFFFF010003010005圖5.19使用調(diào)試助手調(diào)試指紋模塊的示例應(yīng)答包的數(shù)據(jù)為EF01FFFFFFFF07000302000C,即確認(rèn)碼為0x02,說明獲取圖像失敗,當(dāng)我把手指貼上去的時(shí)候應(yīng)答包變成了EF01FFFFFFFF07000300000A,即確認(rèn)碼為0x00,說明獲取圖像成功。其他的功能類似,通過查閱手冊即可知道每個(gè)指令的含義。既然知道了命令的格式與通訊協(xié)議,接下來就可以編寫代碼了。還是以獲取圖像這個(gè)功能為例:u8PS_GetImage(void) //EF01FFFFFFFF010003010005{u16temp;u8ensure;u8*data;SendData(0xEF);//發(fā)送報(bào)頭SendData(0x01);//發(fā)送報(bào)頭SendData(0xEF);//命令包標(biāo)識SendData(0xFF);//發(fā)送地址高16位SendData(0xFF);//發(fā)送地址低16位temp=0x01+0x03+0x01;SendData(temp);//發(fā)送校驗(yàn)和data=WaitBack(500);//等待應(yīng)答if(data) //若有應(yīng)答ensure=data[9]; //應(yīng)答包的第9位是確認(rèn)碼else //無應(yīng)答ensure=0xff; memset(USART2_RX_BUF,0,USART2_RX_STA&0x7fff);//數(shù)據(jù)清0USART2_RX_STA=0;returnensure;}然后就可以判斷返回值了,返回0xff,說明沒有應(yīng)答,連接失敗,返回0則說明識別到有指紋,獲取圖像成功,返回0x02說明沒有掃描到指紋??梢钥闯鰜泶a部分很簡單,只需要發(fā)送對應(yīng)的指令再接收應(yīng)答即可,其他功能的函數(shù)也是如此。在指紋解鎖門禁界面中,有指紋與密碼兩種解鎖方法,兩種都有獨(dú)立的重試次數(shù),與獨(dú)立的等待時(shí)間,當(dāng)指紋識別錯(cuò)誤超過5次,就會(huì)禁用指紋10分鐘,為了方便演示,設(shè)置為10秒。指紋禁用期間只能使用密碼鎖,密碼長度為6-12,也是默認(rèn)只有5次重試機(jī)會(huì),機(jī)會(huì)用盡后禁用密碼10分鐘。同樣,為了方便演示,默認(rèn)設(shè)為10秒,這些配置都可以去設(shè)置中心設(shè)置。按下key0后就會(huì)切換為指紋解鎖門禁界面,關(guān)于指紋解鎖的代碼邏輯:在該界面中設(shè)置了定時(shí)器,每隔一段時(shí)間會(huì)自動(dòng)調(diào)用一次回調(diào)函數(shù),驗(yàn)證指紋的方法有兩種,自動(dòng)驗(yàn)證與分布式指令驗(yàn)證。經(jīng)過多次實(shí)驗(yàn)發(fā)現(xiàn),使用自動(dòng)驗(yàn)證方法的時(shí)候兩次掃描指紋間隔的時(shí)間超過200ms指紋識別率就會(huì)大大降低,再高一點(diǎn)就完全無法識別到指紋了,后來發(fā)現(xiàn)采用分布式指令驗(yàn)證的方法就算時(shí)間差1s也沒關(guān)系,定時(shí)器的時(shí)間間隔越短,界面就會(huì)越卡。所以我們希望肯定是在不影響其他操作的情況下定時(shí)器間隔可以盡可能的長。定時(shí)器時(shí)間到了之后,首先判斷是否在等待時(shí)間內(nèi),如果不是則開始掃描指紋,沒有掃描到就沒有后續(xù)的判斷,等待下一個(gè)周期到來。若有識別到指紋,則與本地指紋庫作對比,匹配到有則獲取其指紋ID與匹配值,且顯示認(rèn)證通過,否則重試次數(shù)減一,若減完之后次數(shù)為0了,則禁用指紋一段時(shí)間。圖5.20使用指紋驗(yàn)證邏輯圖密碼鎖驗(yàn)證輸入框顯示窗口顯示的信息是inputTmp數(shù)組的內(nèi)容,當(dāng)按下數(shù)字鍵0-9的時(shí)候,由于它們的ID我是連續(xù)分配的,所以遍歷數(shù)字按鍵0-9的ID然后再對比當(dāng)前界面按下的按鍵ID就可以在當(dāng)前inputTmp數(shù)組下追加數(shù)字字符;按下CLR鍵則是清空inputTmp數(shù)組,也就起到了清零的作用了;按下DEL鍵,則是令數(shù)組’\0’前的字符也變成’\0’即可;按下確認(rèn)鍵,就會(huì)根據(jù)當(dāng)前的輸入模式對inputTmp數(shù)組進(jìn)行分析。密碼解鎖驗(yàn)證是在MODE_ULVERIFY模式下通過按下確認(rèn)鍵開始驗(yàn)證的,首先判斷數(shù)組長度是否為6-12位,輸入有誤則提示重新輸入,不算在重試次數(shù)里,當(dāng)密碼錯(cuò)誤減一次重試機(jī)會(huì),當(dāng)次數(shù)為0則禁用密碼鎖一段時(shí)間,否則提示剩余次數(shù),輸入密碼正確后提示驗(yàn)證成功。圖5.21使用密碼鎖驗(yàn)證邏輯圖更改密碼按下更改密碼后首先提示輸入舊密碼,mode值變?yōu)镸ODE_CPVERIFY,同樣計(jì)入重試次數(shù),首先也是先判斷長度是否在6~12位,當(dāng)密碼驗(yàn)證成功則提示輸入新密碼,mode值變?yōu)镸ODE_SETPWD,輸入長度正確的新密碼即可。圖5.22更改密碼邏輯圖添加指紋添加指紋也是要先驗(yàn)證密碼,驗(yàn)證成功之后就開始連續(xù)采集4次指紋,將它們合成一個(gè)模板。之后輸入一個(gè)有效的ID指紋就添加成功了。圖5.23添加指紋邏輯圖按下添加指紋后首先提示輸入密碼驗(yàn)證身份,此時(shí)mode值變?yōu)镸ODE_ADDFPVER,然后通過調(diào)用addFinPri()函數(shù)實(shí)現(xiàn)錄入指紋,該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是步驟,第二個(gè)參數(shù)是錄入指紋的ID。完成錄入指紋有兩個(gè)步驟,第一步是采集4次指紋并生成一個(gè)特征模板,第二步是給錄入的指紋分配一個(gè)ID。所以該函數(shù)需要調(diào)用兩次,第一次是驗(yàn)證成功后調(diào)用addFinPri(1,0xff)將識別的4次指紋合成一個(gè)模板,合成成功后mode值變成MODE_ADDFPID,輸入ID,按下確認(rèn)鍵后調(diào)用第二次addFinPri(2,ID)即完成了錄入指紋的操作。圖5.24添加指紋的函數(shù)實(shí)現(xiàn)addFinPri()刪除指紋刪除指紋則是驗(yàn)證成功后輸入需要?jiǎng)h除的指紋ID即可。圖5.25刪除指紋的代碼邏輯按下刪除指紋后首先提示輸入密碼驗(yàn)證身份,此時(shí)mode值變?yōu)镸ODE_DELFPVER,驗(yàn)證成功后通過調(diào)用delFinPri()函數(shù)實(shí)現(xiàn)刪除指紋,該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是需要?jiǎng)h除的指紋ID,第二個(gè)參數(shù)是刪除模式,0代表清空指紋庫,1代表刪除單個(gè)指紋。圖5.26刪除指紋的函數(shù)實(shí)現(xiàn)delFinPri()5.4.4門禁系統(tǒng)-人體紅外檢測該模塊使用都比較簡單,接通正負(fù)極與out引腳后當(dāng)傳感器檢測到人體紅外時(shí)out引腳就會(huì)輸出高電平,程序中只需要初始化與out引腳相連的pin腳,再讀取該引腳的高低電平即可。voidInfraredSensorInit(void) //使用完全獨(dú)立的GPIO_A5{GPIO_InitTypeDefGPIO_InitStructure;//使能PORTA時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用GPIOA5作為傳感器的輸出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//設(shè)置成上拉輸入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //上拉GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIO_A5}inthumanDetection(){//讀PINA_5return(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)?1:0);}可以看出人體紅外檢測的程序就是讀GPIO口電平,高電平則說明檢測到有人,返回真,否則返回假。程序中調(diào)用到這個(gè)函數(shù)的地方是傳感器信息監(jiān)測設(shè)計(jì)中的checkSensorDataStatus()函數(shù)。在程序中,并不是檢測到人就會(huì)報(bào)警,因?yàn)樵撃K是應(yīng)用在門禁系統(tǒng)中的,有效范圍是120°內(nèi)5m,有可能別人只是恰好路過而已,所以應(yīng)該是從檢測到人后開始計(jì)時(shí),2分鐘內(nèi)累計(jì)超過72秒時(shí)長監(jiān)測到人體活動(dòng),系統(tǒng)才會(huì)認(rèn)為有人在非法破譯密碼而報(bào)警,若2分鐘內(nèi)檢測人的時(shí)長沒有超過72秒則清空當(dāng)前累計(jì)時(shí)長,并等待下一次的計(jì)時(shí)。這些都是作為該函數(shù)的參數(shù)。為了方便演示設(shè)置為10秒內(nèi)有6秒監(jiān)測到人體活動(dòng)就報(bào)警持續(xù)5秒。圖5.27人體紅外檢測報(bào)警邏輯圖5.28人體紅外檢測報(bào)警代碼邏輯5.4.5攝像頭監(jiān)控設(shè)計(jì)在切換到攝像頭監(jiān)控界面后,我們可以看到門外的實(shí)時(shí)監(jiān)控畫面,每200ms調(diào)用一次checkSensorStatus()函數(shù)來監(jiān)測是否有人在門外逗留太長時(shí)間,如果2分鐘內(nèi)監(jiān)測到72秒有人體活動(dòng),就會(huì)開始報(bào)警,包括聲光報(bào)警可以有效嚇走非法破解門禁系統(tǒng)的人和GSM短信通知家人。而且攝像頭還會(huì)連續(xù)抓拍當(dāng)前監(jiān)控到的畫面存進(jìn)SD卡,也可以在該界面查看所有抓拍到的圖片。圖5.29攝像頭監(jiān)控設(shè)計(jì)邏輯6、調(diào)試圖6.1更改前手機(jī)號碼6.1設(shè)置中心-更改手機(jī)號碼圖6.2輸入新手機(jī)號碼并確認(rèn)圖6.3查詢更改后的目標(biāo)手機(jī)號6.2設(shè)置中心-更改門禁系統(tǒng)相關(guān)參數(shù)圖6.4設(shè)置好最大嘗試次數(shù)與等待時(shí)間在設(shè)置界面按照圖6.4設(shè)置后,切換到門禁系統(tǒng)界面如圖6.5發(fā)現(xiàn)安全等級,指紋與密碼的次數(shù)限制都與設(shè)置界面的對應(yīng)設(shè)置值一樣。圖6.5門禁系統(tǒng)界面6.3添加、驗(yàn)證指紋圖6.6添加指紋步驟1--驗(yàn)證身份圖6.7添加指紋步驟2--按壓指紋識別等待生成模板圖6.8添加指紋步驟3--輸入指紋ID圖6.9按壓指紋驗(yàn)證測試,錄入指紋成功6.4刪除指紋圖6.10刪除指紋步驟1--驗(yàn)證身份圖6.11刪除指紋步驟2—輸入指紋ID圖6.12刪除指定指紋成功6.5更改、驗(yàn)證密碼圖6.13更改密碼步驟1—輸入舊密碼驗(yàn)證圖6.14更改密碼步驟2--輸入新密碼(456789)圖6.15密碼更改成功圖6.16輸入新密碼后驗(yàn)證通過6.6傳感器信息監(jiān)測圖6.17用拖條模擬下位機(jī)傳來的數(shù)據(jù)進(jìn)行檢測報(bào)警當(dāng)GSM連接正常,且當(dāng)前為離家模式時(shí),監(jiān)測到數(shù)據(jù)異常后發(fā)送短信至目標(biāo)手機(jī)號。這里兩個(gè)數(shù)據(jù)異常,所以信息包含兩個(gè)WARNNING。圖6.18發(fā)送報(bào)警信息6.7在手動(dòng)控制界面控制下位機(jī)圖6.19按下報(bào)警蜂鳴器開關(guān),控制成功圖6.20打開報(bào)警器成功再按一次則是關(guān)閉蜂鳴器,此時(shí)關(guān)閉失敗,狀態(tài)仍為6.20所示圖6.21關(guān)閉報(bào)警器失敗6.8攝像頭監(jiān)控與抓拍圖片查看當(dāng)前人體紅外傳感器監(jiān)測到有人非法活動(dòng),報(bào)警并且對當(dāng)前畫面進(jìn)行捕捉。圖6.22報(bào)警抓拍當(dāng)前畫面圖6.23通過按下按鍵查看其他圖片7、總結(jié)7.1心得與收獲畢業(yè)設(shè)計(jì)是我們作為學(xué)生的最后一個(gè)環(huán)節(jié),是對我們所學(xué)知識的綜合測試,同時(shí)給了我們一個(gè)鍛煉獨(dú)立思考能力和團(tuán)隊(duì)協(xié)作能力的機(jī)會(huì),為我們即將踏上社會(huì)的道路做好鋪墊。在本次設(shè)計(jì)中,我學(xué)會(huì)了怎么使用STM32,這對我現(xiàn)在的ARM嵌入式學(xué)習(xí)幫助很大,因?yàn)槲椰F(xiàn)在的工作使用的嵌入式板內(nèi)核是Cortex-A系列的,而且我的崗位基本不接觸底層、驅(qū)動(dòng),我是負(fù)責(zé)寫應(yīng)用層面的程序的,所以對驅(qū)動(dòng)一竅不通,通過這段時(shí)間對STM32的學(xué)習(xí),我獲取了很多的驅(qū)動(dòng)方面的知識,知道如何通過USART串口與其他的外設(shè)通訊,也學(xué)會(huì)了LCD,紅外傳感器,GSM模塊,指紋模塊等外設(shè)的原理與使用方法。還學(xué)會(huì)EMWIN的GUI設(shè)計(jì),為即將學(xué)習(xí)的ARM–QTE嵌入式圖形界面開發(fā)學(xué)習(xí)打好了基礎(chǔ)。我還學(xué)會(huì)了新的操作系統(tǒng),有了ARM-Linux操作系統(tǒng)的基礎(chǔ),學(xué)習(xí)UCOSIII個(gè)人感覺還是比較容易理解的。7.2設(shè)計(jì)過程遇到的難題與不足7.2.1關(guān)于界面制作的選擇對于沒有接觸過的事物不是一開始就能找對方法的,至少要經(jīng)歷幾次的失敗,才能找到正確的打開方式。因?yàn)橹皬膩頉]接觸過STM32,所以一開始以為STM32能做的事情很少。一開始打算將用2D繪畫,就是通過在LCD上畫直線,畫圓來形成一個(gè)圖形界面。畫了幾天原來可以在LCD上放圖片,然后就想著用一個(gè)圖片作為一個(gè)控件來形成一個(gè)界面。又?jǐn)[了幾天圖片發(fā)現(xiàn)emWinGUI可以用在STM32上,不過需要跑系統(tǒng),我就花了幾天時(shí)間學(xué)習(xí)了UCOSIII,又花了幾天時(shí)間研究emWinGUI。隨著對emWin的了解越來越深入,由于發(fā)現(xiàn)了控件的換膚功能,界面比一開始美觀了不少,也對一些問題進(jìn)行了優(yōu)化,起初不熟悉emwin的刷新機(jī)制,只知道只有發(fā)生TOUCH事件才會(huì)進(jìn)入一次回調(diào)函數(shù),那導(dǎo)致的問題就是只有按下去了,界面才會(huì)刷新,里面的數(shù)據(jù)才會(huì)改變,這個(gè)問題很致命,后來慢慢熟悉了它的刷新機(jī)制,利用emwin自帶的定時(shí)器功能定時(shí)刷新界面,還有一個(gè)很致命的問題就是在界面的切換問題,在創(chuàng)建了一個(gè)會(huì)話之后如果要切換到另一個(gè)會(huì)話,如果采用關(guān)閉該會(huì)話后創(chuàng)建另一個(gè)會(huì)話的方式來切換界面,再多次的切換過程中就會(huì)卡死,目前還不知道怎么關(guān)閉會(huì)話的時(shí)候完全的釋放當(dāng)前會(huì)話所有資源,所以就只能隱藏當(dāng)前會(huì)話,然后創(chuàng)建另一個(gè)會(huì)話,當(dāng)想回到之前的會(huì)話的時(shí)候就點(diǎn)擊對大化按鈕來達(dá)到切換界面的效果。但是兩三個(gè)界面還好,再多幾個(gè)這種方法也會(huì)造成程序卡死。所以這個(gè)也是接下來待優(yōu)化的問題之一。7.2.2關(guān)于GSM模塊的問題雖然sendMsg()這個(gè)函數(shù)很簡單,但是編寫、優(yōu)化這個(gè)函數(shù)我卻花了幾天時(shí)間,其中有幾天都在找各種各樣的bug,例如死循環(huán)在一個(gè)地方跳不出來、發(fā)送不了中文內(nèi)容、在通訊良好的情況下無法接收應(yīng)答等,這些問題再一次讓我感受到了上班時(shí)候那種找一個(gè)小小的bug找一天的恐懼。因?yàn)橹暗亩绦艃?nèi)容和手機(jī)號碼都是寫死的,不是現(xiàn)在是用參數(shù)來決定,所以每次調(diào)用這個(gè)函數(shù)都先清空這個(gè)結(jié)構(gòu)體,后面再賦值,后來改成使用參數(shù)之后這一句沒刪掉,導(dǎo)致的結(jié)果就是把傳進(jìn)來的參數(shù)清空了,這個(gè)問題我都找了大半天,說明我在公司修煉得還不夠。這只是我修改的眾多bug里面小小的一個(gè),寫代碼可能只需要一星期,可是把所有bug找出來得花費(fèi)三倍的時(shí)間。保證了該函數(shù)可以使用后,最重要得就是優(yōu)化,因?yàn)樵摵瘮?shù)是在界面中調(diào)用的,所以在執(zhí)行發(fā)送指令的過程,不可避免界面會(huì)無法操作,那我能做的就是最大程度上縮短它的執(zhí)行時(shí)間。在函數(shù)里,任何的delay函數(shù)、以及最大等待應(yīng)答時(shí)間、重試次數(shù)都要通過一次次的調(diào)試找到最合適的值:delay小了不行,系統(tǒng)需要一定的時(shí)間反應(yīng);等待應(yīng)答時(shí)間小了不行,例如在發(fā)送完短信內(nèi)容的應(yīng)答是根據(jù)內(nèi)容長度決定的,內(nèi)容越長當(dāng)然等待也要越久,所以短信內(nèi)容也應(yīng)該簡潔明了;最大重試次數(shù)太少也不行,經(jīng)過模塊的獨(dú)立測試,發(fā)現(xiàn)它發(fā)短信不是一次就可以發(fā)送成功的,而是在信號質(zhì)量良好的情況下平均第3、4次才會(huì)發(fā)送成功。最后的優(yōu)化后測試,在信號質(zhì)量良好的情況下,8秒接收到短信;在連接異常的情況下不會(huì)進(jìn)入到該函數(shù)中;在準(zhǔn)備發(fā)送短信過程中關(guān)閉模塊,7秒后界面即可恢復(fù)操作。可不可以再優(yōu)化呢?我的設(shè)想是發(fā)送短信這個(gè)執(zhí)行過程單獨(dú)作為一個(gè)任務(wù),平時(shí)該任務(wù)是掛起的。當(dāng)任務(wù)需要發(fā)送短信的時(shí)候,會(huì)恢復(fù)該任務(wù),發(fā)送成功或者發(fā)送失敗都會(huì)再掛起自己。而在每次重試之后都會(huì)delay幾秒,從而暫時(shí)掛起自己這幾秒,讓界面刷新且可操作。等待延時(shí)時(shí)間到后再恢復(fù)自身,這樣界面就等8秒才能操作了。
參考文獻(xiàn)[1]唐義鋒王華東張蓉蓉于寶佺.秸稈沼氣制取管理系統(tǒng)的研究[J].中小企業(yè)管理與科技(下旬刊),2014(09):239-240.
[2]徐潔瑩劉云飛.基于STM32F107的圖像采集傳輸系統(tǒng)設(shè)計(jì)[J].山西電子技術(shù),2015(6):3-3.
[3]鄭晶晶賈宇飛周明亮.圖像采集系統(tǒng)的研究與設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2015(04):102-105.
[4]林雄生朱報(bào)開.ARMGPRS技術(shù)的家居實(shí)時(shí)安防系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(06):45-48.
[5]楊少波孫先松.基于STM32的雙通道壓電點(diǎn)膠閥控制系統(tǒng)[J].電腦知識與技術(shù),2019(17):292-293.
[6]馬木提·亞庫普任霞.基于射頻識別技術(shù)的汽車記錄儀的設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2015(17):30-32.
[7]翟常冬邊敦新沙曉李碩賢周涵徐晉.基于STM32的多功能智能護(hù)理機(jī)器人設(shè)計(jì)[J].集成電路應(yīng)用,2019(05):50-52.
[8]李丹陽朱賽.基于COM組件的LabWindowsCVI與Matlab混合編程[J].中國測試,2012(S1):109-112.
[9]陳勇.基于GSM的漢中市信息查詢平臺的設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2012(09):53-56.
謝辭本次畢業(yè)設(shè)計(jì)已經(jīng)接近的尾聲了,首先我要感謝我的指導(dǎo)老師曹彥玲,一開始根本沒有頭緒,不知從何下手,曹老師及時(shí)為我提出了寶貴的意見,為我指明方向,我的思路一下子就清晰了許多。每周還會(huì)定時(shí)檢查我們的進(jìn)度,讓我們簡單說一下這周做了什么,下一周準(zhǔn)備做什么從而讓我們的思路保持清晰,論文方面從一開始的選題再到最后論文格式的檢查與潤色,也都是在指導(dǎo)老師的悉心指導(dǎo)下完成的。在此向曹老師致以深深的謝意,老師您辛苦了!同時(shí),感謝我們畢設(shè)小組成員,幫助我我解決了許多技術(shù)性的問題,特別是組長,他給了我很多的靈感,幫助我捋清思路,是個(gè)負(fù)責(zé)任的好組長。我還要感謝學(xué)校、學(xué)院對我的培養(yǎng),為我們的學(xué)習(xí)創(chuàng)造良好的氛圍。一分耕耘一分收獲,相信走出校園后我能夠回報(bào)父母,回報(bào)學(xué)校,回報(bào)社會(huì)。最后,我要向百忙之中抽時(shí)間評審本文的各位專家、老師表示衷心的感謝!
附錄附錄1程序源碼主界面的源代碼staticvoid_cbDialog(WM_MESSAGE*pMsg){intNCode;intId;WM_HWINhItem;intkey;switch(pMsg->MsgId){ caseWM_TIMER: WM_RestartTimer(pMsg->Data.v,1000); //重啟定時(shí)器 key=KEY_Scan(0); if(key==KEY0_PRES) //按下key0 { BEEP=1; delay_ms(100); //按鍵反饋 BEEP=0; //結(jié)束當(dāng)前會(huì)話,進(jìn)入門禁系統(tǒng)界面 GUI_EndDialog(pMsg->hWin,0); Createatk301(); } break; caseWM_PAINT: GUI_SetBkColor(GUI_WHITE); GUI_Clear(); break; caseWM_INIT_DIALOG: …//初始化太長,省略caseWM_NOTIFY_PARENT:Id=WM_GetId(pMsg->hWinSrc);NCode=pMsg->Data.v;switch(Id){caseID_BUTTON_0://Notificationssentby'SensorCheck'switch(NCode){ caseWM_NOTIFICATION_RELEASED: BEEP=1; delay_ms(100); BEEP=0; GUISensorCheck(); //進(jìn)入信息監(jiān)測界面 break;}break;caseID_BUTTON_1://Notificationssentby'Config'switch(NCode){ caseWM_NOTIFICATION_RELEASED: BEEP=1; delay_ms(100); BEEP=0; GUIConfig(); //進(jìn)入設(shè)置界面 break;}break; caseID_BUTTON_2://Notificationssentby'control'switch(NCode){ caseWM_NOTIFICATION_RELEASED: BEEP=1; delay_ms(100); BEEP=0; GUIControl(); //進(jìn)入手動(dòng)控制界面 break; }}break;default:WM_DefaultProc(pMsg);break;}}WM_HWINCreateMain(void){WM_HWINhWin;hWin=GUI_CreateDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),_cbDialog,WM_HBKWIN,0,0);//創(chuàng)建1s定時(shí)器WM_CreateTimer(WM_GetClientWindow(hWin),0,1000,0);returnhWin;}voidGUIMain(void){ CreateMain(); while(1) { GUI_Delay(100); }}信息監(jiān)測界面源代碼externu8homeMode;GUI_BITMAPhome_tab[2]; //兩home圖標(biāo)msgInfo_t*sendMsgInfo=&g_msgInfo;staticsensorData_t*sensorData=NULL;//獲取當(dāng)前傳感器信息u8 warnType;staticvoid_cbDialog(WM_MESSAGE*pMsg){WM_HWINhItem;constvoid*pData;U32 FileSize;intNCode;intId;int i;char info[200];switch(pMsg->MsgId){caseWM_TIMER: WM_RestartTimer(pMsg->Data.v,200); //重啟定時(shí)器 GUIRefresh(pMsg);//優(yōu)化:定時(shí)刷新界面之前是TOUCH之后界面才會(huì)刷新 break;caseWM_PAINT: GUI_SetBkColor(GUI_WHITE); GUI_Clear(); break;caseWM_INIT_DIALOG: GUIRefresh(pMsg); sensorData=p_sensorData; //一開始隱藏報(bào)警信息 WM_HideWin(WM_GetDialogItem(pMsg->hWin,ID_TEXT_2)); WM_HideWin(WM_GetDialogItem(pMsg->hWin,ID_TEXT_3)); WM_HideWin(WM_GetDialogItem(pMsg->hWin,ID_TEXT_4)); WM_HideWin(WM_GetDialogItem(pMsg->hWin,ID_IMAGE_1));…//初始化太長,省略 caseWM_NOTIFY_PARENT:Id=WM_GetId(pMsg->hWinSrc);NCode=pMsg->Data.v;switch(Id) { caseID_BUTTON_0://Notificationssentby'Upload' switch(NCode) { caseWM_NOTIFICATION_RELEASED: BEEP=1; delay_ms(100); BEEP=0; //發(fā)信息前顯示發(fā)送中 //顯示接收手機(jī)號碼信息和當(dāng)前傳感器信息 for(i=ID_FRAMEWIN_0+1;i<=ID_IMAGE_1;i++) WM_Paint(WM_GetDialogItem(pMsg->hWin,i)); sprintf(info,"CO:%.2fSmoke:%.2f",\ sensorData->coConc,sensorData->smokeConc); #if_SUPPORT_GSM_ if(gsmStatus==STATUS_OK&&gsmService) sendMsgInfo=sendMsg((u8*)info,sendMsgInfo->phoneNumber); #endif //發(fā)信息后顯示發(fā)送失敗或成功刷新信息 for(i=ID_FRAMEWIN_0+1;i<=ID_IMAGE_1;i++) WM_Paint(WM_GetDialogItem(pMsg->hWin,i)); break; } break; caseID_BUTTON_1://Notificati
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化旅游產(chǎn)業(yè)發(fā)展合同
- 廣東省陽江市高新區(qū)2024-2025學(xué)年高一上學(xué)期1月期末地理試題 含解析
- 家電行業(yè)智能家電互聯(lián)互通方案
- 企業(yè)采購原材料采購協(xié)議
- 水電站建設(shè)運(yùn)營合作協(xié)議
- 旅游行業(yè)服務(wù)質(zhì)量保障協(xié)議
- 網(wǎng)絡(luò)科技行業(yè)數(shù)據(jù)安全使用承諾書
- 企業(yè)員工福利計(jì)劃與服務(wù)支持方案
- 私人教練健身訓(xùn)練合同協(xié)議
- 產(chǎn)品銷售代理合同集
- 健康科普知識
- 2025-2030年中國真空凍干蔬菜市場發(fā)展走勢及投資策略分析報(bào)告
- 中央2025年交通運(yùn)輸部所屬事業(yè)單位招聘261人筆試歷年參考題庫附帶答案詳解
- 云南省昆明市2025年中考語文模擬試卷六套【附參考答案】
- 中智集團(tuán)所屬中智國際商務(wù)發(fā)展限公司招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 【9語一?!?024年蚌埠市懷遠(yuǎn)縣中考一模語文試題
- 《芮城花椒栽培技術(shù)規(guī)程》
- 《零售基礎(chǔ)》課件-第一章 零售概述
- 專項(xiàng)10:文言文-【中職專用】2025年職教高考學(xué)業(yè)考試語文二輪專項(xiàng)突破(福建專用)
- DB45T 1097-2014 鋼管混凝土拱橋施工技術(shù)規(guī)程
- DB37T 5123-2018 預(yù)拌混凝土及砂漿企業(yè)試驗(yàn)室管理規(guī)范
評論
0/150
提交評論