




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
摘要本文基于STM32控制進(jìn)行的智能家居軟件系統(tǒng)開發(fā),通過對硬件的智能管理和通過esp8266Wi-Fi模塊接收到的控制指令對門禁、客廳臥室燈、窗簾、晾衣架等控制,或通過esp8266Wi-Fi模塊獲取相應(yīng)的溫濕度、可燃?xì)怏w、火焰檢測等信息。通過需求分析以及查閱相關(guān)書籍,選取使用STM32F407作為硬件控制芯片、選取SG90作為晾衣架、門控和窗簾控制的動力源、SW2812作為客廳智能燈、esp8266作為Wi-Fi通信模塊。采用模塊化編程的思想,基于C語言編寫的開源微控制實時操作系統(tǒng)UCOSIII編寫系統(tǒng)軟件,每一個模塊都會編寫一個對應(yīng)任務(wù)進(jìn)行自我管理,任務(wù)與任務(wù)之間通過消息隊列、互斥鎖等方法進(jìn)行同步互斥或者數(shù)據(jù)交換,使得系統(tǒng)有效的運行。關(guān)鍵詞:STM32F407,智能家居,UCOSIII,esp8266
DesignofEmbeddedSmartHomeSystemSystemdevelopmentandprogramdesignAbstractThispaperdevelopsthesmarthomesoftwaresystembasedonSTM32control.Itcontrolstheaccesscontrol,livingroomandbedroomlights,curtainsanddryingracksbyintelligenthardwaremanagementandthecontrolinstructionsreceivedthroughesp8266wi-fimodule,oritobtainsthecorrespondingtemperatureandhumidity,combustiblegas,flamedetectionandotherinformationthroughesp8266wi-fimodule.Throughdemandanalysisandconsultingrelevantbooks,STM32F407wasselectedasthehardwarecontrolchip,SG90asthepowersourceofdryingrack,doorcontrolandcurtaincontrol,SW2812asthelivingroomsmartlamp,esp8266asthewi-ficommunicationmodule.Byadoptingtheideaofmodularprogramming,thesoftwareprogramingbasedonClanguageandusingtheopensourceReal-timeoperatingsystemwhichisUCOSIIItoprograming.eachmodulehasacorrespondingtaskforself-management,throughthemessagequeuebetweentasksandtasks,themutexmethodssuchassynchronousmutexordataexchangewhichmakesthesystemruneffectively.Keywords:STM32F407,smarthome,UCOSIII,esp8266
目錄第一章緒論 11.1課題研究背景 21.2課題研究意義和目的 21.3智能家居國內(nèi)外研究狀況 21.4智能家居發(fā)展趨勢 21.4課題研究內(nèi)容及主要工作 21.5論文結(jié)構(gòu)安排 2第二章軟件系統(tǒng)整體設(shè)計方案 12.1系統(tǒng)軟件整體架構(gòu)設(shè)計 12.2軟件開發(fā)流程 32,3通信協(xié)議 52.4UCOSIII操作系統(tǒng) 62.5本章小結(jié) 6第三章智能家居系統(tǒng)的軟件實現(xiàn) 73.1開發(fā)工具與MCU 73.1.1KeilMDK 73.1.2STM32F407 73.2智能照明控制模塊 73.3無線Wi-Fi模塊 93.4窗簾模塊 113.5晾衣桿模塊 123.6環(huán)境檢測模塊 133.7安防模塊 143.8本章小結(jié) 16第四章軟件調(diào)試分析 184.1模塊編程調(diào)試 184.2結(jié)合實物調(diào)試 184.3本章小結(jié) 18第五章總結(jié)與展望 19參考文獻(xiàn) 20謝辭 21附錄1程序 22附錄2英文參考文獻(xiàn) 55附錄3文獻(xiàn)翻譯 62PAGE6第一章緒論1.1課題研究背景隨著我國的經(jīng)濟發(fā)展不斷提高,科學(xué)技術(shù)水平不斷與世界一流水平接近,生活在信息化社會的人們已逐漸意識到信息的重要性。隨著生產(chǎn)技術(shù)的不斷進(jìn)步,各大企業(yè)都投身于研究新產(chǎn)品,電子產(chǎn)品日漸豐富。豐富的電子產(chǎn)品無疑會給人們帶來更多便利,以及大大方便了人們的日常家居生活。因此,開發(fā)一套符合大眾需求的、能完善以及安全可靠的智能家居產(chǎn)品意義重大。在物質(zhì)生活基本滿足的生活水平下,現(xiàn)在的人們對于精神需求遠(yuǎn)大于物質(zhì)。關(guān)于居住環(huán)境,人們從以前單純的關(guān)注家居住宿環(huán)境已經(jīng)轉(zhuǎn)變成精神上更高層次的家居享受和體驗,甚至是體驗科技的體驗。例如,家居照明控制不再僅限于安裝在墻壁上的燈控開關(guān),而是希望通過無線的平板或者手機中的智能家居系統(tǒng)來控制,并且還可以根據(jù)個人喜好來智能調(diào)節(jié)燈光的顏色和亮暗,甚至還具備各種各樣的情景模式;家居中的電器也不是一個個體,電器的控制也不再獨立,而是作為智能家居整體的一部份,進(jìn)行系統(tǒng)控制。在信息化時代的在居住環(huán)境中,家居環(huán)境中的各種指數(shù)已經(jīng)越來越受到人們的重視[1],例如PM2.5值、室內(nèi)溫濕度值、甲醛指標(biāo)、光照強度等等,智能家居甚至能通過檢測這些環(huán)境變量以及結(jié)合用戶的個人習(xí)慣而做出相應(yīng)的設(shè)備控制。從古至今家居生活都會存在的一個問題,就是安全與防盜,而智能設(shè)備能更好的提高家居環(huán)境的安全性,通過科學(xué)技術(shù)的方式來對家居進(jìn)行安全和防盜的升級,無疑是最好的辦法。在現(xiàn)有產(chǎn)品方面,隨著嵌入式技術(shù)、物聯(lián)網(wǎng)技術(shù)和無線通信技術(shù)的發(fā)展,智能家居大眾化以不再是夢。很多的國內(nèi)企業(yè)都研發(fā)出了各種各樣的智能化設(shè)備,向小米、華為、阿里等科技巨頭都逐漸投身與智能家居設(shè)備研發(fā)行業(yè),比如米家、天貓精靈等。各種電商企業(yè)也不甘落后,例如智能電飯煲、智能冰箱等產(chǎn)品等。基本上每一個電商企業(yè)都具備了獨立研發(fā)智能家居設(shè)備的能力。但是大多數(shù)的廠家生產(chǎn)出來的不同產(chǎn)品也是相互獨立的,智能家居行業(yè)缺乏一個行業(yè)標(biāo)準(zhǔn)。隨著物聯(lián)網(wǎng)技術(shù)的出現(xiàn),這一問題也得到了解決,將智能家居設(shè)備接入互聯(lián)網(wǎng)[2],隨時查看家居環(huán)境中的狀態(tài)。因此,對于智能家居統(tǒng)一標(biāo)準(zhǔn)具有重大的意義。在智能家居技術(shù)方面,隨著單片機技術(shù)、軟件技術(shù)、無線技術(shù)以及射頻的快速發(fā)展,無疑為智能家居的研發(fā)提供了關(guān)鍵的技術(shù)支持。所以,基于STM32控制的家智能家居控制、檢測系統(tǒng)的研發(fā)具有很好的前景和很強的實用價值和商業(yè)價值。1.2課題研究意義和目的智能家居主要意義是給家居生活帶來便利,同時讓人享受科技帶來不一樣的家居體驗。雖然目前智能家居產(chǎn)品不斷增加,科技感越來越強,并且對家居的控制方式多樣化,但是大多是單獨的智能家居產(chǎn)品,或者通用的智能家居控制器,很少有一套完整的,集智能安防,家居控制于一體的智能家居終端操作系統(tǒng)。因此,設(shè)計一套完整的智能家居軟件系統(tǒng)非常有意義,也符合當(dāng)下的市場需求。本文研究的智能家居軟件系統(tǒng),是一套功能齊全,可擴展性強的智能家居軟件系統(tǒng),在家居安防方面能實時的進(jìn)行檢測可燃?xì)怏w和火焰的信息,以及對門禁的多重控制;在家居生活方面有各種家居設(shè)備的控制。這套智能家居軟件旨在滿足當(dāng)下消費者的需求,并且性價比高。1.3智能家居國內(nèi)外研究狀況1.3.1國內(nèi)發(fā)展?fàn)顩r我國的智能家居相對于外國起步比較晚,而且還沒有國家標(biāo)準(zhǔn),90年代后期,我國的智能小區(qū)才逐漸興起,上海、深圳和廣州等沿海城市是我國最早建設(shè)智能化住宅的城市,并且逐步的向各個內(nèi)陸城市發(fā)展。智能家居發(fā)展伊始,僅有非常少的國內(nèi)家電企業(yè)踏入智能家居的產(chǎn)品研發(fā)領(lǐng)域,并且隨著不斷的投入,逐漸的開發(fā)出具有自身品牌特色的智能家居產(chǎn)品。國家不斷深化改善融資環(huán)境,以及加大了對信息消費和財稅政策的支持等措施,直接促進(jìn)了電子信息消費市場迅猛的發(fā)展,智能家居產(chǎn)品在不斷的發(fā)展與更新?lián)Q代,軟件產(chǎn)業(yè)所支撐的服務(wù)水平在不斷提高以及電子幾處產(chǎn)業(yè)的創(chuàng)造重新能力在不斷的增強,這些信息電子與軟件產(chǎn)業(yè)的不斷發(fā)展都促進(jìn)國內(nèi)的智能家居產(chǎn)業(yè)發(fā)展帶。無論是新進(jìn)入智能家居領(lǐng)域的互聯(lián)網(wǎng)企業(yè),還是傳統(tǒng)的家電企業(yè)都對智能家居領(lǐng)域產(chǎn)生濃厚的興趣,都非常樂意去加入或研發(fā)智能家居產(chǎn)品,例如國內(nèi)有名的家電企業(yè)海爾公司,已經(jīng)加入和研究智能家居產(chǎn)品多年,現(xiàn)在的智能家居產(chǎn)品已經(jīng)是非常成熟了。同樣是家電企業(yè)的格力、美的和TCL等家電企業(yè)都紛紛加入到智能家居的行列中,并且都研發(fā)了各自的智能家居產(chǎn)品。像小米這樣的企業(yè)也著手與智能家居的研究,米家更是深受廣大用戶的喜愛,小米也比較注重智能家居行業(yè),并且已經(jīng)研究設(shè)計了非常多的智能家居產(chǎn)品,包括智能臺燈、智能電視、空氣凈化器、智能路由、智能吸塵器等一系列的產(chǎn)品,幾乎涉及家居生活的方方面面,小米的智能家居產(chǎn)品研究已經(jīng)非常的成熟了,自從小米公司入股美的電器公司以后,兩家不相干的企業(yè)不斷互補優(yōu)勢,在智能家居領(lǐng)域展現(xiàn)出了多種合作的模式,還有華為、阿里、百度也有做相應(yīng)的智能家居產(chǎn)品,阿里與百度研究的語音控制智能家電產(chǎn)品也比較火熱??梢钥闯鰢鴥?nèi)的智能家居發(fā)展前景猶如一匹黑馬,飛速發(fā)展。1.3.2國外發(fā)展?fàn)顩r美國作為智能家居的發(fā)源地,這些年來智能家居的發(fā)展更是無法想象。前些年世界首富比爾蓋茨耗時數(shù)年的時間建造了一棟世界一流的智能豪宅,該豪宅被稱為“未來之屋”,堪稱是智能家居的經(jīng)典之作。該豪宅設(shè)有各種環(huán)境和天氣傳感器,智能家居系統(tǒng)可通過檢測到的參數(shù)對室內(nèi)空氣等環(huán)境進(jìn)行智能調(diào)節(jié),控制室內(nèi)的溫度和通風(fēng)等。如果有人來訪,那么他們將會被會被分發(fā)一只小電子針,該電子針的作用就是定位,并且可根據(jù)來訪者的習(xí)慣或者需求對周圍環(huán)境進(jìn)行預(yù)先配置,如燈光喜好、習(xí)慣聽的音樂、最常開的可調(diào)溫度、濕度等,都可以電子針來進(jìn)行任意調(diào)節(jié)。踏入房間,系統(tǒng)會根據(jù)個人的偏好做出響應(yīng),如壁畫投影等。廁所里甚至安裝了人體檢測系統(tǒng),時刻監(jiān)測著人的身體狀況,若發(fā)現(xiàn)異常,會立即發(fā)出警報;該豪宅的地板甚至都具備智能化,通過壓力傳感器獲取數(shù)據(jù),預(yù)測人的行走目標(biāo)而提前做好準(zhǔn)備。國內(nèi)的智能家居發(fā)展飛快,國外也如此,因此智能家居的研究不能停。相反,應(yīng)該抓住發(fā)展機遇不斷向更高層次發(fā)展。很多新產(chǎn)品、新技術(shù)都會在美國誕生。在美國,智能家居的銷售和國內(nèi)還有很大的差別,智能家居產(chǎn)品不是天上的繁星,可望不可及;智能家居系統(tǒng)也不是完美的時裝表演,沒有任何瑕疵;智能家居的發(fā)展更不是一蹴而就[3]。1.4智能家居發(fā)展趨勢隨著互聯(lián)網(wǎng)技術(shù)的不斷提高和發(fā)展以及網(wǎng)絡(luò)通信技術(shù)和自動化控制技術(shù)的不斷進(jìn)步,智能化家居也已經(jīng)進(jìn)入一個飛速發(fā)展的時期。我國目前已經(jīng)成為了家電產(chǎn)品的出口大國,已是全球主要的供應(yīng)商,我國企業(yè)的技術(shù)水平與世界領(lǐng)先的技術(shù)水平保持同步發(fā)展,并且隨著人工智能的不斷發(fā)展和提高,新的技術(shù)不斷出現(xiàn),電子器件做的越來越微型化,這些現(xiàn)象都有極大的可能給智能家居行業(yè)帶來新的發(fā)展,新的機遇和脫胎換骨的改變,時時刻刻的促進(jìn)著這一行業(yè)的發(fā)展。智能家居就像一匹黑馬一般不斷的沖進(jìn)大眾的視野,對于大眾來說已經(jīng)一點都不陌生了。智能家居逐漸成為現(xiàn)代人們買房、裝修的熱點了。人們逐漸學(xué)會享受科技帶來的方便與安全。一直以來大叫都在兜售智能家居的概念,使大家覺得智能家居應(yīng)該里我們很遙遠(yuǎn),其實并不是。如今的智能家居已經(jīng)非常普遍了,它像長了腿一樣,一步又一步的走向原來元多的家庭,如現(xiàn)在的大城市中,甚至有些人認(rèn)為要是買了房子但是裝修的時候卻沒有智能家居會覺得非常落后,感覺更不上潮流?,F(xiàn)在許多高檔的樓盤以及豪華別墅等都或多或少的安裝了各種各樣的智能家居系統(tǒng)或設(shè)備。人們的生活質(zhì)量不斷提高對現(xiàn)有的家居環(huán)境的追求也提升到了另一個層次,對于家庭的舒適度的要求也不斷提高,甚至對住宅地都有更高的要求,人們買房也要看是否智能了。因此智能家居的發(fā)展只會越來越強,市場占有率會不斷提高。1.4課題研究內(nèi)容及主要工作本文通過對智能家居產(chǎn)品的特點以及發(fā)展趨勢等進(jìn)行分析,設(shè)計一款基本功能齊全、操作簡單、成本低廉的智能家居軟件系統(tǒng)。本文對智能家居軟件系統(tǒng)研究的主要內(nèi)容,主要包括一下幾個方面:研究基于STM32控制的智能家居系統(tǒng)設(shè)計的一些關(guān)鍵技術(shù)以及一些基本的概念。研究基于串口Wi-Fi模塊來實現(xiàn)無線界面與STM32智能家居系統(tǒng)的交互與控制。研究智能家居中智能燈的各種無線操作與控制,使其更加符合用戶對燈的偏好以及需求。研究智能控制窗簾,以及智能晾衣桿。研究智能家居安防的系統(tǒng)實現(xiàn),使家庭日常居住更安全。1.5論文結(jié)構(gòu)安排全文總共分為五章,各章節(jié)內(nèi)容安排如下:第二章:軟件系統(tǒng)的整體設(shè)計方案,這一章節(jié)主要是介紹該智能家居系統(tǒng)的整體設(shè)計方案,包括系統(tǒng)軟件的整體架構(gòu)設(shè)計、軟件的開發(fā)流程、無線通信的協(xié)議和采用的操作系統(tǒng)。第三章:智能家居系統(tǒng)的軟件實現(xiàn),這一章節(jié)主要是介紹了開發(fā)工具、MCU,以及如何設(shè)計軟件來實現(xiàn)模塊以及模塊化的控制,其中有智能照明控制模塊、Wi-Fi無線通信模塊、晾衣桿模塊、環(huán)境監(jiān)測模塊以及防盜模塊。第四章:調(diào)試分析,該章節(jié)主要介紹如何去調(diào)試各個模塊以及分析其結(jié)果的可靠性以及準(zhǔn)確性。第五章:總結(jié)與展望,這一章節(jié)是對該智能家居軟件系統(tǒng)設(shè)計過程的總結(jié)以及展望。
第二章軟件系統(tǒng)整體設(shè)計方案2.1系統(tǒng)軟件整體架構(gòu)設(shè)計 本文設(shè)計的智能家居系統(tǒng)主要是針對普通家庭使用的,其具有結(jié)構(gòu)簡單、體積小、便于安裝、網(wǎng)絡(luò)覆蓋面小、具有自己獨立的網(wǎng)絡(luò)、可擴展性強和價格低廉等特點,因此比較適用于普通家庭住宅,對于普通居民來說性價比也比較高。本文設(shè)計的智能家居系統(tǒng)以STM32F407芯片為基礎(chǔ)的核心板作為硬件控制平臺,STM32F407全天候24小時運行,時刻偵察各個硬件的狀態(tài)信息,及時、實時的匯報各個模塊硬件的工作狀況,從而做出相應(yīng)的硬件處理以及信息交互,而該智能家居的控制端則是通過中控平臺的可觸屏圖形界面進(jìn)行相應(yīng)的控制。本文主要對STM32F407的智能家居系統(tǒng)軟件進(jìn)行論述。 本智能家居操作系統(tǒng)的基本架構(gòu)如圖2.1所示,該系統(tǒng)的程序設(shè)計中采用的是目前應(yīng)用非常廣的微型實時操作系統(tǒng)——UCOSIII。UCOSIII系統(tǒng)具有非常多的優(yōu)勢,在本章第三小節(jié)詳細(xì)介紹。本智能家居系統(tǒng)主要分為一下幾個任務(wù):Wi-Fi無線數(shù)據(jù)處理任務(wù),該任務(wù)主要是用于接收并處理接收到的無線數(shù)據(jù)協(xié)議,是實現(xiàn)界面控制硬件模塊的關(guān)鍵,通過發(fā)送/接收自定義無線通信的協(xié)議,對接收到的信息進(jìn)行解析,從而對窗簾、燈、門、鎖等模塊進(jìn)行控制以及修改RFID門禁卡和密碼鎖密碼。我們采用的是esp8266Wi-Fi模塊,該模塊與芯片通過串口通信,該模塊支持AT指令,因此程序中主要是對串口進(jìn)行配置,然后通過發(fā)送AT指令設(shè)置Wi-Fi模塊的工作模式,例如可以連接到某個Wi-Fi熱點,并且通過UDP或TCP來連接目標(biāo)或者配置成TCP服務(wù)端來等待客戶端連接等,同時也可以將自己設(shè)置為Wi-Fi熱點,并且設(shè)置為UDP或者TCPServer等待客戶端連接。溫濕度檢測任務(wù),該任務(wù)的主要作用是經(jīng)過固定時間檢測溫濕度,并且將溫濕度封裝成有效協(xié)議,發(fā)送至界面程序,以便顯示室內(nèi)溫濕度;同時也把溫濕度值封裝成字符串通過消息隊列發(fā)送至OLED實時顯示。獨立看門狗管理任務(wù),該任務(wù)的主要作用是在程序跑飛后能夠及時的重啟程序,讓系統(tǒng)時刻有效的工作,而不是跑飛后就不能工作。獨立看門狗的工作原理是:在系統(tǒng)啟動后設(shè)置好看門狗的計數(shù)值,計數(shù)方式是向下計數(shù),當(dāng)計數(shù)值為0的時候就會觸發(fā)中斷,從而使程序進(jìn)行復(fù)位,也就是重啟,因此需要在計數(shù)值為0之前給獨立看門狗為食,也叫喂狗,當(dāng)程序跑飛的時候自然就不能喂狗了,從而實現(xiàn)了系統(tǒng)復(fù)位,保證的系統(tǒng)的可靠性,該部分軟件設(shè)計的思路也是。圖2.SEQ圖\*ARABIC1系統(tǒng)設(shè)計框架火焰檢測任務(wù),火焰檢測任務(wù)的作用是通過火焰?zhèn)鞲衅髂K的探頭來檢測周圍的環(huán)境,判斷是否存在火焰,并且火焰?zhèn)鞲衅髂K會時刻將檢測的模擬量發(fā)送至固定引腳,該引腳接收到模擬量后通過ADC將模擬量轉(zhuǎn)化成數(shù)字量,在程序中通過特定公式將數(shù)字來轉(zhuǎn)成電壓值,通過判斷電壓值變化從而確定是否有火災(zāi)發(fā)生??扇?xì)怏w檢測任務(wù),可燃?xì)怏w檢測的原理與火焰檢測基本,可燃?xì)怏w檢測時通過MQ2模塊,將模擬量發(fā)送至引腳,最后都是通過檢測最終的電壓進(jìn)行判斷結(jié)果。OLED實時信息顯示任務(wù),該任務(wù)會在0.96寸的屏幕上實時顯示時間、溫度、濕度和各種報警信息,OLED模塊與STM32芯片是通過I2C通信的。I2C又叫IIC,即Inter-IntegrateCircuit(集成電路總線),I2C是一種多向控制總線,在實際應(yīng)用中可支持多個支持I2C通信的設(shè)備同時連接到該總線下,每一設(shè)備都可以作為實時數(shù)據(jù)傳輸控制源。這種通信方式在寸土如金的集成芯片上極大的緩解了引腳不足的壓力。I2C有兩根總線一根為時鐘線,一根為可雙向傳輸數(shù)據(jù)的數(shù)據(jù)線。OLED的兩根線分別接到時鐘線與雙向數(shù)據(jù)線上。所有的I2C都接到同一總線數(shù)據(jù)不會混亂?答案是不會的,因為任何一個支持I2C通信的設(shè)備接在總線上都會有其唯一的一個地址,該地址是用于區(qū)別其他設(shè)備和傳輸數(shù)據(jù)的依據(jù)。密碼輸入處理任務(wù),該任務(wù)主要是用于檢測矩陣鍵盤,以及判斷密碼輸入完畢后是否正確,判斷完畢后再對電磁鎖和門控舵機模塊進(jìn)行相應(yīng)的控制,如果錯誤則將錯誤信息通過消息隊列發(fā)送至報警任務(wù)和OLED任務(wù)進(jìn)行處理和顯示。RFID卡檢測任務(wù),該任務(wù)是實時監(jiān)測RFID模塊是否有卡片在感應(yīng)范圍內(nèi),當(dāng)監(jiān)測到卡片,就會將結(jié)果以數(shù)據(jù)幀的形式發(fā)送給STM32,這個過程有兩個步驟:第一步,發(fā)送請求;第二步,防碰撞。RFID模塊發(fā)送請求成功后就會發(fā)送防碰撞命令,發(fā)送命令后就會返回一個防碰撞的數(shù)據(jù)中,其中就包含了卡號。然后匹配卡號是否正確再進(jìn)行相應(yīng)的操作控制。雨水檢測任務(wù),雨水檢測任務(wù)是通過對地稅檢測模塊的軟件編程控制,當(dāng)該模塊的pcb板檢測到水就會通過水的量轉(zhuǎn)化成數(shù)字量通過一個AO引腳發(fā)生出去,同時當(dāng)達(dá)到某一設(shè)定好的閾值后DO一腳就會輸出高電平,本系統(tǒng)是通過中斷捕捉高電平,然后設(shè)置標(biāo)志位給該任務(wù)去處理,處理完畢后清空標(biāo)志位。其中處理的代碼主要是用于控制晾衣架,以及發(fā)送下雨預(yù)警。蜂鳴器處理任務(wù),蜂鳴器處理任務(wù)處理了所有的報警信息和蜂鳴器控制以及系統(tǒng)交互。該任務(wù)通過讀取消息隊列的信息,對信息進(jìn)行判斷是什么類型的消息從而讓蜂鳴器發(fā)出不一樣的蜂鳴聲。2.2軟件開發(fā)流程本文的系統(tǒng)軟件開發(fā)流程如下圖2.2所示。首先要對智能家居系統(tǒng)軟件做需求分析,需求分析就是對我們小組對本智能家居系統(tǒng)的需求按軟件工程開發(fā)語言表達(dá)出來的過程。過程如:確定要解決的問題,建立軟件的邏輯模型,編寫需求規(guī)格說明書文檔。這個過程對于整個智能家居系統(tǒng)的開發(fā)有著關(guān)鍵的作用。需求分析的主要方法有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖和數(shù)據(jù)字典等方法。然后是確定系統(tǒng)的模塊功能,這一部分就是對本智能家居系統(tǒng)所具備的功能進(jìn)行篩選,分析和最終確定,這一步對后面軟件代碼的編寫具有重要的作。如果這一部分沒有確定并且在后期有所變動,那么在后期的代碼編寫的修改就會非常麻煩,甚至可能到至所有代碼重新編寫。本智能家居系統(tǒng)最終確定的模塊功能有雨水傳感器自動控制晾衣架模塊、手動控制晾衣架模塊、客廳智能彩燈控制、臥室燈PWM可調(diào)亮度控制、窗簾智能控制、密碼以及RFID卡開門、室內(nèi)溫濕度檢測、廚房可燃?xì)怏w檢測、廚房火焰檢測、獨立看門狗復(fù)位系統(tǒng)設(shè)置、Flash存儲用戶密碼以及卡號、時鐘設(shè)置、OLED實時顯示系統(tǒng)信息等功能。第三步就是確定系統(tǒng)設(shè)計框架,本文使用的是UCOSIII實時操作系統(tǒng),采用任務(wù)線程的方式對各個模塊進(jìn)行控制的設(shè)計框架;如圖2.3所示,主函數(shù)主要是初始化一個初始化任務(wù)和進(jìn)入任務(wù)調(diào)度,初始化任務(wù)負(fù)責(zé)把所有的任務(wù)進(jìn)行內(nèi)存、優(yōu)先級等配置。第四步就是對相關(guān)的模塊代碼進(jìn)行編寫,第四、五和六步是一個連續(xù)、不可分離的過程,對每一個模塊都是,編寫完畢后進(jìn)行編譯,然后下載調(diào)試,測試代碼是否有問題,保證模塊工作的可靠性。所有的測試均已正常,則軟件開發(fā)完畢。需求需求分析確定系統(tǒng)軟件設(shè)計框架編寫相關(guān)代碼確定系統(tǒng)模塊功能編譯代碼下載調(diào)試代碼是否所有功能調(diào)試正常?N軟件開發(fā)完成Y圖2.2系統(tǒng)軟件開發(fā)流程 mmain()函數(shù)初始化任務(wù)函數(shù)開始任務(wù)調(diào)度任務(wù)1任務(wù)2任務(wù)3任務(wù)n圖2.3任務(wù)線程邏輯2,3通信協(xié)議 本文設(shè)計的智能家居系統(tǒng)使用esp8266Wi-Fi模塊進(jìn)行通信,并且采取TCP/IP協(xié)議進(jìn)行通信。TCP/IP分層協(xié)議共有四層,分別是網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。TCP/IP并非指TCP和IP這兩種協(xié)議,IP、ICMP、TCP、UDP、TELNET、FTP以及HTTP等協(xié)議都屬于TCP\IP協(xié)議[7],TCP\IP協(xié)議又稱為網(wǎng)際協(xié)議群,泛指這一類的網(wǎng)絡(luò)協(xié)議。 本文的智能家居系統(tǒng)采用兩個esp8266Wi-Fi模塊,并且使用TCP通信協(xié)議,STM32中的Wi-Fi模塊作為TCP服務(wù)端Server,界面控制端的Wi-Fi模塊作為客戶端Client。除了各層的固定協(xié)議以外,我們設(shè)置了用戶自定義協(xié)議,即在發(fā)送或接受數(shù)據(jù)的時候以固定的格式進(jìn)行封裝或以固定方法進(jìn)行解析,每一條數(shù)據(jù)都嚴(yán)格按照我們商定好的協(xié)議來封裝和解析,若是接收到用戶自定義協(xié)議以外的數(shù)據(jù)將被忽視。并且自定義的通信協(xié)議能更有效的保護控制信息,若是通信數(shù)據(jù)被惡意截取,但是對方不了解我們對協(xié)議的定義,那將無法獲取該數(shù)據(jù)的實際信息。 本系統(tǒng)中的數(shù)據(jù)通信主要由三部分組成,前兩部分之間由空格隔開,第一部分是指的是操作的對象,第二部分也有幾部分組成,主要是包含操作對象有何種操作,并且做何種操作等信息。第二部分中的子部分由‘-’隔開。第三部分則是結(jié)束標(biāo)志“\r\n”?,F(xiàn)在以客廳燈的操作為例進(jìn)行介紹,“COLORRGB-xxx-xxx-xxx\r\n”,這句協(xié)議的意思是,操作對象是顏色,即客廳的智能彩燈;第二部分的第一小部分指的是通過RGB的方式來進(jìn)行控制顏色,后面的9個“x”代表的是三個0~255的指,后面三小部分則是控制的主要命令,也就是控制的最終結(jié)果?!癈OLOR[PATTERN]\r\n”而這一句協(xié)議的意思是操作對象依舊是客廳燈的顏色,其中第二部分中的中括號的內(nèi)容為實際值,指的是情景模式,發(fā)送特定的模式實現(xiàn)特定燈光效果。用戶自定義協(xié)議是實現(xiàn)無線控制的基礎(chǔ)也是關(guān)鍵的一步,好的通信協(xié)議能夠提高程序的解析速度從而提高程序的響應(yīng)效率。2.4UCOSIII操作系統(tǒng) UCOS系統(tǒng)是RTOS(RealTimeOS)類的實時操作系統(tǒng),F(xiàn)reeRTOS、RXT、RT-Thread、DJYOS等都是RTOS實時操作系統(tǒng)。RTOS實時操作系統(tǒng)強調(diào)的就是實時性,該類型系統(tǒng)又分為軟實時和硬實時。RTOS實時操作系統(tǒng)的特點就是實時內(nèi)核,可剝奪型內(nèi)核[8]。RTOS內(nèi)核主要是負(fù)責(zé)管理任務(wù),決定哪個任務(wù)來占用CPU運行,這也就是RTOS多任務(wù)內(nèi)核管理的能力,這樣的優(yōu)點就像給原本為單個CPU的芯片增加為多個CPU的芯片了,這樣可以更有效的提高CPU的使用率,實現(xiàn)程序的模塊化開發(fā)和多任務(wù)管理。目前UCOS系統(tǒng)有兩款,分別是UCOSII和UCOSIII。本智能家居系統(tǒng)設(shè)計中所使用的是UCOSIII。相對于UCOSII,UCOSIII增加了許多新的功能,例如:互斥型信號量、任務(wù)掛起、防死鎖機制、用戶自定義接口函數(shù)、任務(wù)被內(nèi)核多個元素掛起、向無信號請求的任務(wù)發(fā)送信號量等。UCOSIII系統(tǒng)的靈活性非常多高,只要用戶的CPU和RAM足夠大,理論上UCOSIII系統(tǒng)可以實現(xiàn)無數(shù)個任務(wù),并且任務(wù)的內(nèi)存大小可隨意分配,這樣可以充分和具有針對性的去利用芯片的內(nèi)存;同時UCOSIII可以對任務(wù)設(shè)置優(yōu)先級,這與中斷相似,能實現(xiàn)其總是運行最高優(yōu)先級的任務(wù)。本文的智能家居系統(tǒng)采用的就是這種模塊化的任務(wù)控制的設(shè)計思想。通過一個的任務(wù)模塊來管理一個的硬件軟件設(shè)計思想,使得系統(tǒng)有效有規(guī)律的工作運行。例如,Wi-Fi無線數(shù)據(jù)處理模塊,該模塊就相當(dāng)于是一個while死循環(huán),循環(huán)內(nèi)部就是對Wi-Fi模塊的管理,在該while循環(huán)里面就是一個消息隊列阻塞等待函數(shù),在沒有接收到任何消息的時候,這個任務(wù)就相當(dāng)于是休眠的,操作系統(tǒng)不會給它分配時間片,CPU會把時間片分配給就緒態(tài)的任務(wù),直到消息隊列接收到數(shù)據(jù),該任務(wù)今日就緒態(tài)時才有機會獲得CPU的使用權(quán),這就是一個典型的任務(wù),在需要使用CPU的時候獲得CPU使用權(quán),其余時候都在休眠。本智能家居系統(tǒng)采用UCOSIII實時操作系統(tǒng)而不是以前的前后臺系統(tǒng)是由于UCOSIII的實時性。本系統(tǒng)中有十多個任務(wù),由于前后臺系統(tǒng)只有一個大的while死循環(huán)和一些中斷函數(shù),各個模塊的管理就是在while循環(huán)里面的部分代碼,這對于本系統(tǒng)的十多個任務(wù)的代碼編寫會顯得比較臃腫,而且在循環(huán)的過程中本不該做判斷和不該去延時的部分代碼也也在不停的執(zhí)行,這樣會導(dǎo)致一些硬件響應(yīng)不及時,甚至無響應(yīng),而UCOSIII正好解決了這個問題。2.5本章小結(jié)本章主要對軟件系統(tǒng)的整體設(shè)計方案進(jìn)行論述,其中包括軟件的整體設(shè)計架構(gòu)、軟件開發(fā)的流程、無線通信的協(xié)議以及軟件采用的開源實時操作系統(tǒng)UCOSIII。
第三章智能家居系統(tǒng)的軟件實現(xiàn)3.1開發(fā)工具與MCU3.1.1KeilMDKKeilMDK是一款行業(yè)領(lǐng)先的ARMC/C++編譯工具鏈。它能完美無瑕的支持多種器件,如Cortex-M系列、ARM7、ARM9和Cortex-R4系列等。KeilMDK同時還具備μVision4IDE集成開發(fā)環(huán)境以及仿真器和調(diào)試工具,并且對于TCP\IP網(wǎng)絡(luò)群提供多種網(wǎng)絡(luò)協(xié)議和應(yīng)用[4]。KeilMDK軟件自帶了非常多的歷程,用戶可通過歷程來快速熟悉該軟件的開發(fā)。KeilMDK目前為ARM公司所有,原本是由Keil公司開發(fā)的軟件,針對于微型控制器的軟件開發(fā)平臺。KeilMDK是當(dāng)下最主流的單片機微型控制軟件開發(fā)工具,并且集成了業(yè)內(nèi)最領(lǐng)先的技術(shù)。KeilMDK還有許多別稱,如RealviewMDK、MDK-ARM、I-MDK等。Keil非常容易學(xué)習(xí)和使用,不管是在開發(fā)過程中還是調(diào)試過程中都非常便捷,因此非常多的嵌入式工程師,都對其十分喜愛。Keil在程序調(diào)試的時候可起到非常關(guān)鍵的作用,具備大多數(shù)調(diào)試軟件的功能,如斷點調(diào)試、單步調(diào)試等。3.1.2STM32F407STM32中的ST指的是ST公司研發(fā)的芯片,ST是一家全球半導(dǎo)體公司——意法半導(dǎo)體,意法半導(dǎo)體作為全球領(lǐng)先的半導(dǎo)體公司,專門為不同電子應(yīng)用領(lǐng)域的客戶提供成熟完善的智能駕駛和物聯(lián)網(wǎng)半導(dǎo)體解決方案[5]。M是指該芯片是微電子或微控制器,在STM32中的ARMv7架構(gòu)系列,明確的劃分為三個系列,如:A系列,是面向高端的基于虛擬內(nèi)存的高端芯片,例如目前很多安卓手機就是使用A系列的芯片;R系列,是針對實時性要求比較強的系統(tǒng)芯片系列,例如在工業(yè)或者航天等對時間要求苛刻的情景下,R系列會使用的比較多;M系列,是針對微控制器的,低功耗應(yīng)用;32是指該芯片是32位的。STM32根據(jù)其內(nèi)核架構(gòu)不同,可按如下分類,主流產(chǎn)品:STM32F0、STM32F3和STM32F1;高性能產(chǎn)品:STM32F2、STM32F4、STM32F7和STM32H7等;低功耗產(chǎn)品:STM32L4、STM32L0、STM32L1和STM32L4+。STM32的應(yīng)用場景非常廣泛,例如在工業(yè)自動化領(lǐng)域中可用于斷路器、工業(yè)網(wǎng)絡(luò)、可編程邏輯控制器等;在醫(yī)學(xué)設(shè)備中可用于心電監(jiān)護儀、電量計量、便攜式測試儀、血糖儀等;在建筑安防消防設(shè)備中可用于報警系統(tǒng)、控制面板、測量設(shè)備等。STM32能應(yīng)用如此廣泛得益于其有許多優(yōu)勢,STM32使用的是當(dāng)下主流的Cortex內(nèi)核,具有極高的性能,并且具有且豐富的外接設(shè)備、功耗低以及合理的價格;對于每一款芯片都有全面的說明文檔和幫助文檔支持。芯片的型號總類繁多,涉及的領(lǐng)域非常廣;以及有強大的用戶基礎(chǔ),由于CM3芯片的成功,積累了大批的群體用戶,為其做了鋪墊。我們的智能家居系統(tǒng)設(shè)計所使用的芯片是STM32F407,該芯片所屬系列主要面向的是小于10×10nm的高度封裝的、高性能、高集成、嵌入式存儲器和外接設(shè)備的工業(yè)、醫(yī)療與消費應(yīng)用。STM32F407的正常工作頻率為168MHz,可以通過配置PLL適當(dāng)?shù)奶岣呋蛘呓档虲PU頻率,從而達(dá)到超高性能狀態(tài)或者低功耗狀態(tài)。STM32F407在168MHz的頻率下從Flash存儲執(zhí)行的時候,它能夠提供210DMIPS/556CoreMark的性能,并且理由立法半導(dǎo)體自身研發(fā)的ART加速器,實現(xiàn)了Flash執(zhí)行時的零等待狀態(tài)。并且該芯片的DSP指令以及浮點單元時產(chǎn)品的應(yīng)用范圍更加廣闊。STM32Fxx系列產(chǎn)品采用的是意法半導(dǎo)體ART加速器和90納米工藝的,其特點是具備動態(tài)功耗調(diào)整的功能。該芯片具備多達(dá)17個定時器,其中有頻率高達(dá)168MHz的16位和32位的[6]。3.2智能照明控制模塊本文的智能家居系統(tǒng)采取兩種方式對燈進(jìn)行控制。第一種是使用WS2812智能外控集成LED光源模塊,用于客廳,作為多情景模式顏色和RGB自定義可調(diào)顏色控制;另一種是普通的LED光源,通過PWM控制其亮度,用于臥室。WS2812模塊控制是給該模塊上的一個IO引腳輸入高低電平將信息傳輸給模塊,實際上傳輸?shù)氖沁B續(xù)的01數(shù)據(jù),一共24位,每八位代表一個顏色RGB中的一個。如表3.1所示,其中0碼由0.35μs高電平和0.7μs低電平組成,1碼由0.8μs高電平和表3.1WS2812數(shù)據(jù)傳輸時間T0H0碼,高電平時間0.35μs±150nsT0H0碼,低電平時間0.7μs±150nsT1L1碼,高電平時間0.8μs±150nsT1L1碼,低電平時間0.6μs±150nsRST幀單位,低電平時間50μs0.6μs低電平組成。由表1可知,高低電平的時間達(dá)到了納秒級別,但是STM32F407最高只能達(dá)到μs,再低的話就會出現(xiàn)嚴(yán)重的誤差,因此需要使用STM32內(nèi)核級函數(shù)__nop(),該函數(shù)占用一個邏輯運算的時間,部分代碼如下:voidrgb_led_write0(void)//高電平:400ns±150ns;低電平:850ns±150ns { RGB_LED_1; __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();//延時5.95ns*67=398ns … RGB_LED_0; __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();//時間5.95ns*141=839ns …} 由函數(shù)名可知這部分代碼封裝了給WS2812模塊寫0碼的內(nèi)容,寫1碼的函數(shù)也差不多,只有__nop()函數(shù)的數(shù)量不一樣。上面的代碼就封裝好了寫一個0\1碼的函數(shù),由于要寫3個字節(jié),共24位,也就是24個0\1碼,因此需要進(jìn)一步封裝,代碼如下:voidrgb_led_write_byte(uint8_tbyte){//寫一個字節(jié) uint8_ti; for(i=0;i<8;i++) { if(byte&0x80) rgb_led_write1(); else rgb_led_write0(); byte<<=1; }} 以上代碼將寫一個0\1碼的函數(shù)封裝成寫一個字節(jié)的函數(shù),可代表RGB中的任意一位。然后再做最后的封裝,一次性傳入三個參數(shù),分別代碼RGB,通過調(diào)用寫字節(jié)函數(shù),一次性的發(fā)送24為數(shù)據(jù)給WS2812模塊,以實現(xiàn)顯示特定的顏色。voidrgb_led_write_24bits(uint8_tgreen,uint8_tred,uint8_tblue){ rgb_led_write_byte(green); rgb_led_write_byte(red); rgb_led_write_byte(blue);} 這樣的編寫程序方式有很大優(yōu)勢,高度的封裝函數(shù)對于代碼的可讀性和移植性具有重要作用,例如如果程序需要移植,WS2812模塊所接的引腳改變了,那么這代碼只需要修改最底層的初始化引腳和修改宏RGB_LED_1/RGB_LED_0的值即可,提高了代碼的移植效率。 普通LED光源PWM智能控制亮度是通過初始化引腳為PWM脈沖寬度調(diào)制來實現(xiàn)燈的亮度調(diào)節(jié),PWM全稱為PulseWidthModulation,能夠通過調(diào)制輸出自定義的頻率以及占空比。初始化引腳為PWM脈沖輸出主要有如圖3.1以下幾步:使能定時器使能定時器\端口硬件時鐘配置輸出頻率配置脈沖輸出模式使能脈沖工作配置引腳為復(fù)用模式圖3.1PWM初始化流程3.3無線Wi-Fi模塊 無線Wi-Fi模塊的軟件邏輯如圖3.2所示,主要是由以下幾部分組成。由于esp8266模塊是STM32是通過串口通信的,因此需要對串口進(jìn)行初始化,使用中斷來接收來自Wi-Fi模塊的數(shù)據(jù),相對于軟件,硬件中斷的優(yōu)先級是最高的,使用中斷來接收數(shù)據(jù)能保證數(shù)據(jù)的完整性。再而就是對模塊進(jìn)行配置,配置完成后就進(jìn)入消息等待隊列,最后就是處理數(shù)據(jù)。初始化串口初始化串口配置esp8266Wi-Fi模塊工作模式進(jìn)入消息等待隊列消息處理初始化中斷等待數(shù)據(jù)發(fā)送消息隊列圖3.2Wi-Fi任務(wù)邏輯部分代碼如下:OS_ERRerr;OS_MSG_SIZEmsg_size;char*p; usart3_init(115200); //配置模式 usart3_send_str("AT+CWMODE=2\r\n"); //AT+CWMODE=2delay_ms(500); usart3_send_str("AT+RST\r\n"); delay_ms(500); usart3_send_str("AT+CWSAP=\"Ms-esp\",\"12345678\",6,4\r\n");delay_ms(500); usart3_send_str("AT+CIPMUX=1\r\n"); delay_ms(500); usart3_send_str("AT+CIPSERVER=1,8888\r\n"); delay_ms(500); usart3_send_str("AT+CIFSR\r\n"); delay_ms(500);while(1) { p=OSQPend(&g_queue_wifi,0,OS_OPT_PEND_BLOCKING,&msg_size,NULL,&err); if(p&&msg_size) ...}其中OS_ERRerr;為UCOSIII系統(tǒng)自帶的錯誤碼變量,當(dāng)使用UCOSIII中的特定函數(shù)時,往往需要傳遞一個錯誤碼變量,當(dāng)程序操作出現(xiàn)錯誤時通過判斷錯誤碼來找出錯誤原因。msg_size和p分別是消息隊列接受得到的數(shù)據(jù)字節(jié)數(shù)和指向消息隊列數(shù)據(jù)的指針,當(dāng)消息隊列接受到數(shù)據(jù)的時候通過這兩個變量來判斷數(shù)據(jù)是否正確。usart3_init是我自己封裝的一個串口初始化函數(shù),其中包含了引腳初始化和中斷優(yōu)先級的初始化。esp8266模塊是通過AT指令進(jìn)行配置的,并且其AT指令狀態(tài)下的串口波特率為115200。因此,在初始化完串口之后需要給串口發(fā)送AT指令,配置模塊的工作方式,AT指令的模式一般為AT開頭,“\r\n”是指令的結(jié)束標(biāo)志,具體命令為“AT+***\r\n”,如果指令后面有具體的值則為“AT+***=***\r\n”,如果值有多個,則通過都好隔開,如“AT+***=***,***\r\n”。通過閱讀esp8266Wi-Fi模塊可知,“AT+CWMODE=2\r\n”指令是設(shè)置Wi-Fi的應(yīng)用模式,該值可為1、2或3,其中1代表station模式,2代表AP模式,3代表station和AP模式,AP模式的全稱為accesspoint,其提供無線接入點,允許其他設(shè)備接入,而station模式則類似于無線終端,不提供設(shè)備接入。由于本系統(tǒng)中的網(wǎng)絡(luò)形式是本系統(tǒng)的Wi-Fi模塊作為熱點也作為服務(wù)器,因此配置為模式2?!癆T+RST\r\n”RET指令主要是重啟模塊,使配置生效?!癆T+CWSAP=\"Ms-esp\",\"12345678\",6,4\r\n”指令中CWSAP是用于設(shè)置在AP模式下的參數(shù),第一個參數(shù)“Ms-esp”則是Wi-Fi熱點名稱,作為其他設(shè)備的接入點,第二個參數(shù)是該熱點的密碼,第三個參數(shù)是通道號,第四個參數(shù)是加密方式,目前esp8266支持WEP、WPA_PSK、WPA2_PSK和WPA_WPA2_PSK四種加密方式?!癆T+CIPMUX=1\r\n”。當(dāng)所有配置完畢后,進(jìn)入wile死循環(huán),阻塞等待中斷函數(shù)發(fā)送過來的消息隊列,OSQPend函數(shù)是UCOSIII系統(tǒng)中的等待消息隊列函數(shù)。消息隊列接收完畢后進(jìn)行數(shù)據(jù)校驗,判斷p指針是否有指向的數(shù)據(jù),以及數(shù)據(jù)長度是否不為0。數(shù)據(jù)正常則進(jìn)行相應(yīng)的操作,操作完畢后再進(jìn)入阻塞等待狀態(tài),以此循環(huán)。3.4窗簾模塊窗簾模塊的軟件邏輯如圖3.3所示,在本文中,對窗簾模塊的控制主要是舵機的控制,本文使用的是SG90360°舵機。通過查閱舵機的使用手冊可知,當(dāng)給500~1500us的PWM可控制其正轉(zhuǎn),在這個范圍內(nèi)值越大,轉(zhuǎn)速越快;1500~2500us的PWM可控制其反轉(zhuǎn),在此范圍內(nèi),值越大,轉(zhuǎn)速越大;給1500us的PWM可控制其停止。因此要實現(xiàn)對舵機的控制,就要實現(xiàn)PWM脈沖調(diào)制輸出。PWM脈沖調(diào)制配置部分代碼如下:配置PWM輸出時需要對其進(jìn)行一次預(yù)分頻,由于該定時器工作在STM32的APB2中線上,初始化初始化舵機PWM脈沖調(diào)制設(shè)置占空比Wi-Fi數(shù)據(jù)處理窗簾控制命令?Y圖3.3窗簾模塊控制邏輯并且根據(jù)STM32F407的芯片手冊,這里的APB2的工作頻率是84MHz還需乘以2,因此為168MHz,進(jìn)行預(yù)分頻后的頻率為10KHz,然后再進(jìn)行二次分頻,使PWM輸出為50Hz,計數(shù)值為200,計數(shù)方式為向上計數(shù)。TIM_TimeBaseStructure.TIM_Prescaler=16800-1;//第一次分頻(高級設(shè)備總線2(APB2)的頻率是84*2MHz)TIM_TimeBaseStructure.TIM_Period=(10000/50)-1;//計數(shù)值=200,輸出頻率=50HzTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //上位計數(shù)TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);3.5晾衣桿模塊晾衣架模塊的程序邏輯如圖3.4所示。晾衣架模塊的硬件控制與窗簾模塊都是使用舵機來控制,晾衣架采取的是兩個180°的SG90舵機,180°與360°的區(qū)別在于,180°的舵機只能通過PWM控制舵機在固定的180°任意位置擺動;而360°則是通過PWM控制舵機正反轉(zhuǎn)動的速度和停止。由于實際的晾衣架結(jié)構(gòu)我們采取的是關(guān)節(jié)型機械結(jié)構(gòu),因此選用180°舵機。其中,500~1500us的PWM對應(yīng)舵機的0~180°位置。Wi-Fi數(shù)據(jù)處理和舵機的PWM脈沖初始化代碼基本相同,這里不做分析。雨水檢測模塊對晾衣架控制部分代碼如下:if(PEin(13)==0){ TIM_SetCompare3(TIM8,(uint32_t)(0.5*200/20)); TIM_SetCompare4(TIM8,(uint32_t)(0.5*200/20)); PAout(7)=0;}else{ TIM_SetCompare3(TIM8,(uint32_t)(1.5*200/20)); TIM_SetCompare4(TIM8,(uint32_t)(0.5*200/20));}代碼的功能主要是通過檢測雨水檢測模塊的DO引腳的電平高低來對晾衣架進(jìn)行控制。同時,用戶也可通過界面程序?qū)α酪录苓M(jìn)行控制,這部分代碼在Wi-Fi模塊數(shù)據(jù)處理中實現(xiàn)。初始化初始化舵機PWM脈沖調(diào)制設(shè)置占空比初始化雨水傳感器Wi-Fi數(shù)據(jù)處理晾衣架控制命令?下雨?YNY圖3.4晾衣架任務(wù)控制邏輯3.6環(huán)境檢測模塊本智能家居系統(tǒng)對環(huán)境的檢測主要是溫濕度的檢測,模塊型號為DHT11。通過模塊使用手冊可知,該模塊為單通道雙向通信的,主機發(fā)送至少18ms的低電平和30ms的高電平后,DHT將回發(fā)溫濕度信號,回發(fā)的數(shù)據(jù)有5個字節(jié),前四個字節(jié)分別代表濕度和溫度的整數(shù)位和小數(shù)位,最后一位為校驗位。每個字節(jié)的數(shù)據(jù)由8位組成,其中0碼和1碼通過圖3.5和圖3.6來識別。圖3.5DHT11模塊0碼時序圖圖3.6DHT11模塊1碼時序圖接收DHT11信息代碼邏輯如圖3.7所示,由于主機與從機通信中有一個引腳,因此在通信過程中需要快速的切換引腳的模式,因此本文的系統(tǒng)采用了封裝切換引腳模式的函數(shù)voiddht11_pin_mode(GPIOMode_TypeDefpin_mode)來實現(xiàn)快速切換,這樣可以提高程序的可讀性。獲取到溫濕度數(shù)據(jù)后,將溫濕度數(shù)據(jù)封裝成浮點數(shù),顯示到OLED模塊上。檢測從機發(fā)送數(shù)據(jù)信號檢測從機發(fā)送數(shù)據(jù)信號Return引腳轉(zhuǎn)化為輸出模式主機發(fā)送數(shù)據(jù)請求信號超時?YN引腳轉(zhuǎn)化為輸入模式超時?開始接收數(shù)據(jù)開始接收數(shù)據(jù)校驗數(shù)據(jù)NY圖3.7溫濕度任務(wù)邏輯3.7安防模塊安防模塊分為兩部分,分別是可燃?xì)怏w\火焰檢測和門控模塊??扇?xì)怏w檢測和火焰檢測都是使用數(shù)模轉(zhuǎn)換來實現(xiàn)監(jiān)測的,其程序邏輯實現(xiàn)如圖3.8所示。發(fā)送報警消息發(fā)送報警消息和OLED顯示延時500ms引腳ADC初始化啟動ADC小/大于閾值?YN等待轉(zhuǎn)換完畢圖3.8環(huán)境檢測任務(wù)邏輯以下代碼為可燃?xì)怏w傳感器部分代碼,先是對ADC引腳進(jìn)行初始化,調(diào)用函數(shù)ADC_SoftwareStartConv開始ADC轉(zhuǎn)換,由于數(shù)模轉(zhuǎn)換是異步的,并且需要一定時間,因此需要對做等待轉(zhuǎn)換完成操作,轉(zhuǎn)換完成后通過ADC_GetConversionValue函數(shù)獲取轉(zhuǎn)換結(jié)果,再而將值轉(zhuǎn)換成有效電壓值最后進(jìn)行判斷。經(jīng)過調(diào)試,將閾值設(shè)置為1000能更及時的檢測到可燃?xì)怏w。mq2_init();while(1){ ADC_SoftwareStartConv(ADC2); while(ADC_GetFlagStatus(ADC2,ADC_FLAG_EOC)!=SET); ADC_ClearFlag(ADC2,ADC_FLAG_EOC); adc_val=ADC_GetConversionValue(ADC2); adc_vol=adc_val*3300/4095; if(adc_vol>1000){…}}門控的軟件邏輯如圖3.9所示。本系統(tǒng)中有三個模塊可以對門控直接進(jìn)行操作。第一個是矩陣鍵盤模塊,第二個是RFID模塊,最后是Wi-Fi數(shù)據(jù)接收處理中。門控舵機初始化門控舵機初始化門控操作卡號正確?YNWi-Fi數(shù)據(jù)處理Y矩陣鍵盤初始化RFID初始化門控消息?密碼正確?讀取密碼讀取卡號門控引腳初始化YN圖3.9門控邏輯矩陣鍵盤,本系統(tǒng)的密碼輸入硬件為矩陣鍵盤。該任務(wù)的代碼通過輪詢的方式去獲取按下的數(shù)字。矩陣鍵盤模塊有8個引腳,程序通過四個引腳順序輸出,判斷其余四個引腳的高低電平來確定是哪一個按鍵按下,例如下面判斷一列中的按鍵,給第一列高電平,判斷其余四個引腳是否為高電平,其中i即為按鍵在該列的編號,val為循環(huán)檢測一遍后的最終編號值,通過val可判斷是哪一個按鍵按下了。有電平輸入檢測自然就需要按鍵防抖,程序中的while循環(huán)既有防抖的作用,由于UCOSIII為實時操作系統(tǒng),不能直接出現(xiàn)死循環(huán),因此現(xiàn)需要在循環(huán)中加入延時函數(shù),讓程序能及時進(jìn)入時間調(diào)度。PDout(15)=1;for(i=1;i<5;i++){if(PEin(7+i)==1){ while(PEin(7+i)==1) delay_ms(1); val+=i;} }PDout(15)=0;RFID模塊,本系統(tǒng)不僅能通過密碼解鎖門禁,也可通過RFID卡片解鎖門禁。RFID模塊通過串口與STM32通信,因此也需要對串口進(jìn)行初始化,RFID獲取卡ID的關(guān)鍵程序如下:voidrequest_rfid(void){CPU_SR_ALLOC(); requestCmd[5]=CalBCC(requestCmd,requestCmd[0]-2);OS_CRITICAL_ENTER();print2RX(requestCmd,7);OS_CRITICAL_EXIT();}voidread_id(void){CPU_SR_ALLOC(); piccAnticollCmd[6]=CalBCC(piccAnticollCmd,piccAnticollCmd[0]-2);OS_CRITICAL_ENTER();print2RX(piccAnticollCmd,8);OS_CRITICAL_EXIT();}request_rfid函數(shù)作用是發(fā)送請求,read_id函數(shù)的作用是防碰撞,防碰撞的結(jié)果會返回檢測到的卡號,其中CPU_SR_ALLOC()為UCOSIII內(nèi)核函數(shù),OS_CRITICAL_ENTER\EXIT為UCOSIII進(jìn)入或退出臨界區(qū)函數(shù),表示這個執(zhí)行過程不能被打斷,print2RX是封裝的一個向串口發(fā)送數(shù)據(jù)的函數(shù),這兩個函數(shù)分別發(fā)送了請求和防碰撞信息。在程序編寫時需要注意的就是發(fā)送請求和防碰撞信號以及返回的信息的字符長度是不一樣的,這無疑加大了代碼的編寫難度,因此本程序中都對其做了封裝以及相應(yīng)的判斷,時程序邏輯更清晰。3.8本章小結(jié)本章主要介紹了開發(fā)工具與MCU以及智能家居系統(tǒng)的軟件實現(xiàn),其中有智能照明控制模塊、無線Wi-Fi模塊、窗簾模塊、晾衣架模塊、環(huán)境監(jiān)測模塊和安防模塊。內(nèi)容包括邏輯分析,部分任務(wù)實現(xiàn)代碼分析,清晰的論述軟件設(shè)計的思想等。
第四章軟件調(diào)試分析軟件調(diào)試與分析的過程中,由于單片機程序與界面程序開發(fā)不同,沒有比較直觀的視覺效果,因此需要借助一些工具以及模塊輔助性的調(diào)試程序,本系統(tǒng)在開發(fā)的過程中使用了兩個調(diào)試工具和一個調(diào)試模塊,分別是手機藍(lán)牙調(diào)試助手、網(wǎng)絡(luò)調(diào)試助手和藍(lán)牙模塊,使用網(wǎng)絡(luò)調(diào)試助手是由于智能家居系統(tǒng)與界面程序之間需要網(wǎng)絡(luò)通信,并且是TCP協(xié)議。而且藍(lán)牙模塊使用比較方便,只需要初始化一次,并且接上串口即可通過藍(lán)牙調(diào)試助手進(jìn)行收發(fā)數(shù)據(jù),從而可以直觀的查看程序運行過程中的調(diào)試信息。4.1模塊編程調(diào)試程序在編寫過程中,各個模塊加入后都需要調(diào)試,例如Wi-Fi模塊調(diào)試。STM32通過串口發(fā)送AT指令給esp8266模塊,串口接收到的Wi-Fi數(shù)據(jù)發(fā)送給串口藍(lán)牙進(jìn)行打印顯示,查看調(diào)試信息是否有問題。當(dāng)發(fā)送AT指令給Wi-Fi模塊時,如果成功,Wi-Fi模塊都會發(fā)回OK作為回應(yīng);如果失敗則返回ERROR作為回應(yīng);因此調(diào)試的時候需要通過觀察藍(lán)牙調(diào)試助手判斷Wi-Fi是否配置正確,并且能正確的產(chǎn)生熱點信號。通過刻意的制造錯誤來判斷看門狗模塊是否能正常的復(fù)位系統(tǒng)程序。通過打印輸出密碼檢測任務(wù)中檢測到的密碼來調(diào)試矩陣鍵盤程序編寫。4.2結(jié)合實物調(diào)試當(dāng)程序基本運行無誤后,還需要結(jié)合實物場景進(jìn)行調(diào)試。例如,窗簾模塊,對窗簾的控制就是對舵機進(jìn)行正反轉(zhuǎn)和停止控制,由于實物窗體大小不確定,因此在模塊程序編寫調(diào)試時無法做最終的確定正反轉(zhuǎn)的時間,從而需要通過實物進(jìn)行校對,以達(dá)到一鍵開關(guān)時能準(zhǔn)確無誤的將窗簾打開以及合上,同時需結(jié)合界面控制的具體控制方式進(jìn)行最終調(diào)試。通過打火機噴出的氣體和火來調(diào)試可燃?xì)怏w模塊和火焰檢測模塊是否能正確的捕獲異常,并且能做出相應(yīng)的警報。通過往雨水檢測模塊上倒水,來調(diào)試雨水檢測模塊是否正確,且能做出相應(yīng)的控制。4.3本章小結(jié) 本章通過模塊調(diào)試和結(jié)合實物調(diào)試兩種方式來簡單的闡述本智能家居軟件系統(tǒng)的調(diào)試,調(diào)試在一個軟件開發(fā)過程是中必不可少的,并且至關(guān)重要。如果能在調(diào)試的過程中及時的發(fā)現(xiàn)更多隱藏的問題,并且修復(fù)過來,對程序后期的發(fā)行可節(jié)省許多維護成本。
第五章總結(jié)與展望現(xiàn)在是信息時代,對于信息的掌握至關(guān)重要,掌握信息就意味著能通過信息做出恰當(dāng)?shù)陌才牛@不僅能提高家居生活,還能對突發(fā)事件防范于未然,讓事物都隨著人們希望的方向發(fā)展,在家居生活中也是一樣,掌握家居生活各種信息,根據(jù)信息分析,做出恰當(dāng)?shù)陌才?,不僅有利于提高家居生活的舒適度,還有利于增強家居生活的安全性。本文研究的智能家居系統(tǒng),實現(xiàn)了對智能窗簾的智能控制、晾衣架的自適應(yīng)環(huán)境控制和人工控制、多模式客廳彩燈智能控制、集密碼RFID以及遠(yuǎn)程控制門禁、室內(nèi)環(huán)境溫濕度檢測及信息推送、可燃?xì)怏w檢測以及報警、火焰檢測以及報警、OLED顯示實時信息等功能。系統(tǒng)本身采取了獨立看門狗工作模式,程序若出現(xiàn)不可修復(fù)錯誤則自動重啟該系統(tǒng),保證系統(tǒng)有效、不間斷的運行;系統(tǒng)通過flash閃存保存用戶的密碼以及RFID卡ID,有效的提高家居環(huán)境的安全性。盡管本智能家居系統(tǒng)具備了不少功能,但是還是有很多不足的地方。在設(shè)計過程中,本系統(tǒng)還可有以下改進(jìn):1、在網(wǎng)絡(luò)方面,本系統(tǒng)采用系統(tǒng)軟件與界面控制程序之間使用一對一或一對多的方式來進(jìn)行通信,即一個服務(wù)器(智能家居軟件系統(tǒng))對多個客戶端(如智能家居終端界面控制、手機軟件控制、平板控制等),由于沒有連接到因特網(wǎng),因此無法獲取更多的網(wǎng)絡(luò)信息,并且控制也僅限于熱點所在范圍內(nèi)。因此可以在界面程序中添加因特網(wǎng)連接,在作為智能家居控制終端的同時也可以連接到因特網(wǎng),實現(xiàn)過呢更多有趣的操作。2、密碼解鎖方面,目前只支持六位純數(shù)字的密碼,可將此修改為用戶自定義長度或支持更多字符作為密碼來提高密碼的可靠性。3、窗簾控制方面,目前的窗簾控制是通過計算時間來確定是否完全打開或者完全關(guān)閉,這樣有很多缺陷,如果電流不穩(wěn)定,那么舵機的轉(zhuǎn)速會受到影響,從而導(dǎo)致時間打開和關(guān)閉的不準(zhǔn)確;這方面可以采用PLC常用的方法,設(shè)置檢測為來判斷是否到達(dá)某個位置,從而做出相應(yīng)的控制,如當(dāng)檢測到窗簾已經(jīng)關(guān)閉,那么給STM32的某個引腳高電平,系統(tǒng)通過檢測到高電平而使舵機停止。4、晾衣架模塊,目前的晾衣架模塊智能通過雨水檢測或者人工來控制,但是遇到大風(fēng)天氣時,晾衣架不能做出響應(yīng);因此,可以加入風(fēng)力傳感器來檢測風(fēng)的強度。程序需要改進(jìn)的地放有很多,就連目前最流行的IOS系統(tǒng)和Android系統(tǒng)都要不停的改進(jìn)問題,本系統(tǒng)也如此,開發(fā)和研究都是在不停的改進(jìn)以及提出新設(shè)想的路上不斷嘗試與測試,才能將產(chǎn)品不停的推向完美。
參考文獻(xiàn)[1]戴建.基于嵌入式的智能家居網(wǎng)關(guān)系統(tǒng)設(shè)計[D].上海工程技術(shù)大學(xué).2016[2]張長濤.智能家居產(chǎn)品設(shè)計趨勢研究[J].西部皮革,2020,第5期[3]賈陽靜.鄒念育,雷冬鳴,李望,吉奈,郭旭,李萍.基于Android和WIFI通信的智能家居系統(tǒng)設(shè)計[J].大連工業(yè)大學(xué)學(xué)報,2016,第35卷,第1期[5]孫海艷.陳偉,王娜.基于ZigBee無線傳感器網(wǎng)絡(luò)的智能照明系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2017,40(11):183~186.[6]沈玉龍.王琨.智能家居控制系統(tǒng)設(shè)計[J].電子科技,2004,05:47-50+54.[7]靳建彬.王元欽,陳源,包瑞.測控系統(tǒng)中軟總線平臺設(shè)計與實現(xiàn)[J].無線電工程,2010,第11期[8]陳珍軍.趙秋霞,李亞敏.基于ARM和ZigBee的智能家居系統(tǒng)研究與設(shè)計[J].中國科技論文,2015,10(5):584-587.[8]王佳.基于STM32的智能家居控制系統(tǒng)的設(shè)計與開發(fā)[D].西安:長安大學(xué),2013.[9]陳曉兵.物聯(lián)網(wǎng)在智能家居中的應(yīng)用與發(fā)展[J].科技創(chuàng)新與應(yīng)用,2020,第9期[10]王亦鈞.智能家居系統(tǒng)普及性應(yīng)用研究[D].江西:南昌大學(xué),2014.DOI:10.7666/d.D647963.[11]Seo.DongWoo,Kim,Hyun,Kim,JaeSung,etal.Hybridreality-baseduserexperienceandevaluationofacontext-awaresmarthome[J].ComputersinIndustry,2016,76:11-23.[12]馮凱.童世華.智能家居的由來及其發(fā)展趨勢[J].中國新技術(shù)新產(chǎn)品,2010,(6):7.DOI:10.3969/j.issn.1673-9957.2010.06.006.[13]杜德琴.基于ZigBee的無線傳感網(wǎng)絡(luò)智能家居監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[D].河北:燕山大學(xué),2016.[14]劉海亮,曹家年,郭逢麗.嵌入式智能家居安防系統(tǒng)的研究與實現(xiàn)[J].應(yīng)用科技,2011,38(2):61-66.DOI:10.3969/j.issn.1009-671X.2011.02.14.[15]蔡紅娟.翟晟,蔡苗.基于STM32的GSM智能家居控制系統(tǒng)設(shè)計[J].自動化技術(shù)與應(yīng)用,2013,32(8):37-40.[16]朱向慶.鄧浩欣,李嘉寶,等.基于STM32和Android的智能家居系統(tǒng)設(shè)計[J].電子設(shè)計工程,2018,26(18):179-183.DOI:10.3969/j.issn.1674-6236.2018.18.038.[17]曾瀅.基于無線通信的閃光燈控制系統(tǒng)設(shè)計[J].電子測試.2018(15):18-19[18]屈良潘.唐曼玲,劉靜,等.基于ESP8266的LED燈無線遠(yuǎn)程控制設(shè)計[J].電子世界.2017(9):179-181[19]丁月林.基于STM32的低功耗溫濕度采集器實現(xiàn)[J].軟件,2015,第5期[20]趙建華,師振偉.嵌入式Web服務(wù)器在智能家居控制控制系統(tǒng)的實現(xiàn)[D].西安:西安工業(yè)大學(xué).2013年[21]郭穎.智能家居控制線的研究[J].工程技術(shù),2016(12):308.[22]余志綱.基于嵌入式Linux視頻監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)研究[D].湘潭:湖南科技大學(xué),2014.
謝辭為時一個學(xué)期的畢業(yè)設(shè)計即將結(jié)束了,這也意味著我在北京理工大學(xué)珠海學(xué)院的大學(xué)生涯也即將結(jié)束。在畢業(yè)設(shè)計這段時間里,我得到了很大的自身提高,其中就不少受到導(dǎo)師以及小組成員的熱心幫助,在遇到問題的時候與我一起面對、一起探討、一起研究,因此才能解決一個又一個的技術(shù)難題。在系統(tǒng)軟件開發(fā)的過程中,遇到的問題一個接一個,正是對這些難題的琢磨才能不斷的拓展自己的知識,不斷的學(xué)習(xí)解決問題的方法,以及對智能家居的深入了解。這得益于這次畢業(yè)設(shè)計,跟得益于導(dǎo)師的教誨以及小組伙伴的幫助。最后,真誠的感謝導(dǎo)師的帶領(lǐng)以及學(xué)校的各方面支持。
附錄1程序智能家居軟件系統(tǒng)主程序#include"sys.h"#include"delay.h"#include"usart.h"#include"led.h"#include"includes.h"#include"stdbool.h"#include"key.h"#include"oled.h"#include"rtc.h"#include"wdg.h"#include"motor.h"#include"beep.h"#include"mq2.h"#include"fire.h"#include"hw.h"#include"rfid.h"#include"flash.h"#include"lock.h"#definebzero(a,b)memset(a,0,b)#defineDOOR_OPENTIM_SetCompare2(TIM8,(uint32_t)(1.5*200/20))#defineDOOR_CLOSETIM_SetCompare2(TIM8,(uint32_t)(0.5*200/20))staticvolatileuint32_tconnect_num=0;staticvolatileuint32_tg_fire_flag=0;staticvolatileuint32_tg_mq2_flag=0;//初始化任務(wù)OS_TCBTask_init_TCB;voidtask_init(void*parg);CPU_STKtask_init_stk[128]; //任務(wù)1控制塊OS_TCBTask1_TCB;voidtask1(void*parg);CPU_STKtask1_stk[128]; //任務(wù)3的任務(wù)堆棧,大小為128字,也就是512字節(jié)//任務(wù)2控制塊OS_TCBTask2_TCB;voidtask2(void*parg);CPU_STKtask2_stk[128]; //任務(wù)4的任務(wù)堆棧,大小為128字,也就是512字節(jié)//任務(wù)3控制塊OS_TCBTask3_TCB;voidtask3(void*parg);CPU_STKtask3_stk[128]; //任務(wù)5的任務(wù)堆棧,大小為128字,也就是512字節(jié)//任務(wù)4控制塊OS_TCBTask4_TCB;voidtask4(void*parg);CPU_STKtask4_stk[128]; //任務(wù)6的任務(wù)堆棧,大小為128字,也就是512字節(jié)//任務(wù)5控制塊OS_TCBTask5_TCB;voidtask5(void*parg);CPU_STKtask5_stk[128]; //任務(wù)7的任務(wù)堆棧,大小為128字,也就是512字節(jié)//任務(wù)6控制塊OS_TCBTask6_TCB;voidtask6(void*parg);CPU_STKtask6_stk[128]; //任務(wù)8的任務(wù)堆棧,大小為64字,也就是256字節(jié)//任務(wù)7控制塊OS_TCBTask7_TCB;voidtask7(void*parg);CPU_STKtask7_stk[128]; //任務(wù)9的任務(wù)堆棧,大小為64字,也就是256字節(jié)//任務(wù)8控制塊OS_TCBTask8_TCB;voidtask8(void*parg);CPU_STKtask8_stk[128]; //任務(wù)10的任務(wù)堆棧,大小為64字,也就是256字節(jié)//任務(wù)9控制塊OS_TCBTask9_TCB;voidtask9(void*parg);CPU_STKtask9_stk[128]; //任務(wù)11的任務(wù)堆棧,大小為64字,也就是256字節(jié)//任務(wù)10控制塊OS_TCBTask10_TCB;voidtask10(void*parg);CPU_STKtask10_stk[128]; //任務(wù)7的任務(wù)堆棧,大小為64字,也就是256字節(jié)//任務(wù)11控制塊OS_TCBTask11_TCB;voidtask11(void*parg);CPU_STKtask11_stk[128]; //任務(wù)7的任務(wù)堆棧,大小為64字,也就是256字節(jié)OS_Q g_queue_beep; //消息隊列OS_Q g_queue_wifi; //消息隊列OS_Q g_queue_oled; //消息隊列OS_MUTEX g_mutex_oled; //互斥鎖OS_SEM g_sem_rtc; //信號量OS_SEM g_sem; //信號量staticvolatileuint8_tg_buf_dht11[6]={0};//主函數(shù)intmain(void){ OS_ERRerr; systick_init(); //時鐘初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷分組配置 usart1_init(9600); //串口初始化 LED_Init(); //LED初始化 //OS初始化,它是第一個運行的函數(shù),初始化各種的全局變量,例如中斷嵌套計數(shù)器、優(yōu)先級、存儲器 OSInit(&err); //創(chuàng)建初始化任務(wù) OSTaskCreate( (OS_TCB*)&Task_init_TCB, //任務(wù)控制塊 (CPU_CHAR*)"Task_init", //任務(wù)的名字 (OS_TASK_PTR)task_init, //任務(wù)函數(shù) (void*)0, //傳遞參數(shù) (OS_PRIO)6, //任務(wù)的優(yōu)先級7 (CPU_STK*)task_init_stk, //任務(wù)堆棧基地址 (CPU_STK_SIZE)128/10, //任務(wù)堆棧深度限位,用到這個位置,任務(wù)不能再繼續(xù)使用 (CPU_STK_SIZE)128, //任務(wù)堆棧大小 (OS_MSG_QTY)0, //禁止任務(wù)消息隊列 (OS_TICK)0, //默認(rèn)時間片長度 (void*)0, //不需要補充用戶存儲區(qū) (OS_OPT)OS_OPT_TASK_NONE,//沒有任何選項 &err //返回的錯誤碼 ); //啟動OS,進(jìn)行任務(wù)調(diào)度 OSStart(&err); printf("neverrun\r\n"); while(1); }//任務(wù)1--用于接收數(shù)據(jù)并處理voidtask1(void*parg){ OS_ERRerr; OS_MSG_SIZEmsg_size; uint32_ti=0; char*p; /***********************配置藍(lán)牙************************/ //設(shè)置藍(lán)牙模塊名字 usart1_send_str("AT+NAMEming\r\n"); delay_ms(500); usart1_send_str("AT+LADDR\r\n"); delay_ms(500); //重啟模塊使設(shè)置生效 usart1_send_str("AT+RESET\r\n"); delay_ms(2000); printf("task1iscreateok\r\n"); while(1) delay_ms(1000);}externvolatileuint8_tg_usart3_buf[128];//任務(wù)1--用于接收數(shù)據(jù)并處理voidtask2(void*parg){ OS_ERRerr; charsend_buf[50]={0}; OS_MSG_SIZEmsg_size; uint32_ti=0,data=0; uint32_tpw[6]={0}; char*p; chartmp[128]; char*tmp1,*tmp2,*value,*cmd; char*r,*g,*b; usart3_init(115200); //TIM8PWM四路輸出 motor_init(); //彩燈初始化 rgb_led_init(); //配置模式 usart3_send_str("AT+CWMODE=2\r\n"); //AT+CWMODE=2 delay_ms(500); //重啟模塊,設(shè)置生效 usart3_send_str("AT+RST\r\n"); delay_ms(500); printf("%s",g_usart3_buf); memset(g_usart3_buf,0,128); //配置熱點的名字與密碼投到以及安全方式 usart3_send_str("AT+CWSAP=\"Ms-esp\",\"12345678\",6,4\r\n"); delay_ms(1000); //配置為多鏈接模式 usart3_send_str("AT+CIPMUX=1\r\n"); delay_ms(1000); //配置為服務(wù)器端口為:8888 usart3_send_str("AT+CIPSERVER=1,8888\r\n"); delay_ms(1000); //配置為服務(wù)器端口為:8080 usart3_send_str("AT+CIFSR\r\n"); delay_ms(1000); printf("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東梅州職業(yè)技術(shù)學(xué)院《交通規(guī)劃課程設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱商業(yè)大學(xué)《物理化學(xué)實驗(上)》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江藝術(shù)職業(yè)學(xué)院《地理專業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 14保護呼吸器官(教學(xué)設(shè)計)-2024-2025學(xué)年科學(xué)三年級上冊人教鄂教版
- 河南輕工職業(yè)學(xué)院《嵌入式綜合實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中南林業(yè)科技大學(xué)《生命科學(xué)進(jìn)展》2023-2024學(xué)年第二學(xué)期期末試卷
- 宜賓學(xué)院《天然產(chǎn)物》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱商業(yè)大學(xué)《流體力學(xué)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 瀘州四川瀘州瀘縣氣象局見習(xí)基地招收見習(xí)人員2人筆試歷年參考題庫附帶答案詳解
- 大連軟件職業(yè)學(xué)院《數(shù)據(jù)結(jié)構(gòu)實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 異位妊娠護理查房版本
- 人教版 八年級數(shù)學(xué)下冊 第19章 單元綜合測試卷(2025年春)
- 2024年美發(fā)師(高級技師)職業(yè)鑒定考試題庫(含答案)
- 2025年山東藥品食品職業(yè)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2024年05月湖南招商銀行長沙分行長期社會招考筆試歷年參考題庫附帶答案詳解
- 滬科版(2024新版)數(shù)學(xué)七年級下冊第6章 實數(shù) 單元測試卷(含答案)
- 2025新人教版英語七年級下單詞英譯漢默寫表(小學(xué)部分)
- 電子物料基礎(chǔ)知識
- 外科疝氣的個案護理
- 2025屆江蘇省南京市鹽城市高三一模考試語文試題 課件
- 幼兒園保育教育質(zhì)量自評指導(dǎo)手冊(試行)
評論
0/150
提交評論