




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第九屆智控大賽設計報告 智能家居系統(tǒng) 電子與信息學院 學院 信息工程專業(yè)學生 黃國航,王得丘 隊名 LHW提交日期 2014 年 3 月 29 日摘要本實現(xiàn)了基于 Zigbee、MFC、Android、OpenGL 的智能宿舍系統(tǒng)、可以廣泛應用于各種實際生活中。本使用了 Zigbee 模塊、溫濕度感應模塊、氣體感應模塊、繼電器模塊、光敏傳感器模塊等各種復雜種類的模塊,具有極強的功能和協(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ù)及測試結(jié)果分析。4正文一、 方案比較1)設計并制作一套智能家居系統(tǒng),對家用設備、家庭成員出入管理。系統(tǒng)由主控機及分散終端組成,主控機負責對用戶進出戶和家用電器的管理等任務,終端負責門禁與家用電器設備的。系統(tǒng)通過無線的方式組網(wǎng),主機和終端之間可以雙向通信,終端間可不進行通信,終端可以方便增加。主機上編寫友好的人機界面,方便系統(tǒng)本系統(tǒng)演示時,終端數(shù)>= 2。、設置等操作。方案一:用 51 單片機+NRF2401 無線通訊模
4、塊方案二:用 51 單片機+Zigbee 無線通訊模塊方案三:用 51 單片機+/GPRS 模塊方案一最省錢,最,但是功能最簡陋;方案三功能很強大,但最昂貴;方案二價錢中等,且功能較強大,故我們選擇方案二。2)終端一:電子門禁執(zhí)行器,1、負責 ID 卡信息掃描,提示用戶類型,并將用戶信息傳送給主機;2、執(zhí)行開門動作(可由終端本身產(chǎn)生,也可由主機產(chǎn)生),開門動作可用聲光代替;方案一:用 51 單片機+RC522 模塊方案二:用 51 單片機+RFID 模塊方案三:用 51 單片機+NFC 模塊方案一最省錢,最,功能基本能達到我們的要求;方案三功能很強大,但最昂貴;方案二價錢也很昂貴,且功能較強大
5、。故我們選擇方案一。3)終端二:為家用電器電源開關端(電燈等)。需完成以下功能:1、在未聯(lián)網(wǎng)的情況下,現(xiàn)場演示與主機進行聯(lián)網(wǎng),并且斷電重啟后無需再次聯(lián)網(wǎng);2、當用戶開門時登記并向主機傳輸使用者信息;3、執(zhí)行開關動作,電燈電源開關采用繼電器,繼電器輸出端不需要接市電,但需以某種形式展現(xiàn)開關動作。(電燈可用 LED 代替)方案:用 51 單片機+Zigbee 無線通訊模塊54)主機:1、應具有良好的人機界面,可與終端進行雙向通的用戶信息。2、主機操作對象分為:主要家庭成員和家庭收終端提交兩種。其中,家庭可在主機執(zhí)行添加、刪除終端操作(終端一不可移除)。3、建立良好的界面可進行終端電燈的亮滅。方案一
6、:用 MFC 上位機+Zigbee 無線通訊模塊方案二:用 VB 上位機+Zigbee 無線通訊模塊方案三:用 Android 上位機+Zigbee 無線通訊模塊方案二開發(fā)起來比較快,功能也很簡陋;方案一和方案三都具有較強的功能和較大的開發(fā)周期,故我們選擇了方案一和方案三。發(fā)揮部分1) 在滿足一定條件時(超過夜晚 12 點,需要自行設置時間),主機束指令,實現(xiàn)自動斷電,關閉門禁等功能。結(jié)方案:用 51 單片機+Zigbee 無線通訊模塊2) 在主機上建立設備和的信息數(shù)據(jù)庫,可實時家庭成員開門等信息。方案:用 MFC 上位機+Zigbee 無線通訊模塊3) 可方便導出門禁設備及電燈使用情況,導出
7、至 PC 可使用 txt 格式(excel、word 等 better)。方案:用 MFC 上位機+Zigbee 無線通訊模塊4) 實現(xiàn)異常監(jiān)督功能。如掉網(wǎng)、突然掉電等。方案:用 51 單片機+Zigbee 無線通訊模塊5) 其他創(chuàng)新(如識別進行開門操作等)。方案:用 51 單片機+Zigbee 無線通訊模塊+語音識別模塊6二、 設計和論證第一章系統(tǒng)方案7第二章功能與指標8第三章實現(xiàn)原理TQ2440-LinuxQTAndroidOpenGLMFCZigbee9一、 Zigbee 概述物聯(lián)網(wǎng)的定義是:通過射頻識別(RFID)、紅外感應器、全球 、激光掃描器等信息傳感設備,按約定的協(xié)議,把任何物體
8、與互聯(lián)網(wǎng)相連接,進行信息交換和通信,以實現(xiàn)對物體的智能化識別、 、跟蹤、 和管理的一種網(wǎng)絡。無線傳感網(wǎng)絡的定義是:大規(guī)模,無線、自組織、多跳、無分區(qū)、無基礎設施支持的網(wǎng)絡其中的節(jié)點是同構(gòu)的、成本較低、體積較小,大部分節(jié)點不移動,被隨意撒布在工作區(qū)域,要求網(wǎng)絡系統(tǒng)有盡可能長的工作時間。 在通信方式上,雖然可以采用有線、無線、紅外和光等多種形式,但一般認為短距離的無線低功率通信技術最適合傳感器網(wǎng)絡使用,為明確起見,一般稱無線傳感器網(wǎng)絡(WSNWireless Sensor Network)。Zigbee 是 IEEE 802.15.4 協(xié)議的代名詞。根據(jù)這個協(xié)議規(guī)定的技術是一種短距離、低功耗的無線
9、通信技術。這一名稱來源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飛翔和“嗡嗡”(zig)地抖動翅膀的“舞蹈”來與同伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式 了群體中的通信網(wǎng)絡。其特點是近距離、低復雜度、自組織、低功耗、低數(shù)據(jù)速率、低成本。主要適合用于自動 和 領域,可以嵌入各種設備。簡而言之, ZigBee 就是一種便宜的,低功耗的近距離無線組網(wǎng)通訊技術。無線傳感網(wǎng)絡的無線通信技術可以采用 ZigBee 技術、藍牙、Wi-Fi 和紅外等技術。ZigBee 技術是一種短距離、低復雜度、低功耗、低數(shù)據(jù)速率、低成本的雙向無線通信技術或無線網(wǎng)絡技術,是一組基于 IEEE802.15.4 無線標準
10、研制開發(fā)的組網(wǎng)、安全和應用軟件方面的通信技術。協(xié)議棧是指網(wǎng)絡中各層協(xié)議的總和,其形象的反映了一個網(wǎng)絡中文件傳輸?shù)倪^程:由上層協(xié)議到底層協(xié)議,再由底層協(xié)議到上層協(xié)議。使用最廣泛的是英特網(wǎng)協(xié)議棧,由上到下的協(xié)議分別是:應用層(HTTP, TELNET, DNS,等),層(TCP, UDP),網(wǎng)絡層(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),并在此基礎上定義了
11、網(wǎng)絡層(NWK)和應用層(APL)架構(gòu)。ZigBee2007/PRO 無線傳感器網(wǎng)絡與 ZigBee2006 無線傳感器網(wǎng)絡相比最大區(qū)別在于其支持最新 ZigBee2007/PRO 網(wǎng)絡,提供更精確傳感器(如增加高精度溫濕度數(shù)字傳感器等),提供可擴展接口,提供更大網(wǎng)絡支持,速度更快/處理能力更強低功耗微器等。ZigBee 的技術特性決定它將是無線傳感器網(wǎng)絡的最好選擇,廣泛用于物聯(lián)網(wǎng),自動和監(jiān)視等諸多領域。以美國德州儀器 TI 公司 CC2430/CC2530為代表的 ZigbeeSOC 解決方案在國內(nèi)高校企業(yè)掀起了一股 Zigbee 技術應用的熱潮。 CC2430/CC2530 集成了 51
12、單片機內(nèi)核, 相比于眾多的 Zigbee CC2430/CC2530 頗受青睞。,ZigBee 新一代 SOC802.15.4 標準/ZigBee/ZigBee 256 個字節(jié),CC2530 是理想CC2530 是真正的片上系統(tǒng)解決方案,支持 IEEE RF4CE 和能源的應用。擁有龐大的快閃記憶體多達ZigBee 專業(yè)應用。CC2530 結(jié)合了一個完全集成的,高性能的 RF 收發(fā)器與一個 8051 微處理器,8 kB 的閃存,以及其他強大的支持功能和外設。CC2530 提供了 101dB 的鏈路質(zhì)量,優(yōu)秀的RAM,32/64/128/256 KB靈敏度和健壯的性,四種供電模式,多種閃存,以及
13、一套廣泛的外設集包括 2 個 USART、 12位 ADC 和 21 個通用 GPIO,以及。除了通過優(yōu)秀的 RF 性能、選擇性和業(yè)界標準增強 8051MCU 內(nèi)核,支持一般的低無線通信, CC2530 還可以配備 TI 的一個標準兼容或?qū)S械木W(wǎng)絡協(xié)議棧(RemoTI, Z-Stack,或發(fā),使你更快的獲得市場。 CC2530 可以用于的應用包括SimpliciTI)來簡化開、消費型電領域。子、家庭、計量和智能能源、樓宇自動化、醫(yī)療以及IEEE 802.15.4 標準概述IEEE802.15.4 是一個低速率無線個人局域網(wǎng)(LowRateWirelessalAreaNetworks,LR-WP
14、AN)標準。該標準定義了物理層(PHY)和介質(zhì)層(MAC)。這種低速率無線個人局域網(wǎng)的網(wǎng)絡結(jié)構(gòu)簡單、成本低廉、具有有限的功率和靈活的吞吐量。低速率無線個人局域網(wǎng)的主要目標是實現(xiàn)安裝容易、數(shù)據(jù)傳輸可靠、短距離通信、極低的成本、合理的電池活的通信網(wǎng)絡協(xié)議。LR-WPAN 網(wǎng)絡具有如下特點:,并且擁有一個簡單而且靈collision實現(xiàn) 250kb/s,40kb/s,20kb/s 三種傳輸速率。支持星型或者點對點兩種網(wǎng)絡拓撲結(jié)構(gòu)。具有 16支持位短地址或者 64 位擴展地址。避免載波多路偵聽技術(carriersensemultipleaccesswithavoidance ,CSMA-CA)。用于
15、可靠傳輸?shù)娜珣饏f(xié)議。低功耗。能量檢測(Energy Detection,ED)。1011 鏈路質(zhì)量指示(Link Quality Indication,LQI)。 在 2450MHz 頻帶內(nèi)定義了 16 個通道;在 915MHz 頻帶內(nèi)定義了 10個通道;在 868MHz 頻帶內(nèi)定義了 1 個通道。為了使供應商能夠提供最低可能功耗的設備,IEEE(Institute ofElectrical and Electronics Engineers ,電氣及電子工程師學會 ) 定義了兩種不同類型的設備:一種是完整功能設備(full functional device , FFD) , 另一種是簡化
16、功能設備(reducedfunctional device,RFD)。二、 Zigbee 協(xié)議棧物理層( PHY)物理層定義了物理無線信道和 MAC層管理服務。物理層內(nèi)容:子層之間的接口,提供物理層數(shù)據(jù)服務和物理1) ZigBee 的激活;2) 當前信道的能量檢測;3) 接收鏈路服務質(zhì)量信息;4) ZigBee 信道接入方式;5) 信道頻率選擇;126)數(shù)據(jù)傳輸和接收。介質(zhì)接入子層(MAC)MAC 層負責處理所有的物理無線信道,并產(chǎn)生網(wǎng)絡信號、同步信號;支持 PAN連接和分離,提供兩個對等 MAC 實體之間可靠的鏈路。MAC 層功能:1) 網(wǎng)絡協(xié)調(diào)器產(chǎn)生信標;2) 與信標同步;3) 支持 PA
17、N(個域網(wǎng))鏈路的建立和斷開;4) 為設備的安全性提供支持;5)信道接入方式采用免載波檢測多址接入(CSMA-CA)機制;6) 處理和維護保護時隙(GTS)機制;7) 在兩個對等的 MAC 實體之間提供一個可靠的通信鏈路。網(wǎng)絡層(NWK)ZigBee 協(xié)議棧的部分在網(wǎng)絡層。網(wǎng)絡層主要實現(xiàn)節(jié)點加入或離開網(wǎng)絡、接收或拋棄其他節(jié)點、路由查找及傳送數(shù)據(jù)等功能。網(wǎng)絡層功能:1) 網(wǎng)絡發(fā)現(xiàn);2) 網(wǎng)絡形成;3)設備連接;4) 路由器初始化;5) 設備同網(wǎng)絡連接;6) 直接將設備同網(wǎng)絡連接;7) 斷開網(wǎng)絡連接;8) 重新復位設備;9)同步;10)信息庫維護。 應用層(APL)ZigBee 應用層框架包括應用
18、支持層(APS)、ZigBee 設備對象(ZDO)和制造商所定義的應用對象。應用支持層的功能包括:維持綁定表、在綁定的設備之間傳送消息。ZigBee 設備對象的功能包括:定義設備在網(wǎng)絡中的(如 ZigBee 協(xié)調(diào)器和終端設備),發(fā)起和響應綁定請求,在網(wǎng)絡設備之間建立安全機制。ZigBee 設備對象還負責發(fā)現(xiàn)網(wǎng)絡中的設備,并且決定向他們提供何種應用服務。ZigBee 應用層除了提供一些必要函數(shù)以及為網(wǎng)絡層提供合適的服務接口外,一個重要的功能是應用者可在這層定義的應用對象。應用程序框架(AF):運行在 ZigBee 協(xié)議棧上的應用程序?qū)嶋H上就是廠商自定義的應用對象,并且遵循規(guī)范(profile)運
19、行在端點 1 240 上。在 ZigBee 應用中,提供 2 種標準服務類型:鍵值對(KVP)或報文(MSG)ZigBee 設備對象(ZDO):ZigBee 設備對象(ZDO)的功能包括負責定義網(wǎng)絡中設備的,如:協(xié)調(diào)器或者終端設備。還包括對綁定請求的初始化或者響應,在網(wǎng)絡設備之間建立安全等。實現(xiàn)這些功能,ZDO 使用 APS 層的 APSDE-SAP 和網(wǎng)絡層的 NLME-SAP。ZDO 是特殊的應用對象,它在端點(entire)0 上實現(xiàn)。設備通過 ZDO 請求描述符信息,1314接收到這些請求時,ZDO 會調(diào)用配臵對象獲取相應描述符值。三、 溫濕度傳感器模塊DHT11 數(shù)字溫濕度傳感器是一
20、款含有已校準數(shù)字信號輸出的溫濕度復合傳感器。它應用 的數(shù)字模塊 技術和溫濕度傳感技術,確保 具有極高的可靠性與卓越的長期穩(wěn)定性。DHT11 引腳:+(VCC),S(DATA),-(GND),實驗相關寄存器DHT11 數(shù)字溫濕度傳感器用到了串口和 P0_7,前面已詳細講解了串口相關寄存器的配置與使用, DHT11 程序采用模塊化編程思想,只需調(diào)用溫度 函數(shù)即可,相當方便,移植到其它平臺也非常容易。四、氣體模塊接線方式:1、VCC:接電源正極(5V)2、GND:接電源負極3、DO:TTL 開關信號輸出4、AO:模擬信號輸出(懸空沒有使用)4實驗相關寄存器實驗中使用 P0_6 做為檢測引腳,當濃度高
21、于設定值時 ,P0_6 為低電平, 狀態(tài)時為正常高電平。DO 輸出電平和廠家有關,具體信息請參考模塊的參數(shù)。配置法:P0SEL &= 0x40;/設置 P0.6 為普通 IO 口P0DIR &= 0x40;/P0.6 定義為輸P0_6的方五、紅外傳感器模塊D-SUN PIR靠性強、紅外感應模塊 是基于紅外線技術的自動。靈敏度高、可超低功耗,超低電壓工作模式。接線方式:151、VCC:接電源正極(5V)2、OUT:檢測引腳3、GND:接電源負極的模塊請仔細核對一下引腳,確保連接正確。4實驗相關寄存器實驗中使用 P0_4 作為檢測引腳, 人進入其感應范圍模塊輸出高電平,點亮 LED
22、1, 人離開感應范圍 LED1 熄滅 P0.4 口為 HC-SR501 傳感器的輸入端。具體 HC-SR501 人體感應模塊OUT 輸出電平由模塊決定,不同廠家可能不一樣,不一樣關系也不大,改動非常的小。六、光敏傳感器模塊4實驗相關寄存器仔細核對引腳后將傳感器插到 P9 上,繼電器、光敏、熱敏共用不同,P0.5 引腳,不過配置當使用繼電器 P0.5 作為輸出引腳,使用光敏、熱敏時配置成輸入引腳。1617七、 繼電器模塊1 路繼電器模塊,低電平觸發(fā),上面寫有 5V 其實只能用 3.3V 驅(qū)動,5V 工作不正常的哦,購買時請選 3.3V 或者兼容 3.3V 的繼電器,買圖片中的也可正常使用。接線方
23、式:1、VCC:接電源正極2、GND:接電源負極3、IN: 信號輸入端4實驗相關寄存器實驗中將繼電器接開發(fā)板 P9 座子,使用 P0.5 口作為繼電器的信號輸入端,高電平繼電器斷開;低電平繼電器吸合,并且繼電器吸合指示燈亮。八、MFC 上位機模塊簡單而強大的多線程串口編程工具 CserialPort 類(附 VC 基于 MFC 單文檔協(xié)議通訊源程序及詳細編程步驟)老有人覺得 MSComm 通訊控件很土,更有聲疾呼:忘了它吧。確實當我們對串口編程有了一定的了解后,應該用 API 函數(shù)寫一個屬于的串口程序,由于編程者對程序了解,對程序修改自如。但我一直沒有停止過用 MSComm 通訊控件,那么簡單
24、的東西,對付簡單的任務完全可以,但當我們需要在程序中用多個串口, 而且還要做很多復雜的處理,那么最好不用 MSComm 通訊控件,如果這時你還不愿意 編寫底層,就用這個類:CserialPort 類。這是 Remon Spekreijse 寫的一個串口類, 地址在:類作者 Remon Spekreijse 已作了一個基于框的同時檢測 4 個串口示例的程序,在上面的和我主頁的串口源碼頁也可以找到。我在這兒主要介紹如何將這18個類應用到 VC 中基于文檔的程序中。為了加深對串口數(shù)據(jù)處理的了解,我們利用這個類解決如下問題:問題:串口 2(COM2)每隔 1 秒向串口 1(COM1)的 NEMA 格式
25、的報文:串頭為$,串尾為,中間為一個后是 hh 校驗,規(guī)定 hh 為<LF>。整個數(shù)據(jù)包為$x 的整數(shù)( 比如 2345,不足 4 位則前面以 0 代替代),最x 四個數(shù)的半 BYTE 校驗和,最后加上回車<CR>與換行x*hh<CR><LF>。串口 1 收到上述報文后,校驗正確后,將發(fā)來的數(shù)據(jù)顯示在視窗中,并記下發(fā)來的正確幀數(shù)和錯誤幀數(shù),若正確,還向串口 2計數(shù)顯示在視窗中。測試方法:Y,串口 2 收到 Y 后將收到的 Y 的將三線制串口線聯(lián)接上同一臺計算機的兩個串口,編好程序后就可測試。如果沒有兩個串口的微機,改改程序。好了,你可以先源程序:
26、 scporttest.zip(大?。?9KB,VC6,WIN9X/2000,SerialPort.h SerialPort.cpp 是兩個類文件)編程步驟: 1. 建立程序:建立一個基于單文檔的 MFC 應用程序 SCPortTest,所有步驟保持缺省狀態(tài)。 2. 添加類文件:將 SerialPort.h SerialPort.cpp 兩個類文件到工程文件夾中,用 Project-Add toProject-Files 命令將上述兩個文件加入工程。并在 SCPortTestView.h 中將頭文件SerialPort.h 說明:#include "SerialPort.h"
27、;。 3. 人工增加串口消息響應函數(shù):OnCommunication(WPARAM ch, LPARAM port)首先在 SCPortTestView.h 中添加串口字符接收消息 WM_COMM_RXCHAR(串口接收緩沖區(qū)內(nèi)有一個字符)的響應函數(shù)/AFX_MSG(CSCPortTestView):afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);/AFX_MSG然后在 SCPortTestView.cpp 文件中進行 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ù)的實現(xiàn):LONG CSCPortTestView:OnCommunication(WPARAM ch, LPARAM port) . :19注意:由于這個串口類加入工程后,沒有自動的消息要手工添加。機制,因此上述步驟均需 4 初始化串口在視創(chuàng)建時初始化串口,首先利用 ClassWizardr 按下圖生成 OnInitialUpdate()
29、函數(shù)。接著在 SerialPort.h 文件中說明我們在程序中要用到的全局變量: 保存兩個串口接收數(shù)據(jù):char m_chChecksum; /用于 COM1 的校驗和計算CString m_strRXhhCOM1; /用于存放 COM1 接收的半 BYTE 校驗字節(jié) hh CString m_strRXDataCOM1; /COM1 接收數(shù)據(jù)CString m_strRXDataCOM2; /COM2 接收數(shù)據(jù)UINT m_nRXErrorCOM1; /COM1 接收數(shù)據(jù)錯誤幀數(shù)UINT m_nRXErrorCOM2; /COM2 接收數(shù)據(jù)錯誤幀數(shù)UINT m_nRXCounterCOM1;
30、 /COM1 接收數(shù)據(jù)錯誤幀數(shù)UINT m_nRXCounterCOM2; /COM2 接收數(shù)據(jù)錯誤幀數(shù) CString再在 SerialPort.h 文件中說明串口類對象:CSerailPort m_ComPort2;因為要初始化 2 個串口,所以這里用了數(shù)組。下面是初始化串口 1 和串口 2:void CSCPortTestView:OnInitialUpdate()CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base class m_chChecksum=0; /校驗和置 0
31、m_nRXErrorCOM1=0; /COM1 接收數(shù)據(jù)錯誤幀數(shù)置 0m_nRXErrorCOM2=0; /COM2 接收數(shù)據(jù)錯誤幀數(shù)置 0 m_nRXCounterCOM1=0; /COM1 接收數(shù)據(jù)錯誤幀數(shù)置 0 m_nRXCounterCOM2=0; /COM2 接收數(shù)據(jù)錯誤幀數(shù)置 0(public)。m_strRXhhCOM1.Empty(); /清空半 BYTE 校驗 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(); /啟動串口監(jiān)視線程if(i=1) SetTimer(1,1000,NULL); /設置定時器,1 秒后elseCString str;數(shù)據(jù)20str.Format("COM%d 沒有發(fā)現(xiàn),或被其它設備占用",i+1); AfxMessageBox(str); 5 利用ClassWizard 按下圖
33、生成CSCPortTestView 的時間消息WM_TIMER 響應函數(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)的隨機數(shù)CString strSendData; strSendData.Format("%04d",randdata);SendString(strSendData, 2); /串口 2 CView:OnTimer(n
34、IDEvent);數(shù)據(jù);上面用到的 SendString()需按如下方式生成:在 ClassView 中單擊鼠標右鍵,在環(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);請注意上面函數(shù)中是如何生成接收的校驗檢測方式要一致。的,要切記的是的生成方式和對方 6 在 OnCommunication(WP
36、ARAM ch, LPARAM port)函數(shù)中進行數(shù)據(jù)處理說明:WPARAM、 LPARAM 類型是多態(tài)數(shù)據(jù)類型(polymorphic data type),在 WIN32 中為 32 位,支持多種數(shù)據(jù)類型,根據(jù)需要自動適應,這樣程序有很強的適應性。在此我們可以分別理解為 char 和 integer 類型數(shù)據(jù)。21每當串口接收緩沖區(qū)內(nèi)有一個字符時,就會產(chǎn)生一個 WM_COMM_RXCHAR 消息,觸發(fā) OnCommunication 函數(shù),這時我們就可以在函數(shù)中進行數(shù)據(jù)處理,所以這個消息就是整個程序的"發(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(); /準備數(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; /開始計算 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; /得到收到的校驗值 hh if(flag=1)strCheck = strCheck+c1+c2; /計算
40、得到的校驗值 hh if(strCheck!=m_strRXhhCOM1) /如果校驗有錯m_strRXDataCOM1.Empty(); m_nRXErrorCOM1+; /串口 1 錯誤幀數(shù)加 1elsem_nRXCounterCOM1+;if(m_strRXDataCOM1.Left(1)="$") /接收數(shù)據(jù)的第一個字符是$嗎?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(); /準備數(shù)據(jù)顯示/int nColor=pDC->SetTextColor(RGB(255,255,0); pDC->Text
42、Out(10,10,strDisplay1);/顯示接收到的數(shù)據(jù)pDC->TextOut(30,30,strDisplay2);/顯示錯誤幀數(shù)/pDC->SetTextColor(nColor); ReleaseDC(pDC);CString str1="Y"m_ComPort0.WriteToPort(LPCTSTR)str1);/m_strRXhhCOM1.Empty();flag-;elsem_chChecksum = ch;應答信號 Y2324break;return 0;九、 Android 客戶端模塊首先是還是界面設計分別是 IP 輸入、Port 輸
43、入、連接按鈕、接受信息文本框、輸入框、界面設計好之后,為對應控件添加相應功能。按鈕。以下是幾個相應的函數(shù)12345678910111213141516171819202122/* 初始化*/voidinit()/綁定控件對象_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/將按鈕添加進_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();/滾動至最后一行343536);這里要注意,在主線線程之外的線程中直接更新頁面顯示常會報錯。拋出異 常: android.view.ViewRoo
46、t$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.解決方法如上文代碼中,使用 android 控件自帶的 runOnUiThread 方法,將更新事件傳入主線程排隊處理即可。按鈕部分的代碼,程序會之前加入 click器的控件對象: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)絡連接的部分參考之前的這篇 Android Socket TCP 客戶端簡單實例這里要注意一下斷開連接時的關閉順序問題,如果在調(diào)用 socket.close()方法后, 還繼續(xù)對socket.outputStream 或 inputStream 進行讀寫,則會拋出socket closed 異常。所以在關閉 socket 前一定要先關閉客戶端的消息線程,停止對 socket 相關流的讀寫。具體參見源碼。整個程序已經(jīng)Android 4.0 以后的版本進行了兼容,4.0 版本以后不可在主線程中進行網(wǎng)絡連接
49、,因此由原有的在主線程中調(diào)用 socket 連接,改成了在子線程中調(diào)用,關于線程間的通信問題參見 Android 主線程、子線程間的通信問題本 Demo 基本按照之前的兩篇博客的知識要點進行了一個簡單的舉一反三及整合,這里就不再對整個流程說明了,大家具體參考源碼。最后發(fā)一個程序在 Android上的截圖:十、模塊28模塊的原理基本同上,此處不在贅述。Mp3 音樂背景:器盡管市場上的 mp3 種類多種多樣,功能豐富,外觀設計也越來越人性化,但是現(xiàn)在 mp3 大本分都將器和器,這種做法使 mp3 的便捷性得到了很大提高,但是也帶來了一些問題,比如空間無法擴展,也無法應用于其他方面,本系統(tǒng)將器與器分
50、離,使其更便于其他測試,還可在本系統(tǒng)基礎上增加測量頻率和電壓電流的功能。MP3器基本框架圖:1、U 盤模塊主要ch375( 1) 功能簡介CH375 是一種 USB 總線的通用接口, 可以方便地掛接到單片機的總線上 。 同時 , CH375 的 USB 主機方式支持常用的 USB 全速設備 , 外部單片機可以通過 CH375 按照相應29VS1003 音頻模塊Device 89C58RD+ 單片機CH375 U 盤模塊HostU 盤30的 USB 協(xié)議與 USB 設備通訊 。 而且 , 單片機可以直接調(diào)用子程序庫讀寫 U 盤中的文件數(shù)據(jù) , 硬件上只需在原單片機系統(tǒng)中增加一個 CH375, 綜
51、本較低。( 2) 性能CH375支 持 全 速 的 USB HOST 主 機 接 口 , 兼 容 USB V2.0 , 元器件只需要晶體和電容 ; 支持動態(tài)切換主機與設備方式 ; 支持常用的 12 Mb/ s 全速 U S B 設備 ; 支持 U S B 設備的 傳輸 、 批量傳輸、 中斷傳輸 ; 可自動檢測 U S B 設備的連接與斷開 ; 提供設備連接和斷開的 通知 。 其并行接口包含 8 位數(shù)據(jù)總線 , 4 線 : 讀選通、寫選通、片選輸入、中斷輸出 。 支持 5V 電源電壓和 3.3 V 電源電壓 , CH375 還支持低功耗模式 。內(nèi)置了電源上電復位電路 , 一般情況下 , 不需要外
52、部提供復位。其正常工作時需要外部為其提供 12 MHz 的時鐘信號 。CH375 提供了 U 盤文件級子程序庫 , 單片機可以直接調(diào)用子程序讀寫 U 盤的文件數(shù)據(jù) 。CH375 的 U 盤文件級子程序庫支持常用的 FAT12 , FAT16 和 FAT32 文件系統(tǒng) ,支持 U 盤最大容量 100 GB 。單片機不需要考慮文件系統(tǒng) ,只要了解文件名 、 文件長度等基礎知識。一個 U 盤中可以有多個文件 , 每個文件都是一組數(shù)據(jù)的集合 , 以文件名區(qū)分和識別 。子程序庫對 U 盤文件的讀寫方式分為 2 種 : 扇區(qū)模式和字節(jié)模式 。在扇區(qū)模式下 , 以扇區(qū) ( 每個扇區(qū)通常是 512 B) 為基
53、本對 U 盤進行讀寫操作 ,所以讀寫操作比較快 , 但是在通常情況下需要額外的文件數(shù)據(jù)緩沖區(qū) , 額外的文件數(shù)據(jù)緩沖區(qū)必須是扇區(qū)長度 512 的整數(shù)倍 , 所以適用于 RA M 多 、 數(shù)據(jù)量大 、 頻繁讀寫數(shù)據(jù)的單片機系統(tǒng)。在字節(jié)模式下 ,以字節(jié)為基本單位對 U 盤文件進行讀寫 ,讀寫速度較慢 , 但是不需要額外的文件數(shù)據(jù)緩沖區(qū) , 使用方便 , 對大多單片機系統(tǒng)都比較適用 。 每次新建或者打開一個文件后 , 默認為扇區(qū)模式 , 支持以扇區(qū)為基本的讀寫操作 。 當執(zhí)行一次以字節(jié)為基本的操作命令后將自動進入字節(jié)模式 。常用的子程序有 : CH375Init , 初始化 CH375, 可以用 C
54、 H375Liblnit 代替 。C H375DiskConnect ,U 盤是否連接 ,建議不要頻繁。C H375Disk Ready ,U 盤是否 準 備 就 緒 , 通 常 只 有 在 就 緒 后 才 能 正 常 讀 寫。CH375FileOpen , 打開 指 定 名 稱 的 文 件 或 者 目 錄。CH375FileCreat e ,新建文件并打開 , 如果文件已經(jīng)存在則先刪 除 后 再 新 建 。CH375FileClose , 關 閉 當 前 文 件。CH375FileLocate , 以 扇 區(qū) 為移 動 當 前 文 件 指 針。CH375FileReadX ,以扇區(qū)為從當前文 件數(shù) 據(jù)。CH375Fil e Write X ,以扇區(qū)為向當前文件寫入數(shù)據(jù)。C H375ByteLoca
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保溫工考試試題及答案
- 安全師試題及答案
- 物聯(lián)網(wǎng)設備安全漏洞檢測與防護策略在智能交通信號控制系統(tǒng)中的實戰(zhàn)解析報告
- 2025年快時尚零售行業(yè)供應鏈優(yōu)化與變革分析報告
- 安全教育考試試題及答案
- 安全規(guī)程考試試題及答案
- 職業(yè)教育未來趨勢:2025年職業(yè)院校與企業(yè)深度合作研究報告
- 2025年醫(yī)院信息化建設關鍵環(huán)節(jié):電子病歷系統(tǒng)醫(yī)療信息化戰(zhàn)略規(guī)劃報告
- 大學生膳食營養(yǎng)與健康
- 回憶魯迅先生教學
- 嬰幼兒語言發(fā)育篩查量表優(yōu)質(zhì)資料
- 《屹立在世界的東方》示范課教學課件【人教部編版小學道德與法治五年級下冊】
- 四川省宜賓市翠屏區(qū)中學2022-2023學年數(shù)學八年級第二學期期末檢測試題含解析
- 應急值守專題培訓課件
- 2020-2021成都石室聯(lián)合中學蜀華分校小學數(shù)學小升初模擬試卷附答案
- 某冶金機械廠供配電系統(tǒng)設計
- 《在中亞細亞草原上》賞析 課件
- Q/GDW248-2008輸變電工程建設標準強制性條文實施管理規(guī)程第3部分:變電站建筑工程施工教程文件
- 小學生綜合素質(zhì)評價方案與評價表
- 隧道施工安全技術教育培訓記錄(共19頁)
評論
0/150
提交評論