黃國(guó)航王得丘智能家居_第1頁(yè)
黃國(guó)航王得丘智能家居_第2頁(yè)
黃國(guó)航王得丘智能家居_第3頁(yè)
黃國(guó)航王得丘智能家居_第4頁(yè)
黃國(guó)航王得丘智能家居_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第九屆智控大賽設(shè)計(jì)報(bào)告 智能家居系統(tǒng) 電子與信息學(xué)院 學(xué)院 信息工程專業(yè)學(xué)生 黃國(guó)航,王得丘 隊(duì)名 LHW提交日期 2014 年 3 月 29 日摘要本實(shí)現(xiàn)了基于 Zigbee、MFC、Android、OpenGL 的智能宿舍系統(tǒng)、可以廣泛應(yīng)用于各種實(shí)際生活中。本使用了 Zigbee 模塊、溫濕度感應(yīng)模塊、氣體感應(yīng)模塊、繼電器模塊、光敏傳感器模塊等各種復(fù)雜種類的模塊,具有極強(qiáng)的功能和協(xié)調(diào)性、功能性。:ZigbeeMFCAndroid2AbstractThis work has realized based on Zigbee, MFC,OpenGL, the intelligence of t

2、he Android platform dormitory system, can be widely used in all kinds of real life.This work USES the Zigbee module, temperature v humidity sensor module, toxic gas sensing module, relay module, photosensitive sensor module and other complex types of modules,with strong function and coordination, fu

3、nctional.KeyWords:ZigbeeMFCAndroid3目錄一、二、三、四、五、六、方案比較設(shè)計(jì)與論證理論分析與計(jì)算電路圖及有關(guān)設(shè)計(jì)文件測(cè)試方法與儀器測(cè)試數(shù)據(jù)及測(cè)試結(jié)果分析。4正文一、 方案比較1)設(shè)計(jì)并制作一套智能家居系統(tǒng),對(duì)家用設(shè)備、家庭成員出入管理。系統(tǒng)由主控機(jī)及分散終端組成,主控機(jī)負(fù)責(zé)對(duì)用戶進(jìn)出戶和家用電器的管理等任務(wù),終端負(fù)責(zé)門禁與家用電器設(shè)備的。系統(tǒng)通過無(wú)線的方式組網(wǎng),主機(jī)和終端之間可以雙向通信,終端間可不進(jìn)行通信,終端可以方便增加。主機(jī)上編寫友好的人機(jī)界面,方便系統(tǒng)本系統(tǒng)演示時(shí),終端數(shù)>= 2。、設(shè)置等操作。方案一:用 51 單片機(jī)+NRF2401 無(wú)線通訊模

4、塊方案二:用 51 單片機(jī)+Zigbee 無(wú)線通訊模塊方案三:用 51 單片機(jī)+/GPRS 模塊方案一最省錢,最,但是功能最簡(jiǎn)陋;方案三功能很強(qiáng)大,但最昂貴;方案二價(jià)錢中等,且功能較強(qiáng)大,故我們選擇方案二。2)終端一:電子門禁執(zhí)行器,1、負(fù)責(zé) ID 卡信息掃描,提示用戶類型,并將用戶信息傳送給主機(jī);2、執(zhí)行開門動(dòng)作(可由終端本身產(chǎn)生,也可由主機(jī)產(chǎn)生),開門動(dòng)作可用聲光代替;方案一:用 51 單片機(jī)+RC522 模塊方案二:用 51 單片機(jī)+RFID 模塊方案三:用 51 單片機(jī)+NFC 模塊方案一最省錢,最,功能基本能達(dá)到我們的要求;方案三功能很強(qiáng)大,但最昂貴;方案二價(jià)錢也很昂貴,且功能較強(qiáng)大

5、。故我們選擇方案一。3)終端二:為家用電器電源開關(guān)端(電燈等)。需完成以下功能:1、在未聯(lián)網(wǎng)的情況下,現(xiàn)場(chǎng)演示與主機(jī)進(jìn)行聯(lián)網(wǎng),并且斷電重啟后無(wú)需再次聯(lián)網(wǎng);2、當(dāng)用戶開門時(shí)登記并向主機(jī)傳輸使用者信息;3、執(zhí)行開關(guān)動(dòng)作,電燈電源開關(guān)采用繼電器,繼電器輸出端不需要接市電,但需以某種形式展現(xiàn)開關(guān)動(dòng)作。(電燈可用 LED 代替)方案:用 51 單片機(jī)+Zigbee 無(wú)線通訊模塊54)主機(jī):1、應(yīng)具有良好的人機(jī)界面,可與終端進(jìn)行雙向通的用戶信息。2、主機(jī)操作對(duì)象分為:主要家庭成員和家庭收終端提交兩種。其中,家庭可在主機(jī)執(zhí)行添加、刪除終端操作(終端一不可移除)。3、建立良好的界面可進(jìn)行終端電燈的亮滅。方案一

6、:用 MFC 上位機(jī)+Zigbee 無(wú)線通訊模塊方案二:用 VB 上位機(jī)+Zigbee 無(wú)線通訊模塊方案三:用 Android 上位機(jī)+Zigbee 無(wú)線通訊模塊方案二開發(fā)起來比較快,功能也很簡(jiǎn)陋;方案一和方案三都具有較強(qiáng)的功能和較大的開發(fā)周期,故我們選擇了方案一和方案三。發(fā)揮部分1) 在滿足一定條件時(shí)(超過夜晚 12 點(diǎn),需要自行設(shè)置時(shí)間),主機(jī)束指令,實(shí)現(xiàn)自動(dòng)斷電,關(guān)閉門禁等功能。結(jié)方案:用 51 單片機(jī)+Zigbee 無(wú)線通訊模塊2) 在主機(jī)上建立設(shè)備和的信息數(shù)據(jù)庫(kù),可實(shí)時(shí)家庭成員開門等信息。方案:用 MFC 上位機(jī)+Zigbee 無(wú)線通訊模塊3) 可方便導(dǎo)出門禁設(shè)備及電燈使用情況,導(dǎo)出

7、至 PC 可使用 txt 格式(excel、word 等 better)。方案:用 MFC 上位機(jī)+Zigbee 無(wú)線通訊模塊4) 實(shí)現(xiàn)異常監(jiān)督功能。如掉網(wǎng)、突然掉電等。方案:用 51 單片機(jī)+Zigbee 無(wú)線通訊模塊5) 其他創(chuàng)新(如識(shí)別進(jìn)行開門操作等)。方案:用 51 單片機(jī)+Zigbee 無(wú)線通訊模塊+語(yǔ)音識(shí)別模塊6二、 設(shè)計(jì)和論證第一章系統(tǒng)方案7第二章功能與指標(biāo)8第三章實(shí)現(xiàn)原理TQ2440-LinuxQTAndroidOpenGLMFCZigbee9一、 Zigbee 概述物聯(lián)網(wǎng)的定義是:通過射頻識(shí)別(RFID)、紅外感應(yīng)器、全球 、激光掃描器等信息傳感設(shè)備,按約定的協(xié)議,把任何物體

8、與互聯(lián)網(wǎng)相連接,進(jìn)行信息交換和通信,以實(shí)現(xiàn)對(duì)物體的智能化識(shí)別、 、跟蹤、 和管理的一種網(wǎng)絡(luò)。無(wú)線傳感網(wǎng)絡(luò)的定義是:大規(guī)模,無(wú)線、自組織、多跳、無(wú)分區(qū)、無(wú)基礎(chǔ)設(shè)施支持的網(wǎng)絡(luò)其中的節(jié)點(diǎn)是同構(gòu)的、成本較低、體積較小,大部分節(jié)點(diǎn)不移動(dòng),被隨意撒布在工作區(qū)域,要求網(wǎng)絡(luò)系統(tǒng)有盡可能長(zhǎng)的工作時(shí)間。 在通信方式上,雖然可以采用有線、無(wú)線、紅外和光等多種形式,但一般認(rèn)為短距離的無(wú)線低功率通信技術(shù)最適合傳感器網(wǎng)絡(luò)使用,為明確起見,一般稱無(wú)線傳感器網(wǎng)絡(luò)(WSNWireless Sensor Network)。Zigbee 是 IEEE 802.15.4 協(xié)議的代名詞。根據(jù)這個(gè)協(xié)議規(guī)定的技術(shù)是一種短距離、低功耗的無(wú)線

9、通信技術(shù)。這一名稱來源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飛翔和“嗡嗡”(zig)地抖動(dòng)翅膀的“舞蹈”來與同伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式 了群體中的通信網(wǎng)絡(luò)。其特點(diǎn)是近距離、低復(fù)雜度、自組織、低功耗、低數(shù)據(jù)速率、低成本。主要適合用于自動(dòng) 和 領(lǐng)域,可以嵌入各種設(shè)備。簡(jiǎn)而言之, ZigBee 就是一種便宜的,低功耗的近距離無(wú)線組網(wǎng)通訊技術(shù)。無(wú)線傳感網(wǎng)絡(luò)的無(wú)線通信技術(shù)可以采用 ZigBee 技術(shù)、藍(lán)牙、Wi-Fi 和紅外等技術(shù)。ZigBee 技術(shù)是一種短距離、低復(fù)雜度、低功耗、低數(shù)據(jù)速率、低成本的雙向無(wú)線通信技術(shù)或無(wú)線網(wǎng)絡(luò)技術(shù),是一組基于 IEEE802.15.4 無(wú)線標(biāo)準(zhǔn)

10、研制開發(fā)的組網(wǎng)、安全和應(yīng)用軟件方面的通信技術(shù)。協(xié)議棧是指網(wǎng)絡(luò)中各層協(xié)議的總和,其形象的反映了一個(gè)網(wǎng)絡(luò)中文件傳輸?shù)倪^程:由上層協(xié)議到底層協(xié)議,再由底層協(xié)議到上層協(xié)議。使用最廣泛的是英特網(wǎng)協(xié)議棧,由上到下的協(xié)議分別是:應(yīng)用層(HTTP, TELNET, DNS,等),層(TCP, UDP),網(wǎng)絡(luò)層(IP),鏈路層(WI-FI,以太網(wǎng),令牌環(huán),F(xiàn)DDI 等),物理層。ZigBee V1.0”。 ZigBee于 2005 年公布了第一份 ZigBee 規(guī)范“ ZigBee Specification協(xié)議規(guī)范使用了 IEEE 802.15.4 定義的物理層(PHY)和介質(zhì)層(MAC),并在此基礎(chǔ)上定義了

11、網(wǎng)絡(luò)層(NWK)和應(yīng)用層(APL)架構(gòu)。ZigBee2007/PRO 無(wú)線傳感器網(wǎng)絡(luò)與 ZigBee2006 無(wú)線傳感器網(wǎng)絡(luò)相比最大區(qū)別在于其支持最新 ZigBee2007/PRO 網(wǎng)絡(luò),提供更精確傳感器(如增加高精度溫濕度數(shù)字傳感器等),提供可擴(kuò)展接口,提供更大網(wǎng)絡(luò)支持,速度更快/處理能力更強(qiáng)低功耗微器等。ZigBee 的技術(shù)特性決定它將是無(wú)線傳感器網(wǎng)絡(luò)的最好選擇,廣泛用于物聯(lián)網(wǎng),自動(dòng)和監(jiān)視等諸多領(lǐng)域。以美國(guó)德州儀器 TI 公司 CC2430/CC2530為代表的 ZigbeeSOC 解決方案在國(guó)內(nèi)高校企業(yè)掀起了一股 Zigbee 技術(shù)應(yīng)用的熱潮。 CC2430/CC2530 集成了 51

12、單片機(jī)內(nèi)核, 相比于眾多的 Zigbee CC2430/CC2530 頗受青睞。,ZigBee 新一代 SOC802.15.4 標(biāo)準(zhǔn)/ZigBee/ZigBee 256 個(gè)字節(jié),CC2530 是理想CC2530 是真正的片上系統(tǒng)解決方案,支持 IEEE RF4CE 和能源的應(yīng)用。擁有龐大的快閃記憶體多達(dá)ZigBee 專業(yè)應(yīng)用。CC2530 結(jié)合了一個(gè)完全集成的,高性能的 RF 收發(fā)器與一個(gè) 8051 微處理器,8 kB 的閃存,以及其他強(qiáng)大的支持功能和外設(shè)。CC2530 提供了 101dB 的鏈路質(zhì)量,優(yōu)秀的RAM,32/64/128/256 KB靈敏度和健壯的性,四種供電模式,多種閃存,以及

13、一套廣泛的外設(shè)集包括 2 個(gè) USART、 12位 ADC 和 21 個(gè)通用 GPIO,以及。除了通過優(yōu)秀的 RF 性能、選擇性和業(yè)界標(biāo)準(zhǔn)增強(qiáng) 8051MCU 內(nèi)核,支持一般的低無(wú)線通信, CC2530 還可以配備 TI 的一個(gè)標(biāo)準(zhǔn)兼容或?qū)S械木W(wǎng)絡(luò)協(xié)議棧(RemoTI, Z-Stack,或發(fā),使你更快的獲得市場(chǎng)。 CC2530 可以用于的應(yīng)用包括SimpliciTI)來簡(jiǎn)化開、消費(fèi)型電領(lǐng)域。子、家庭、計(jì)量和智能能源、樓宇自動(dòng)化、醫(yī)療以及IEEE 802.15.4 標(biāo)準(zhǔn)概述IEEE802.15.4 是一個(gè)低速率無(wú)線個(gè)人局域網(wǎng)(LowRateWirelessalAreaNetworks,LR-WP

14、AN)標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了物理層(PHY)和介質(zhì)層(MAC)。這種低速率無(wú)線個(gè)人局域網(wǎng)的網(wǎng)絡(luò)結(jié)構(gòu)簡(jiǎn)單、成本低廉、具有有限的功率和靈活的吞吐量。低速率無(wú)線個(gè)人局域網(wǎng)的主要目標(biāo)是實(shí)現(xiàn)安裝容易、數(shù)據(jù)傳輸可靠、短距離通信、極低的成本、合理的電池活的通信網(wǎng)絡(luò)協(xié)議。LR-WPAN 網(wǎng)絡(luò)具有如下特點(diǎn):,并且擁有一個(gè)簡(jiǎn)單而且靈collision實(shí)現(xiàn) 250kb/s,40kb/s,20kb/s 三種傳輸速率。支持星型或者點(diǎn)對(duì)點(diǎn)兩種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。具有 16支持位短地址或者 64 位擴(kuò)展地址。避免載波多路偵聽技術(shù)(carriersensemultipleaccesswithavoidance ,CSMA-CA)。用于

15、可靠傳輸?shù)娜珣?yīng)答協(xié)議。低功耗。能量檢測(cè)(Energy Detection,ED)。1011 鏈路質(zhì)量指示(Link Quality Indication,LQI)。 在 2450MHz 頻帶內(nèi)定義了 16 個(gè)通道;在 915MHz 頻帶內(nèi)定義了 10個(gè)通道;在 868MHz 頻帶內(nèi)定義了 1 個(gè)通道。為了使供應(yīng)商能夠提供最低可能功耗的設(shè)備,IEEE(Institute ofElectrical and Electronics Engineers ,電氣及電子工程師學(xué)會(huì) ) 定義了兩種不同類型的設(shè)備:一種是完整功能設(shè)備(full functional device , FFD) , 另一種是簡(jiǎn)化

16、功能設(shè)備(reducedfunctional device,RFD)。二、 Zigbee 協(xié)議棧物理層( PHY)物理層定義了物理無(wú)線信道和 MAC層管理服務(wù)。物理層內(nèi)容:子層之間的接口,提供物理層數(shù)據(jù)服務(wù)和物理1) ZigBee 的激活;2) 當(dāng)前信道的能量檢測(cè);3) 接收鏈路服務(wù)質(zhì)量信息;4) ZigBee 信道接入方式;5) 信道頻率選擇;126)數(shù)據(jù)傳輸和接收。介質(zhì)接入子層(MAC)MAC 層負(fù)責(zé)處理所有的物理無(wú)線信道,并產(chǎn)生網(wǎng)絡(luò)信號(hào)、同步信號(hào);支持 PAN連接和分離,提供兩個(gè)對(duì)等 MAC 實(shí)體之間可靠的鏈路。MAC 層功能:1) 網(wǎng)絡(luò)協(xié)調(diào)器產(chǎn)生信標(biāo);2) 與信標(biāo)同步;3) 支持 PA

17、N(個(gè)域網(wǎng))鏈路的建立和斷開;4) 為設(shè)備的安全性提供支持;5)信道接入方式采用免載波檢測(cè)多址接入(CSMA-CA)機(jī)制;6) 處理和維護(hù)保護(hù)時(shí)隙(GTS)機(jī)制;7) 在兩個(gè)對(duì)等的 MAC 實(shí)體之間提供一個(gè)可靠的通信鏈路。網(wǎng)絡(luò)層(NWK)ZigBee 協(xié)議棧的部分在網(wǎng)絡(luò)層。網(wǎng)絡(luò)層主要實(shí)現(xiàn)節(jié)點(diǎn)加入或離開網(wǎng)絡(luò)、接收或拋棄其他節(jié)點(diǎn)、路由查找及傳送數(shù)據(jù)等功能。網(wǎng)絡(luò)層功能:1) 網(wǎng)絡(luò)發(fā)現(xiàn);2) 網(wǎng)絡(luò)形成;3)設(shè)備連接;4) 路由器初始化;5) 設(shè)備同網(wǎng)絡(luò)連接;6) 直接將設(shè)備同網(wǎng)絡(luò)連接;7) 斷開網(wǎng)絡(luò)連接;8) 重新復(fù)位設(shè)備;9)同步;10)信息庫(kù)維護(hù)。 應(yīng)用層(APL)ZigBee 應(yīng)用層框架包括應(yīng)用

18、支持層(APS)、ZigBee 設(shè)備對(duì)象(ZDO)和制造商所定義的應(yīng)用對(duì)象。應(yīng)用支持層的功能包括:維持綁定表、在綁定的設(shè)備之間傳送消息。ZigBee 設(shè)備對(duì)象的功能包括:定義設(shè)備在網(wǎng)絡(luò)中的(如 ZigBee 協(xié)調(diào)器和終端設(shè)備),發(fā)起和響應(yīng)綁定請(qǐng)求,在網(wǎng)絡(luò)設(shè)備之間建立安全機(jī)制。ZigBee 設(shè)備對(duì)象還負(fù)責(zé)發(fā)現(xiàn)網(wǎng)絡(luò)中的設(shè)備,并且決定向他們提供何種應(yīng)用服務(wù)。ZigBee 應(yīng)用層除了提供一些必要函數(shù)以及為網(wǎng)絡(luò)層提供合適的服務(wù)接口外,一個(gè)重要的功能是應(yīng)用者可在這層定義的應(yīng)用對(duì)象。應(yīng)用程序框架(AF):運(yùn)行在 ZigBee 協(xié)議棧上的應(yīng)用程序?qū)嶋H上就是廠商自定義的應(yīng)用對(duì)象,并且遵循規(guī)范(profile)運(yùn)

19、行在端點(diǎn) 1 240 上。在 ZigBee 應(yīng)用中,提供 2 種標(biāo)準(zhǔn)服務(wù)類型:鍵值對(duì)(KVP)或報(bào)文(MSG)ZigBee 設(shè)備對(duì)象(ZDO):ZigBee 設(shè)備對(duì)象(ZDO)的功能包括負(fù)責(zé)定義網(wǎng)絡(luò)中設(shè)備的,如:協(xié)調(diào)器或者終端設(shè)備。還包括對(duì)綁定請(qǐng)求的初始化或者響應(yīng),在網(wǎng)絡(luò)設(shè)備之間建立安全等。實(shí)現(xiàn)這些功能,ZDO 使用 APS 層的 APSDE-SAP 和網(wǎng)絡(luò)層的 NLME-SAP。ZDO 是特殊的應(yīng)用對(duì)象,它在端點(diǎn)(entire)0 上實(shí)現(xiàn)。設(shè)備通過 ZDO 請(qǐng)求描述符信息,1314接收到這些請(qǐng)求時(shí),ZDO 會(huì)調(diào)用配臵對(duì)象獲取相應(yīng)描述符值。三、 溫濕度傳感器模塊DHT11 數(shù)字溫濕度傳感器是一

20、款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用 的數(shù)字模塊 技術(shù)和溫濕度傳感技術(shù),確保 具有極高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。DHT11 引腳:+(VCC),S(DATA),-(GND),實(shí)驗(yàn)相關(guān)寄存器DHT11 數(shù)字溫濕度傳感器用到了串口和 P0_7,前面已詳細(xì)講解了串口相關(guān)寄存器的配置與使用, DHT11 程序采用模塊化編程思想,只需調(diào)用溫度 函數(shù)即可,相當(dāng)方便,移植到其它平臺(tái)也非常容易。四、氣體模塊接線方式:1、VCC:接電源正極(5V)2、GND:接電源負(fù)極3、DO:TTL 開關(guān)信號(hào)輸出4、AO:模擬信號(hào)輸出(懸空沒有使用)4實(shí)驗(yàn)相關(guān)寄存器實(shí)驗(yàn)中使用 P0_6 做為檢測(cè)引腳,當(dāng)濃度高

21、于設(shè)定值時(shí) ,P0_6 為低電平, 狀態(tài)時(shí)為正常高電平。DO 輸出電平和廠家有關(guān),具體信息請(qǐng)參考模塊的參數(shù)。配置法:P0SEL &= 0x40;/設(shè)置 P0.6 為普通 IO 口P0DIR &= 0x40;/P0.6 定義為輸P0_6的方五、紅外傳感器模塊D-SUN PIR靠性強(qiáng)、紅外感應(yīng)模塊 是基于紅外線技術(shù)的自動(dòng)。靈敏度高、可超低功耗,超低電壓工作模式。接線方式:151、VCC:接電源正極(5V)2、OUT:檢測(cè)引腳3、GND:接電源負(fù)極的模塊請(qǐng)仔細(xì)核對(duì)一下引腳,確保連接正確。4實(shí)驗(yàn)相關(guān)寄存器實(shí)驗(yàn)中使用 P0_4 作為檢測(cè)引腳, 人進(jìn)入其感應(yīng)范圍模塊輸出高電平,點(diǎn)亮 LED

22、1, 人離開感應(yīng)范圍 LED1 熄滅 P0.4 口為 HC-SR501 傳感器的輸入端。具體 HC-SR501 人體感應(yīng)模塊OUT 輸出電平由模塊決定,不同廠家可能不一樣,不一樣關(guān)系也不大,改動(dòng)非常的小。六、光敏傳感器模塊4實(shí)驗(yàn)相關(guān)寄存器仔細(xì)核對(duì)引腳后將傳感器插到 P9 上,繼電器、光敏、熱敏共用不同,P0.5 引腳,不過配置當(dāng)使用繼電器 P0.5 作為輸出引腳,使用光敏、熱敏時(shí)配置成輸入引腳。1617七、 繼電器模塊1 路繼電器模塊,低電平觸發(fā),上面寫有 5V 其實(shí)只能用 3.3V 驅(qū)動(dòng),5V 工作不正常的哦,購(gòu)買時(shí)請(qǐng)選 3.3V 或者兼容 3.3V 的繼電器,買圖片中的也可正常使用。接線方

23、式:1、VCC:接電源正極2、GND:接電源負(fù)極3、IN: 信號(hào)輸入端4實(shí)驗(yàn)相關(guān)寄存器實(shí)驗(yàn)中將繼電器接開發(fā)板 P9 座子,使用 P0.5 口作為繼電器的信號(hào)輸入端,高電平繼電器斷開;低電平繼電器吸合,并且繼電器吸合指示燈亮。八、MFC 上位機(jī)模塊簡(jiǎn)單而強(qiáng)大的多線程串口編程工具 CserialPort 類(附 VC 基于 MFC 單文檔協(xié)議通訊源程序及詳細(xì)編程步驟)老有人覺得 MSComm 通訊控件很土,更有聲疾呼:忘了它吧。確實(shí)當(dāng)我們對(duì)串口編程有了一定的了解后,應(yīng)該用 API 函數(shù)寫一個(gè)屬于的串口程序,由于編程者對(duì)程序了解,對(duì)程序修改自如。但我一直沒有停止過用 MSComm 通訊控件,那么簡(jiǎn)單

24、的東西,對(duì)付簡(jiǎn)單的任務(wù)完全可以,但當(dāng)我們需要在程序中用多個(gè)串口, 而且還要做很多復(fù)雜的處理,那么最好不用 MSComm 通訊控件,如果這時(shí)你還不愿意 編寫底層,就用這個(gè)類:CserialPort 類。這是 Remon Spekreijse 寫的一個(gè)串口類, 地址在:類作者 Remon Spekreijse 已作了一個(gè)基于框的同時(shí)檢測(cè) 4 個(gè)串口示例的程序,在上面的和我主頁(yè)的串口源碼頁(yè)也可以找到。我在這兒主要介紹如何將這18個(gè)類應(yīng)用到 VC 中基于文檔的程序中。為了加深對(duì)串口數(shù)據(jù)處理的了解,我們利用這個(gè)類解決如下問題:?jiǎn)栴}:串口 2(COM2)每隔 1 秒向串口 1(COM1)的 NEMA 格式

25、的報(bào)文:串頭為$,串尾為,中間為一個(gè)后是 hh 校驗(yàn),規(guī)定 hh 為<LF>。整個(gè)數(shù)據(jù)包為$x 的整數(shù)( 比如 2345,不足 4 位則前面以 0 代替代),最x 四個(gè)數(shù)的半 BYTE 校驗(yàn)和,最后加上回車<CR>與換行x*hh<CR><LF>。串口 1 收到上述報(bào)文后,校驗(yàn)正確后,將發(fā)來的數(shù)據(jù)顯示在視窗中,并記下發(fā)來的正確幀數(shù)和錯(cuò)誤幀數(shù),若正確,還向串口 2計(jì)數(shù)顯示在視窗中。測(cè)試方法:Y,串口 2 收到 Y 后將收到的 Y 的將三線制串口線聯(lián)接上同一臺(tái)計(jì)算機(jī)的兩個(gè)串口,編好程序后就可測(cè)試。如果沒有兩個(gè)串口的微機(jī),改改程序。好了,你可以先源程序:

26、 scporttest.zip(大小:49KB,VC6,WIN9X/2000,SerialPort.h SerialPort.cpp 是兩個(gè)類文件)編程步驟: 1. 建立程序:建立一個(gè)基于單文檔的 MFC 應(yīng)用程序 SCPortTest,所有步驟保持缺省狀態(tài)。 2. 添加類文件:將 SerialPort.h SerialPort.cpp 兩個(gè)類文件到工程文件夾中,用 Project-Add toProject-Files 命令將上述兩個(gè)文件加入工程。并在 SCPortTestView.h 中將頭文件SerialPort.h 說明:#include "SerialPort.h"

27、;。 3. 人工增加串口消息響應(yīng)函數(shù):OnCommunication(WPARAM ch, LPARAM port)首先在 SCPortTestView.h 中添加串口字符接收消息 WM_COMM_RXCHAR(串口接收緩沖區(qū)內(nèi)有一個(gè)字符)的響應(yīng)函數(shù)/AFX_MSG(CSCPortTestView):afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);/AFX_MSG然后在 SCPortTestView.cpp 文件中進(jìn)行 WM_COMM_RXCHAR 消息BEGIN_MESSAGE_MAP(CSCPortTestView, CView)/

28、AFX_MSG_MAP(CSCPortTestView) ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)/AFX_MSG_MAP END_MESSAGE_MAP()接著在 SCPortTestView.cpp 中加入函數(shù)的實(shí)現(xiàn):LONG CSCPortTestView:OnCommunication(WPARAM ch, LPARAM port) . :19注意:由于這個(gè)串口類加入工程后,沒有自動(dòng)的消息要手工添加。機(jī)制,因此上述步驟均需 4 初始化串口在視創(chuàng)建時(shí)初始化串口,首先利用 ClassWizardr 按下圖生成 OnInitialUpdate()

29、函數(shù)。接著在 SerialPort.h 文件中說明我們?cè)诔绦蛑幸玫降娜肿兞浚?保存兩個(gè)串口接收數(shù)據(jù):char m_chChecksum; /用于 COM1 的校驗(yàn)和計(jì)算CString m_strRXhhCOM1; /用于存放 COM1 接收的半 BYTE 校驗(yàn)字節(jié) hh CString m_strRXDataCOM1; /COM1 接收數(shù)據(jù)CString m_strRXDataCOM2; /COM2 接收數(shù)據(jù)UINT m_nRXErrorCOM1; /COM1 接收數(shù)據(jù)錯(cuò)誤幀數(shù)UINT m_nRXErrorCOM2; /COM2 接收數(shù)據(jù)錯(cuò)誤幀數(shù)UINT m_nRXCounterCOM1;

30、 /COM1 接收數(shù)據(jù)錯(cuò)誤幀數(shù)UINT m_nRXCounterCOM2; /COM2 接收數(shù)據(jù)錯(cuò)誤幀數(shù) CString再在 SerialPort.h 文件中說明串口類對(duì)象:CSerailPort m_ComPort2;因?yàn)橐跏蓟?2 個(gè)串口,所以這里用了數(shù)組。下面是初始化串口 1 和串口 2:void CSCPortTestView:OnInitialUpdate()CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base class m_chChecksum=0; /校驗(yàn)和置 0

31、m_nRXErrorCOM1=0; /COM1 接收數(shù)據(jù)錯(cuò)誤幀數(shù)置 0m_nRXErrorCOM2=0; /COM2 接收數(shù)據(jù)錯(cuò)誤幀數(shù)置 0 m_nRXCounterCOM1=0; /COM1 接收數(shù)據(jù)錯(cuò)誤幀數(shù)置 0 m_nRXCounterCOM2=0; /COM2 接收數(shù)據(jù)錯(cuò)誤幀數(shù)置 0(public)。m_strRXhhCOM1.Empty(); /清空半 BYTE 校驗(yàn) hh for(int i=0;i<2;i+)變量if (m_ComPorti.InitPort(this,i+1,9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512)/p

32、ortnr=1(2),baud=960,parity='N',databits=8,stopsbits=1,/dwCommEvents=EV_RXCHAR|EV_RXFLAG,nBufferSize=512m_ComPorti.StartMonitoring(); /啟動(dòng)串口監(jiān)視線程if(i=1) SetTimer(1,1000,NULL); /設(shè)置定時(shí)器,1 秒后elseCString str;數(shù)據(jù)20str.Format("COM%d 沒有發(fā)現(xiàn),或被其它設(shè)備占用",i+1); AfxMessageBox(str); 5 利用ClassWizard 按下圖

33、生成CSCPortTestView 的時(shí)間消息WM_TIMER 響應(yīng)函數(shù):void CSCPortTestView:OnTimer(UINT nIDEvent)/ TODO: Add your message handler code here and/or call default int randdata=rand()%9000; /產(chǎn)生 9000 以內(nèi)的隨機(jī)數(shù)CString strSendData; strSendData.Format("%04d",randdata);SendString(strSendData, 2); /串口 2 CView:OnTimer(n

34、IDEvent);數(shù)據(jù);上面用到的 SendString()需按如下方式生成:在 ClassView 中單擊鼠標(biāo)右鍵,在環(huán)境菜單中選擇 AddS Member Function:void CSCPortTestView:SendString(CString &str, int Port)char checksum=0,cr=CR,lf=LF; char c1,c2;for(int i=0;i<str.GetLength();i+) checksum = checksumstri;c2=checksum & 0x0f; c1=(checksum >> 4) &a

35、mp; 0x0f); if (c1 < 10) c1+= '0' else c1 += 'A' - 10;if (c2 < 10) c2+= '0' else c2 += 'A' - 10;CString str1; str1='$'+str+"*"+c1+c2+cr+lf;m_ComPortPort-1.WriteToPort(LPCTSTR)str1);請(qǐng)注意上面函數(shù)中是如何生成接收的校驗(yàn)檢測(cè)方式要一致。的,要切記的是的生成方式和對(duì)方 6 在 OnCommunication(WP

36、ARAM ch, LPARAM port)函數(shù)中進(jìn)行數(shù)據(jù)處理說明:WPARAM、 LPARAM 類型是多態(tài)數(shù)據(jù)類型(polymorphic data type),在 WIN32 中為 32 位,支持多種數(shù)據(jù)類型,根據(jù)需要自動(dòng)適應(yīng),這樣程序有很強(qiáng)的適應(yīng)性。在此我們可以分別理解為 char 和 integer 類型數(shù)據(jù)。21每當(dāng)串口接收緩沖區(qū)內(nèi)有一個(gè)字符時(shí),就會(huì)產(chǎn)生一個(gè) WM_COMM_RXCHAR 消息,觸發(fā) OnCommunication 函數(shù),這時(shí)我們就可以在函數(shù)中進(jìn)行數(shù)據(jù)處理,所以這個(gè)消息就是整個(gè)程序的"發(fā)"。下面是根據(jù)本文最初提出的問題寫出的處理函數(shù):LONG CSC

37、PortTestView:OnCommunication(WPARAM ch, LPARAM port)static int count1=0,count2=0,count3=0; static char c1,c2;static int flag; CString strCheck=""if(port=2) /COM2 接收到數(shù)據(jù)CString strtemp=(char)ch; if(strtemp="Y")m_nRXCounterCOM2+; CString strtemp;strtemp.Format("COM2: NO.%06d&qu

38、ot;, m_nRXCounterCOM2);CDC* pDC=GetDC(); /準(zhǔn)備數(shù)據(jù)顯示pDC->TextOut(10,50,strtemp);/顯示接收到的數(shù)據(jù)ReleaseDC(pDC);if(port=1) /COM1 接收到數(shù)據(jù)m_strRXDataCOM1 += (char)ch; switch(ch)case '$':m_chChecksum=0; /開始計(jì)算 CheckSum flag=0;break; case '*':flag=2;c2=m_chChecksum & 0x0f; c1=(m_chChecksum >&

39、gt; 4) & 0x0f); if (c1 < 10) c1+= '0' else c1 += 'A' - 10;if (c2 < 10) c2+= '0' else c2 += 'A' - 10;break; case CR:break; case LF:m_strRXDataCOM1.Empty();22break; default:if(flag>0)m_strRXhhCOM1 += ch; /得到收到的校驗(yàn)值 hh if(flag=1)strCheck = strCheck+c1+c2; /計(jì)算

40、得到的校驗(yàn)值 hh if(strCheck!=m_strRXhhCOM1) /如果校驗(yàn)有錯(cuò)m_strRXDataCOM1.Empty(); m_nRXErrorCOM1+; /串口 1 錯(cuò)誤幀數(shù)加 1elsem_nRXCounterCOM1+;if(m_strRXDataCOM1.Left(1)="$") /接收數(shù)據(jù)的第一個(gè)字符是$嗎?char tbuf6;char *temp=(char*)(LPCTSTR)m_strRXDataCOM1); tbuf0=temp1; tbuf1=temp2;tbuf2=temp3; tbuf3=temp4; tbuf4=0; /0 表示

41、字符串的結(jié)束,必要int data=atoi(tbuf);CString strDisplay1,strDisplay2;strDisplay1.Format("NO.%06d:Thereseiveddatais %04d",m_nRXCounterCOM1,data);strDisplay2.Format("Error Counter=%04d.",m_nRXErrorCOM1); CDC* pDC=GetDC(); /準(zhǔn)備數(shù)據(jù)顯示/int nColor=pDC->SetTextColor(RGB(255,255,0); pDC->Text

42、Out(10,10,strDisplay1);/顯示接收到的數(shù)據(jù)pDC->TextOut(30,30,strDisplay2);/顯示錯(cuò)誤幀數(shù)/pDC->SetTextColor(nColor); ReleaseDC(pDC);CString str1="Y"m_ComPort0.WriteToPort(LPCTSTR)str1);/m_strRXhhCOM1.Empty();flag-;elsem_chChecksum = ch;應(yīng)答信號(hào) Y2324break;return 0;九、 Android 客戶端模塊首先是還是界面設(shè)計(jì)分別是 IP 輸入、Port 輸

43、入、連接按鈕、接受信息文本框、輸入框、界面設(shè)計(jì)好之后,為對(duì)應(yīng)控件添加相應(yīng)功能。按鈕。以下是幾個(gè)相應(yīng)的函數(shù)12345678910111213141516171819202122/* 初始化*/voidinit()/綁定控件對(duì)象_sendBtn = (Button)findViewById(R.id.sendBtn);_connectBtn = (Button)findViewById(R.id.connectBtn);_ipText = (EditText)findViewById(R.id.ip_editText);_porText = (EditText) findViewById(R.id

44、.port_editText);_rxTextView = (TextView) findViewById(R.id.rx_textView);_txText = (EditText) findViewById(R.id.tx_EditText);_textScrollView = (ScrollView) findViewById(R.id.scrollView/將按鈕添加進(jìn)_sendBtn.setOnClickListener(this);_connectBtn.setOnClickListener(this);/* 文本框顯示*/public void printf(String str

45、)2523242526272829303132rxTextString += str + "n"runOnUiThread(new Runnable()public void run()/ TODO Auto-generated method stub_rxTextView.setText(rxTextString);_textScrollView.scrollTo(0,33_textScrollView.getHeight();/滾動(dòng)至最后一行343536);這里要注意,在主線線程之外的線程中直接更新頁(yè)面顯示常會(huì)報(bào)錯(cuò)。拋出異 常: android.view.ViewRoo

46、t$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.解決方法如上文代碼中,使用 android 控件自帶的 runOnUiThread 方法,將更新事件傳入主線程排隊(duì)處理即可。按鈕部分的代碼,程序會(huì)之前加入 click器的控件對(duì)象:123456789Overridepublic void onClick(View v) / TODO Auto-generated method stub switch (v.getId() case

47、R.id.connectBtn: if(_connectBtn.getText().equals("Connect")printf("正在連接."); connect();/建立連接rxListenerThread = new10TCPListenerThread(inputStream,this);/建立線程11121314151617181920rxListenerThread.start();else/斷開連接onDestroy();break;case R.id.sendBtn:sendMessage(_txText.getText().toSt

48、ring();/消息262721break;2223 default:24 break;25網(wǎng)絡(luò)連接的部分參考之前的這篇 Android Socket TCP 客戶端簡(jiǎn)單實(shí)例這里要注意一下斷開連接時(shí)的關(guān)閉順序問題,如果在調(diào)用 socket.close()方法后, 還繼續(xù)對(duì)socket.outputStream 或 inputStream 進(jìn)行讀寫,則會(huì)拋出socket closed 異常。所以在關(guān)閉 socket 前一定要先關(guān)閉客戶端的消息線程,停止對(duì) socket 相關(guān)流的讀寫。具體參見源碼。整個(gè)程序已經(jīng)Android 4.0 以后的版本進(jìn)行了兼容,4.0 版本以后不可在主線程中進(jìn)行網(wǎng)絡(luò)連接

49、,因此由原有的在主線程中調(diào)用 socket 連接,改成了在子線程中調(diào)用,關(guān)于線程間的通信問題參見 Android 主線程、子線程間的通信問題本 Demo 基本按照之前的兩篇博客的知識(shí)要點(diǎn)進(jìn)行了一個(gè)簡(jiǎn)單的舉一反三及整合,這里就不再對(duì)整個(gè)流程說明了,大家具體參考源碼。最后發(fā)一個(gè)程序在 Android上的截圖:十、模塊28模塊的原理基本同上,此處不在贅述。Mp3 音樂背景:器盡管市場(chǎng)上的 mp3 種類多種多樣,功能豐富,外觀設(shè)計(jì)也越來越人性化,但是現(xiàn)在 mp3 大本分都將器和器,這種做法使 mp3 的便捷性得到了很大提高,但是也帶來了一些問題,比如空間無(wú)法擴(kuò)展,也無(wú)法應(yīng)用于其他方面,本系統(tǒng)將器與器分

50、離,使其更便于其他測(cè)試,還可在本系統(tǒng)基礎(chǔ)上增加測(cè)量頻率和電壓電流的功能。MP3器基本框架圖:1、U 盤模塊主要ch375( 1) 功能簡(jiǎn)介CH375 是一種 USB 總線的通用接口, 可以方便地掛接到單片機(jī)的總線上 。 同時(shí) , CH375 的 USB 主機(jī)方式支持常用的 USB 全速設(shè)備 , 外部單片機(jī)可以通過 CH375 按照相應(yīng)29VS1003 音頻模塊Device 89C58RD+ 單片機(jī)CH375 U 盤模塊HostU 盤30的 USB 協(xié)議與 USB 設(shè)備通訊 。 而且 , 單片機(jī)可以直接調(diào)用子程序庫(kù)讀寫 U 盤中的文件數(shù)據(jù) , 硬件上只需在原單片機(jī)系統(tǒng)中增加一個(gè) CH375, 綜

51、本較低。( 2) 性能CH375支 持 全 速 的 USB HOST 主 機(jī) 接 口 , 兼 容 USB V2.0 , 元器件只需要晶體和電容 ; 支持動(dòng)態(tài)切換主機(jī)與設(shè)備方式 ; 支持常用的 12 Mb/ s 全速 U S B 設(shè)備 ; 支持 U S B 設(shè)備的 傳輸 、 批量傳輸、 中斷傳輸 ; 可自動(dòng)檢測(cè) U S B 設(shè)備的連接與斷開 ; 提供設(shè)備連接和斷開的 通知 。 其并行接口包含 8 位數(shù)據(jù)總線 , 4 線 : 讀選通、寫選通、片選輸入、中斷輸出 。 支持 5V 電源電壓和 3.3 V 電源電壓 , CH375 還支持低功耗模式 。內(nèi)置了電源上電復(fù)位電路 , 一般情況下 , 不需要外

52、部提供復(fù)位。其正常工作時(shí)需要外部為其提供 12 MHz 的時(shí)鐘信號(hào) 。CH375 提供了 U 盤文件級(jí)子程序庫(kù) , 單片機(jī)可以直接調(diào)用子程序讀寫 U 盤的文件數(shù)據(jù) 。CH375 的 U 盤文件級(jí)子程序庫(kù)支持常用的 FAT12 , FAT16 和 FAT32 文件系統(tǒng) ,支持 U 盤最大容量 100 GB 。單片機(jī)不需要考慮文件系統(tǒng) ,只要了解文件名 、 文件長(zhǎng)度等基礎(chǔ)知識(shí)。一個(gè) U 盤中可以有多個(gè)文件 , 每個(gè)文件都是一組數(shù)據(jù)的集合 , 以文件名區(qū)分和識(shí)別 。子程序庫(kù)對(duì) U 盤文件的讀寫方式分為 2 種 : 扇區(qū)模式和字節(jié)模式 。在扇區(qū)模式下 , 以扇區(qū) ( 每個(gè)扇區(qū)通常是 512 B) 為基

53、本對(duì) U 盤進(jìn)行讀寫操作 ,所以讀寫操作比較快 , 但是在通常情況下需要額外的文件數(shù)據(jù)緩沖區(qū) , 額外的文件數(shù)據(jù)緩沖區(qū)必須是扇區(qū)長(zhǎng)度 512 的整數(shù)倍 , 所以適用于 RA M 多 、 數(shù)據(jù)量大 、 頻繁讀寫數(shù)據(jù)的單片機(jī)系統(tǒng)。在字節(jié)模式下 ,以字節(jié)為基本單位對(duì) U 盤文件進(jìn)行讀寫 ,讀寫速度較慢 , 但是不需要額外的文件數(shù)據(jù)緩沖區(qū) , 使用方便 , 對(duì)大多單片機(jī)系統(tǒng)都比較適用 。 每次新建或者打開一個(gè)文件后 , 默認(rèn)為扇區(qū)模式 , 支持以扇區(qū)為基本的讀寫操作 。 當(dāng)執(zhí)行一次以字節(jié)為基本的操作命令后將自動(dòng)進(jìn)入字節(jié)模式 。常用的子程序有 : CH375Init , 初始化 CH375, 可以用 C

54、 H375Liblnit 代替 。C H375DiskConnect ,U 盤是否連接 ,建議不要頻繁。C H375Disk Ready ,U 盤是否 準(zhǔn) 備 就 緒 , 通 常 只 有 在 就 緒 后 才 能 正 常 讀 寫。CH375FileOpen , 打開 指 定 名 稱 的 文 件 或 者 目 錄。CH375FileCreat e ,新建文件并打開 , 如果文件已經(jīng)存在則先刪 除 后 再 新 建 。CH375FileClose , 關(guān) 閉 當(dāng) 前 文 件。CH375FileLocate , 以 扇 區(qū) 為移 動(dòng) 當(dāng) 前 文 件 指 針。CH375FileReadX ,以扇區(qū)為從當(dāng)前文 件數(shù) 據(jù)。CH375Fil e Write X ,以扇區(qū)為向當(dāng)前文件寫入數(shù)據(jù)。C H375ByteLoca

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論