wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 14454|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

基于zigbee的大棚溫濕度監(jiān)控報(bào)警系統(tǒng)設(shè)計(jì)(CC2530+DHT11)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
摘 要
  溫度和濕度是保證農(nóng)作物良好生長(zhǎng)的兩個(gè)重要的因素,因此檢測(cè)溫濕度就顯得尤為重要。傳統(tǒng)的檢測(cè)溫濕度是通過(guò)儀器儀表到溫室大棚內(nèi)檢測(cè)、記錄,然后再通過(guò)相應(yīng)的設(shè)備來(lái)調(diào)整溫濕度。若可通過(guò)組建無(wú)線(xiàn)網(wǎng)絡(luò)來(lái)檢測(cè)溫濕度,既可避免傳統(tǒng)有線(xiàn)傳輸?shù)牟季(xiàn)復(fù)雜、出現(xiàn)故障很難檢查等問(wèn)題,又減小了成本,使得檢測(cè)溫濕度更加方便。
  本文主要設(shè)計(jì)研究了基于ZigBee的溫室大棚的溫濕度檢測(cè)系統(tǒng),在溫室大棚中,傳感器節(jié)點(diǎn)比較多,所以該無(wú)線(xiàn)網(wǎng)絡(luò)系統(tǒng)采用的傳感器節(jié)點(diǎn)設(shè)計(jì)方案是SOC解決方案,即主控芯片CC2530和溫濕度傳感器DHT11的結(jié)合,真正實(shí)現(xiàn)了成本低,功耗小,穩(wěn)定性好的特點(diǎn)。
  軟件的編程采用的是IAR集成開(kāi)發(fā)環(huán)境,軟件設(shè)計(jì)主要分為三個(gè)部分,傳感器節(jié)點(diǎn)的采集程序、協(xié)調(diào)器的組網(wǎng)程序、上位機(jī)的界面編程,此外還有一些串口通信程序等。在ZigBee的協(xié)議棧移植,協(xié)調(diào)器建立網(wǎng)絡(luò)后,終端節(jié)點(diǎn)都加入網(wǎng)絡(luò)。首先終端節(jié)點(diǎn)采集溫蕊度數(shù)據(jù))然后通過(guò)ZigBee協(xié)議把數(shù)據(jù)發(fā)送給協(xié)調(diào)器,然后協(xié)調(diào)器把數(shù)據(jù)發(fā)送到上位機(jī),上位機(jī)把數(shù)據(jù)顯示在界面上,用戶(hù)可對(duì)溫濕度數(shù)據(jù)進(jìn)行即時(shí)查詢(xún)。這樣就實(shí)現(xiàn)了溫濕度數(shù)據(jù)實(shí)時(shí)顯示的功能。
    把ZigBee這樣一種短距離、低功耗、低成本的無(wú)線(xiàn)通信技術(shù)應(yīng)用到溫室大棚的檢測(cè)統(tǒng)中,能夠?qū)崿F(xiàn)檢測(cè)系統(tǒng)的自動(dòng)化,具有很強(qiáng)的實(shí)用性和應(yīng)用前景。

目錄

摘 要

目錄
第1章              緒論
1.1              引言
1.2              設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)
第2章              系統(tǒng)總體設(shè)計(jì)
2.1              方案的總體設(shè)計(jì)
2.2              ZigBee技術(shù)簡(jiǎn)介
2.3              傳感器簡(jiǎn)介
第3章              系統(tǒng)軟硬件設(shè)計(jì)
3.1              硬件電路設(shè)計(jì)
3.2              軟件程序設(shè)計(jì)
第4章              系統(tǒng)的調(diào)試和結(jié)論
第5章              總結(jié)和展望
5.1              總結(jié)
5.2              展望

第1章          緒論


1.1          引言

研究背景及研究意義

無(wú)線(xiàn)傳感器網(wǎng)絡(luò)涉及了多種技術(shù)的前沿?zé)狳c(diǎn)研究領(lǐng)域,包括傳感器技術(shù)、無(wú)線(xiàn)通信技術(shù)、分布式信號(hào)處理技術(shù)等。它通過(guò)集成化的微型傳感器完成對(duì)環(huán)境或檢測(cè)對(duì)象的信息實(shí)時(shí)監(jiān)測(cè)和采集,并將檢測(cè)到的信息在自組織的無(wú)線(xiàn)多跳網(wǎng)絡(luò)中傳送到上位機(jī)并顯示給用戶(hù)。自從無(wú)線(xiàn)傳感器網(wǎng)絡(luò)出現(xiàn)以來(lái),我們把信息世界和物理世界融合在一起,使人與機(jī)器、人和自然的交互方式得到了改變,然后實(shí)現(xiàn)了物理世界、計(jì)算世界以及人類(lèi)社會(huì)之間的連通,使人類(lèi)更加有能力認(rèn)識(shí)世界。
早在世紀(jì)年代末年代初,溫室監(jiān)控系統(tǒng)研究開(kāi)始起步了,那時(shí)候的檢測(cè)很單一,是通過(guò)一些儀器和儀表單點(diǎn)測(cè)量,然后記錄。后來(lái)在傳感器技術(shù)和單片機(jī)技術(shù)的迅速發(fā)展下,溫室環(huán)境監(jiān)測(cè)技術(shù)的研究也隨著發(fā)展起來(lái)了。直到年代初,引入了計(jì)算機(jī)和總線(xiàn)技術(shù)之后,使得溫室系統(tǒng)開(kāi)始走向自動(dòng)化。跟著在軟件技術(shù)的大力發(fā)展下,出現(xiàn)了專(zhuān)家系統(tǒng),溫室監(jiān)控逐漸向智能化方向發(fā)展。但是還存在著一個(gè)很大的問(wèn)題,那就是布線(xiàn)困難,接線(xiàn)復(fù)雜。但是這個(gè)問(wèn)題也很快得到了解決,這完全依賴(lài)于無(wú)線(xiàn)通信技術(shù)的迅猛發(fā)展。在國(guó)外首先出現(xiàn)將無(wú)線(xiàn)技術(shù)應(yīng)用到農(nóng)業(yè)生產(chǎn)中,包括應(yīng)用到溫室監(jiān)測(cè)和控制系統(tǒng)中,避免了一些有線(xiàn)傳輸帶來(lái)的問(wèn)題,比如:系統(tǒng)測(cè)試精度低,存在抗干擾能力差,工作不穩(wěn)定等。
隨著社會(huì)進(jìn)步和生產(chǎn)發(fā)展需要,傳統(tǒng)的使用模擬儀表進(jìn)行單點(diǎn)測(cè)溫度,測(cè)濕度已經(jīng)不能滿(mǎn)足我們的需求,所以利用無(wú)線(xiàn)通信來(lái)采集溫濕度數(shù)據(jù)顯得非常重要,測(cè)量的精度也得到了社會(huì)的重視。而無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的優(yōu)勢(shì)和發(fā)展成熟必將是溫室測(cè)控系統(tǒng)的發(fā)展方向。
在工業(yè)現(xiàn)場(chǎng),由于環(huán)境比較惡劣,工作人員不能長(zhǎng)時(shí)間停留在現(xiàn)場(chǎng)觀測(cè)設(shè)備的運(yùn)轉(zhuǎn),所以需要采集數(shù)據(jù)并傳送數(shù)據(jù)到操控室,工作人員就可以根據(jù)情況來(lái)發(fā)送控制命令了。然而數(shù)據(jù)傳輸也有兩種方式,有線(xiàn)傳輸和無(wú)線(xiàn)傳輸,傳統(tǒng)的有線(xiàn)數(shù)據(jù)傳輸需要的電纜多,布線(xiàn)復(fù)雜,出現(xiàn)問(wèn)題了換線(xiàn)困難難于維修,并且浪費(fèi)資源,占用空間大。而采用無(wú)線(xiàn)傳輸?shù)脑?huà)就可以避免上述問(wèn)題了。
由于溫室大棚占地面積比較大導(dǎo)致工作量大,可靠性差;檢測(cè)目標(biāo)也比較分散,測(cè)點(diǎn)較多,
所以傳統(tǒng)的方法已經(jīng)不能滿(mǎn)足當(dāng)前農(nóng)業(yè)發(fā)展的需要。在科技水平日新月異發(fā)展的當(dāng)下,無(wú)
線(xiàn)通信技術(shù)的發(fā)展使得溫室測(cè)量采集更精確,更簡(jiǎn)便。

1.2          設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)
本次設(shè)計(jì)方案選取了溫室大棚的溫度和濕度兩個(gè)重要的環(huán)境參數(shù)作為傳感器采集數(shù)據(jù)源,通過(guò)傳感器節(jié)點(diǎn)實(shí)時(shí)的采集數(shù)據(jù),通過(guò)射頻模塊進(jìn)行溫濕度數(shù)據(jù)的無(wú)線(xiàn)傳輸,并基于協(xié)議組建無(wú)線(xiàn)網(wǎng)絡(luò)實(shí)現(xiàn)數(shù)據(jù)的更遠(yuǎn)距離傳輸,然后由組建網(wǎng)絡(luò)者協(xié)調(diào)器將經(jīng)過(guò)處理后的數(shù)據(jù)傳輸?shù)缴衔粰C(jī),并在計(jì)算機(jī)上顯示,以供工作人員觀測(cè),及時(shí)處理。

第2章          系統(tǒng)總體設(shè)計(jì)

2.1          方案的總體設(shè)計(jì)

圖2-1溫濕度檢測(cè)整體方案設(shè)計(jì)框圖
基本設(shè)計(jì)方案:本次設(shè)計(jì)的主要內(nèi)容是基于協(xié)議的低功耗,低成本,方便簡(jiǎn)潔的溫濕度檢測(cè)
系統(tǒng)的實(shí)現(xiàn),以供農(nóng)民制定生產(chǎn)策略保護(hù)農(nóng)作物生長(zhǎng)和提高產(chǎn)量。
研究的主要內(nèi)容有以下六個(gè)方面:
了解三種邏輯設(shè)備終端節(jié)點(diǎn)、路由器、協(xié)調(diào)器的工作原理,提出檢測(cè)系統(tǒng)的總體方案。
深刻理解傳感器節(jié)點(diǎn)電路的原理,根據(jù)實(shí)際應(yīng)用的要求,選擇合適的器件完成傳感器節(jié)點(diǎn)電路的設(shè)計(jì),包括電池板和射頻板的設(shè)計(jì)并抗干擾,溫濕度傳感器的外接。提出一套可行的檢測(cè)溫濕度的方案,并合理布局傳感器節(jié)點(diǎn),實(shí)現(xiàn)不同地點(diǎn)溫濕度的測(cè)量。在硬件的支持上,深入理解協(xié)議棧,各層的作用以及協(xié)調(diào)器和計(jì)算機(jī)的串口通信程序設(shè)計(jì)。對(duì)傳感器節(jié)點(diǎn)、路由器節(jié)點(diǎn),協(xié)調(diào)器進(jìn)行組網(wǎng)調(diào)試,傳感器節(jié)點(diǎn)實(shí)現(xiàn)溫濕度的檢測(cè),并通過(guò)路由器、協(xié)調(diào)器傳送到計(jì)算機(jī)界面上用顯示出來(lái)。當(dāng)節(jié)點(diǎn)的發(fā)送功率為時(shí),節(jié)點(diǎn)和相鄰節(jié)點(diǎn)之間的距離小于米時(shí),其數(shù)據(jù)丟包率保持在以?xún)?nèi),三節(jié)干電池有效工作時(shí)間在個(gè)月以上。我們的溫濕度檢測(cè)系統(tǒng)的設(shè)計(jì),需要考慮到成本最小,也就是盡量找到便宜實(shí)用以及穩(wěn)定性高的硬件芯片作為節(jié)點(diǎn)。軟件設(shè)計(jì)方面要考慮到算法盡可能的簡(jiǎn)單,并且最為優(yōu)化。使得數(shù)據(jù)傳輸過(guò)程中能量消耗盡量減少,主要考慮比較節(jié)能的路由算法。硬件方面的工作主要是數(shù)據(jù)采集節(jié)點(diǎn)電路設(shè)計(jì)、協(xié)調(diào)器電路設(shè)計(jì)以及相關(guān)接口電路設(shè)計(jì)。
軟件方面的工作包括以為主控芯片的測(cè)溫程序的開(kāi)發(fā),網(wǎng)絡(luò)算法以及無(wú)線(xiàn)收發(fā)芯片的驅(qū)動(dòng)程序的開(kāi)發(fā),和針對(duì)無(wú)線(xiàn)通信系統(tǒng)的應(yīng)用程序幵發(fā),包括了數(shù)據(jù)采集、數(shù)據(jù)傳輸、數(shù)據(jù)處理及顯示。并在此基礎(chǔ)上完成協(xié)議棧的移植。
創(chuàng)新點(diǎn):有線(xiàn)傳輸方式進(jìn)行通信和組網(wǎng),系統(tǒng)復(fù)雜度高,系統(tǒng)可靠性和靈活性低,而將這樣一種短距低速低成本低功耗的無(wú)線(xiàn)通信組網(wǎng)技術(shù)應(yīng)用到溫濕度測(cè)量系統(tǒng)中,實(shí)現(xiàn)了自動(dòng)化、信息化,有效的減輕了工作人員的工作壓力,提高了工作效率,對(duì)今后無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的廣泛應(yīng)用是很好的嘗試。

2.2          ZigBee技術(shù)簡(jiǎn)介
蜜蜂在發(fā)現(xiàn)花叢后會(huì)通過(guò)一種特殊的肢體語(yǔ)言來(lái)告知同伴新發(fā)現(xiàn)的食物源位置等信息,這種肢體語(yǔ)言就是ZigZag行舞蹈,是蜜蜂之間一種簡(jiǎn)單傳達(dá)信息的方式。借此意義Zigbee作為新一代無(wú)線(xiàn)通訊技術(shù)的命名。在此之前ZigBee也被稱(chēng)為“HomeRF Lite”、“RF- EasyLink”或“fireFly”無(wú)線(xiàn)電技術(shù),統(tǒng)稱(chēng)為ZigBee。
簡(jiǎn)單的說(shuō),ZigBee是一種高可靠的無(wú)線(xiàn)數(shù)傳網(wǎng)絡(luò),類(lèi)似于CDMA和GSM網(wǎng)絡(luò)。ZigBee數(shù)傳模塊類(lèi)似于移動(dòng)網(wǎng)絡(luò)基站。通訊距離從標(biāo)準(zhǔn)的75m到幾百米、幾公里,并且支持無(wú)限擴(kuò)展。
ZigBee是一個(gè)由可多到65000個(gè)無(wú)線(xiàn)數(shù)傳模塊組成的一個(gè)無(wú)線(xiàn)數(shù)傳網(wǎng)絡(luò)平臺(tái),在整個(gè)網(wǎng)絡(luò)范圍內(nèi),每一個(gè)ZigBee網(wǎng)絡(luò)數(shù)傳模塊之間可以相互通信,每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)間的距離可以從標(biāo)準(zhǔn)的75m無(wú)限擴(kuò)展。
與移動(dòng)通信的CDMA網(wǎng)或GSM網(wǎng)不同的是,ZigBee網(wǎng)絡(luò)主要是為工業(yè)現(xiàn)場(chǎng)自動(dòng)化控制數(shù)據(jù)傳輸而建立,因而,它必須具有簡(jiǎn)單,使用方便,工作可靠,價(jià)格低的特點(diǎn)。而移動(dòng)通信網(wǎng)主要是為語(yǔ)音通信而建立,每個(gè)基站價(jià)值一般都在百萬(wàn)元人民幣以上,而每個(gè)ZigBee“基站”卻不到1000元人民幣。每個(gè)ZigBee網(wǎng)絡(luò)節(jié)點(diǎn)不僅本身可以作為監(jiān)控對(duì)象,例如其所連接的傳感器直接進(jìn)行數(shù)據(jù)采集和監(jiān)控,還可以自動(dòng)中轉(zhuǎn)別的網(wǎng)絡(luò)節(jié)點(diǎn)傳過(guò)來(lái)的數(shù)據(jù)資料。除此之外,每一個(gè)ZigBee網(wǎng)絡(luò)節(jié)點(diǎn)(FFD)還可在自己信號(hào)覆蓋的范圍內(nèi),和多個(gè)不承擔(dān)網(wǎng)絡(luò)信息中轉(zhuǎn)任務(wù)的孤立的子節(jié)點(diǎn)(RFD)無(wú)線(xiàn)連接。
2.3          傳感器簡(jiǎn)介
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專(zhuān)用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性?xún)r(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測(cè)型號(hào)的處理過(guò)程中要調(diào)用這些校準(zhǔn)系數(shù)。單線(xiàn)制串行接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。超小的體積、極低的功耗,使其成為給類(lèi)應(yīng)用甚至最為苛刻的應(yīng)用場(chǎng)合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。精度濕度+-5%RH, 溫度+-2℃,量程濕度20-90%RH, 溫度0~50℃。


第3章          系統(tǒng)軟硬件設(shè)計(jì)3.1          硬件電路設(shè)計(jì)
幾個(gè)作為終端接收溫濕度,在協(xié)調(diào)器上顯示,如果超過(guò)溫濕度設(shè)定,就會(huì)亮燈并顯示太高字樣。

實(shí)驗(yàn)原理圖:




射頻板的主控芯片是CC2530,所以控制部分電路圖如圖

報(bào)警現(xiàn)象由led的亮閃觀察


PCB設(shè)計(jì)圖

3.2          軟件程序設(shè)計(jì)







主程序流程圖

(和各個(gè)分功能流程圖的介紹,可分小節(jié)介紹。)

1.溫濕度計(jì)算:可以計(jì)算出溫度和濕度的值,下面給出計(jì)算方法:

temp(溫度)一byte2 .bytel=28.00(℃)

humi(濕度)=byte4 .byte3=62.00 ( } RH)

檢驗(yàn)一bytel+ byte2 + byte3+ byte4 =01011010=90(=溫度+濕度)(校驗(yàn)正確)

2.協(xié)調(diào)器建立網(wǎng)絡(luò)流程圖

3. 完成初始化

后通過(guò)原語(yǔ)的方式發(fā)起網(wǎng)絡(luò)。它有拒絕和允許節(jié)點(diǎn)加入網(wǎng)絡(luò)的權(quán)力,然后把各個(gè)節(jié)點(diǎn)的數(shù)

據(jù)采集匯總后發(fā)給上位機(jī)顯示出來(lái)。協(xié)調(diào)器發(fā)起網(wǎng)絡(luò)由功能函數(shù)Void ZDO Network For

mation(byte LogicalType,devStartModes_ t StartMode,byte BeaconOrder,byte SuperframeOr

der)來(lái)實(shí)現(xiàn)組建無(wú)線(xiàn)網(wǎng)絡(luò)。函數(shù)參數(shù)的意義說(shuō)明如下:

    Logical腸pe是Byte類(lèi)型的,代表該設(shè)備的類(lèi)型。StartMode是Struct類(lèi)型的,MOD

E HARD申請(qǐng)新建網(wǎng)絡(luò),MODE一OIN申請(qǐng)加入網(wǎng)絡(luò),MODE_ RESUME重新新建網(wǎng)絡(luò),

MODE_ REJOIN重新加入網(wǎng)絡(luò),BeaconOrder是Byte類(lèi)型,是要建立的ZigBee網(wǎng)絡(luò)的信

標(biāo)序號(hào),SuperframeOrder也是一個(gè)Byte類(lèi)型的,是要建立的ZigBee網(wǎng)絡(luò)的超幀信號(hào)。

    當(dāng)協(xié)調(diào)器上電后,其應(yīng)用層通過(guò)發(fā)送原語(yǔ)NLME NETWORK-FORMATION.request發(fā)起新網(wǎng)絡(luò)的建立的進(jìn)程,網(wǎng)絡(luò)層在收到請(qǐng)求后也通過(guò)發(fā)送原語(yǔ)NLME-SCAN.request來(lái)要求MAC層對(duì)信道進(jìn)行能量掃描。MAC層通過(guò)NLME_ SCAN.confirm將掃描到的可用信道報(bào)告給網(wǎng)絡(luò)層,網(wǎng)絡(luò)層再發(fā)出NLME-SCAN.request搜索可用信道中其他未使用或使用最少的信道,MAC層將搜索結(jié)果報(bào)告給網(wǎng)絡(luò)層。如果沒(méi)有搜索到可用信道則表示新網(wǎng)絡(luò)建立失敗;如果搜到可用信道,則協(xié)調(diào)器確定一個(gè)PAN ID和16位網(wǎng)絡(luò)地址,如果在NLME一ETWORK_DISCOVERY request原語(yǔ)中指定了PAN ID而且與原來(lái)存在的不沖突,則使用指定的PAN ID,否則使用隨機(jī)選擇的,但要求PAN ID在0x0000^-Ox3FFF范圍內(nèi),協(xié)調(diào)器網(wǎng)絡(luò)地址一般為0x0000。之后,網(wǎng)絡(luò)層發(fā)出MLME-SET.request通知MAC層設(shè)置這些參數(shù),收到MAC的確認(rèn)后,NWK發(fā)出MLME-START.request原語(yǔ)啟動(dòng)新網(wǎng)路的建立新網(wǎng)絡(luò)建立后,發(fā)送NLMEes NETWORKse FORMATION.confirm原語(yǔ)通知應(yīng)用層最終結(jié)果。

主要代碼:


第4章          系統(tǒng)的調(diào)試和結(jié)論

6.1準(zhǔn)備工作
首先要排除硬件的各種問(wèn)題,比如接觸不良,短路,電源不穩(wěn)定等,然后開(kāi)始上電測(cè)試。由于我們是在實(shí)驗(yàn)階段,所以先選用少量的節(jié)點(diǎn)來(lái)做測(cè)試。我們測(cè)試時(shí)所用的硬件有:
計(jì)算機(jī)一臺(tái),仿真器一個(gè),兩個(gè)終端節(jié)點(diǎn)(RFD),一個(gè)協(xié)調(diào)器((FFD)o
在ZigBee協(xié)議棧移植后,在進(jìn)行部分軟件的編寫(xiě)和修改后,分別把程序下載到協(xié)調(diào)
器和終端節(jié)點(diǎn)。我們測(cè)試所用的軟件是IAR嵌入式集成開(kāi)發(fā)環(huán)境。
  在測(cè)試中,網(wǎng)絡(luò)拓?fù)漕?lèi)型選擇星型網(wǎng)絡(luò),兩個(gè)終端節(jié)點(diǎn)采用三節(jié)1.5V電池供電,協(xié)調(diào)器采用USB供電,并通過(guò)串口與計(jì)算機(jī)相連。由于現(xiàn)在的筆記本沒(méi)有9針串口,因此我們采用USB轉(zhuǎn)串口來(lái)和計(jì)算機(jī)通信。
這時(shí)我們就要對(duì)終端節(jié)點(diǎn)和協(xié)調(diào)器進(jìn)行穩(wěn)定性測(cè)試和安全性測(cè)試。
1)穩(wěn)定性測(cè)試
    把終端節(jié)點(diǎn)的電源模式設(shè)定為完全功能模式(CPMO),協(xié)調(diào)器沒(méi)有休眠模式,因此不用設(shè)置。長(zhǎng)時(shí)間運(yùn)行48小時(shí)以上,檢查各個(gè)模塊是否運(yùn)轉(zhuǎn)正常,電壓是否在正常值范圍之內(nèi),液晶是否清晰可見(jiàn)無(wú)閃屏現(xiàn)象。
2)安全性測(cè)試
檢查各類(lèi)接口,保證不短路,長(zhǎng)時(shí)間運(yùn)行程序后,檢查芯片溫度以及工作電壓,防止燒壞。在硬件測(cè)試結(jié)束后,我們測(cè)試下傳感器采集溫濕度是否正常,利用串口調(diào)試助手測(cè)試下9針串口的通信。
4.2組網(wǎng)測(cè)試
在硬件測(cè)試都無(wú)異常,各部分測(cè)試都正常后,我們就開(kāi)始進(jìn)行組網(wǎng)測(cè)試。
1)配置傳感器節(jié)點(diǎn)
在Z-Stack協(xié)議棧移植后,用IAR集成開(kāi)發(fā)軟件打開(kāi)組網(wǎng)測(cè)試程序,選擇SensorBB,選擇Project->Rebuild All編譯,在編譯完全通過(guò)后,連接PC、仿真器和目標(biāo)板Q2530BB,按下仿真器的Reset鍵,此時(shí)仿真器指示燈應(yīng)正常,點(diǎn)擊Debug按鈕進(jìn)行下載,待下載進(jìn)度條消失,左上角出現(xiàn)調(diào)試窗口時(shí),點(diǎn)擊退出調(diào)試狀態(tài),拔除DEBUG線(xiàn),重啟目標(biāo)板電源或按下目標(biāo)板的Reset鍵,此時(shí)LED 1, LED2慢速閃爍,目標(biāo)己被設(shè)定為終端傳感器節(jié)點(diǎn)。
  2)配置協(xié)調(diào)器節(jié)點(diǎn)
    選擇CollectorEB,選擇Project->Rebuild All編譯,編譯完全通過(guò)后,連接PC、仿真
器和目標(biāo)板Q2530EB,按下仿真器的Reset鍵,此時(shí)仿真器指示燈應(yīng)正常,點(diǎn)擊Debug進(jìn)行下載,待下載進(jìn)度條消失,左上角出現(xiàn)調(diào)試窗口,點(diǎn)擊全速運(yùn)行按鈕,目標(biāo)板LED 1,LED2同時(shí)閃爍,此時(shí)LCD屏顯示為當(dāng)前節(jié)點(diǎn)的IEEE地址。
(1)此時(shí)如果退出調(diào)試狀態(tài),拔掉Debug線(xiàn),重啟目標(biāo)板電源,按下reset鍵,目標(biāo)板已被設(shè)定為網(wǎng)絡(luò)路由器節(jié)點(diǎn)
(2)此時(shí)如果按下U3的UP鍵,則LED 1 /LED3長(zhǎng)亮,LED2閃爍,點(diǎn)擊退出調(diào)試狀態(tài),拔掉目標(biāo)板上的Debug線(xiàn),重啟目標(biāo)板電源或按下目標(biāo)板的Reset鍵,此時(shí)LED 1 /LED3長(zhǎng)亮,LED2閃爍,目標(biāo)板己被設(shè)定為網(wǎng)絡(luò)協(xié)調(diào)器節(jié)點(diǎn)。關(guān)閉網(wǎng)路中所有節(jié)點(diǎn)電源,將協(xié)調(diào)器的串口與計(jì)算機(jī)連接起來(lái),打開(kāi)ZigBee協(xié)議分析軟件,選擇COM1口,波特率為9600,開(kāi)啟協(xié)調(diào)器電源,這樣ZigBee的網(wǎng)絡(luò)建立好了。 首先觀察兩個(gè)節(jié)點(diǎn)加入網(wǎng)絡(luò)的時(shí)間,sensorl加入網(wǎng)絡(luò)的時(shí)間是2.5秒,sensor2加入網(wǎng)絡(luò)的時(shí)間是2秒。終端節(jié)點(diǎn)綁定以后就開(kāi)始自動(dòng)采集溫濕度數(shù)據(jù),并將采集到的數(shù)據(jù)通過(guò)ZigBee協(xié)議傳輸給協(xié)調(diào)器,然后協(xié)調(diào)器通過(guò)串口通信協(xié)議傳到上位機(jī)界面顯示出來(lái)。


第5章          總結(jié)和展望
5.1          總結(jié)

    本次設(shè)計(jì)的無(wú)線(xiàn)溫濕度監(jiān)測(cè)網(wǎng)絡(luò)是基于ZigBee協(xié)議的短距離、低功耗的無(wú)線(xiàn)通信網(wǎng)絡(luò),一般用于溫室大棚,花園等。針對(duì)農(nóng)作物的生長(zhǎng)需要最適宜的溫濕度,所以我們選用復(fù)合數(shù)字溫濕度傳感器DHT 11來(lái)測(cè)量溫濕度,和CC2530芯片一同組成了采集溫濕度的傳感器節(jié)點(diǎn)。此節(jié)點(diǎn)功耗低、成本低、傳輸數(shù)據(jù)穩(wěn)定。另外的一大特色是使用了ZigBee協(xié)議棧來(lái)組建無(wú)線(xiàn)傳感器網(wǎng)絡(luò),這樣可以使溫濕度數(shù)據(jù)可以通過(guò)無(wú)線(xiàn)來(lái)傳輸。最后還設(shè)計(jì)了上位機(jī)的界面顯示,可以實(shí)時(shí)顯示溫濕度數(shù)據(jù),可以在辦公室內(nèi)就可以清楚的知道溫室大棚內(nèi)的溫濕度情況,極大的減輕了工作人員的勞動(dòng)強(qiáng)度。
    隨著人們生活水平的提高,溫室大棚經(jīng)歷了從傳統(tǒng)的利用儀器儀表手動(dòng)檢測(cè),到現(xiàn)在的利用無(wú)線(xiàn)網(wǎng)絡(luò)自動(dòng)檢測(cè),并且逐漸向智能化方向發(fā)展。
    本文的研究重點(diǎn)在于對(duì)ZigBee協(xié)議棧的組網(wǎng)研究上,ZigBee協(xié)議是一種基于IEEE802.15.4標(biāo)準(zhǔn)的協(xié)議,采用了分層的構(gòu)架。而在ZigBee協(xié)議棧中基于開(kāi)發(fā)的程序主要集中在網(wǎng)絡(luò)層,應(yīng)用層。ZigBee協(xié)議棧基于原語(yǔ)問(wèn)答的方式實(shí)現(xiàn)系統(tǒng)通信功能,對(duì)于硬件的設(shè)計(jì)使用了SOC解決方案,并且參照某些開(kāi)發(fā)板的電路圖,使得整個(gè)硬件設(shè)計(jì)過(guò)程變得不復(fù)雜,減少了開(kāi)發(fā)的周期。
5.2          展望

ZigBee技術(shù)畢竟還是一門(mén)新興的通信技術(shù),在使用和推廣中還有很多地方要改進(jìn)。論文寫(xiě)作過(guò)程中雖然參閱了許多文獻(xiàn)資料和別人的研究成果,但是由于時(shí)間和能力的有限,還有很多因素和問(wèn)題沒(méi)有考慮進(jìn)去,所以還存在很多不足,在后續(xù)的工作中將主要從以下幾個(gè)方面提高研究水平:
    1)在硬件電路設(shè)計(jì)方面:對(duì)于高頻電路分布參數(shù)以及天線(xiàn)電路的設(shè)計(jì)還有一些不足,由高頻電路造成的電磁干擾在一定程度上影響了節(jié)點(diǎn)采集數(shù)據(jù)的準(zhǔn)確度。其次是盡量將電路板設(shè)計(jì)的更小,這樣更加便于攜帶。這就需要對(duì)從元件選型到電路布局布線(xiàn)設(shè)計(jì)等方面做出調(diào)整。
    2)對(duì)ZigBee協(xié)議棧的理解明顯不足。對(duì)于細(xì)節(jié)的把握還很欠缺,這直接影響到了協(xié)議棧的具體開(kāi)發(fā)工作。軟件的架構(gòu)還有完善的地方,對(duì)于路由選擇還有很大的空間進(jìn)行優(yōu)化。代碼還可以進(jìn)一步精簡(jiǎn),這樣可以提高程序的執(zhí)行效率,提高代碼的健壯性。

  1. /*********************************************************************
  2. * INCLUDES
  3. */
  4. #include "OSAL.h"
  5. #include "ZGlobals.h"
  6. #include "AF.h"
  7. #include "aps_groups.h"
  8. #include "ZDApp.h"

  9. #include "SampleApp.h"
  10. #include "SampleAppHw.h"

  11. #include "OnBoard.h"

  12. /* HAL */
  13. #include "hal_lcd.h"
  14. #include "hal_led.h"
  15. #include "hal_key.h"

  16. /*********************************************************************
  17. * MACROS
  18. */

  19. /*********************************************************************
  20. * CONSTANTS
  21. */

  22. /*********************************************************************
  23. * TYPEDEFS
  24. */

  25. /*********************************************************************
  26. * GLOBAL VARIABLES
  27. */

  28. // This list should be filled with Application specific Cluster IDs.
  29. const cId_t SampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] =
  30. {
  31.   SAMPLEAPP_PERIODIC_CLUSTERID,
  32.   SAMPLEAPP_FLASH_CLUSTERID
  33. };

  34. const SimpleDescriptionFormat_t SampleApp_SimpleDesc =
  35. {
  36.   SAMPLEAPP_ENDPOINT,              //  int Endpoint;
  37.   SAMPLEAPP_PROFID,                //  uint16 AppProfId[2];
  38.   SAMPLEAPP_DEVICEID,              //  uint16 AppDeviceId[2];
  39.   SAMPLEAPP_DEVICE_VERSION,        //  int   AppDevVer:4;
  40.   SAMPLEAPP_FLAGS,                 //  int   AppFlags:4;
  41.   SAMPLEAPP_MAX_CLUSTERS,          //  uint8  AppNumInClusters;
  42.   (cId_t *)SampleApp_ClusterList,  //  uint8 *pAppInClusterList;
  43.   SAMPLEAPP_MAX_CLUSTERS,          //  uint8  AppNumInClusters;
  44.   (cId_t *)SampleApp_ClusterList   //  uint8 *pAppInClusterList;
  45. };

  46. // This is the Endpoint/Interface description.  It is defined here, but
  47. // filled-in in SampleApp_Init().  Another way to go would be to fill
  48. // in the structure here and make it a "const" (in code space).  The
  49. // way it's defined in this sample app it is define in RAM.
  50. endPointDesc_t SampleApp_epDesc;

  51. /*********************************************************************
  52. * EXTERNAL VARIABLES
  53. */

  54. /*********************************************************************
  55. * EXTERNAL FUNCTIONS
  56. */

  57. /*********************************************************************
  58. * LOCAL VARIABLES
  59. */
  60. uint8 SampleApp_TaskID;   // Task ID for internal task/event processing
  61.                           // This variable will be received when
  62.                           // SampleApp_Init() is called.
  63. devStates_t SampleApp_NwkState;

  64. uint8 SampleApp_TransID;  // This is the unique message ID (counter)

  65. afAddrType_t SampleApp_Periodic_DstAddr;
  66. afAddrType_t SampleApp_Flash_DstAddr;

  67. aps_Group_t SampleApp_Group;

  68. uint8 SampleAppPeriodicCounter = 0;
  69. uint8 SampleAppFlashCounter = 0;

  70. /*********************************************************************
  71. * LOCAL FUNCTIONS
  72. */
  73. void SampleApp_HandleKeys( uint8 shift, uint8 keys );
  74. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
  75. void SampleApp_SendPeriodicMessage( void );
  76. void SampleApp_SendFlashMessage( uint16 flashTime );

  77. /*********************************************************************
  78. * NETWORK LAYER CALLBACKS
  79. */

  80. /*********************************************************************
  81. * PUBLIC FUNCTIONS
  82. */

  83. /*********************************************************************
  84. * @fn      SampleApp_Init
  85. *
  86. * @brief   Initialization function for the Generic App Task.
  87. *          This is called during initialization and should contain
  88. *          any application specific initialization (ie. hardware
  89. *          initialization/setup, table initialization, power up
  90. *          notificaiton ... ).
  91. *
  92. * @param   task_id - the ID assigned by OSAL.  This ID should be
  93. *                    used to send messages and set timers.
  94. *
  95. * @return  none
  96. */
  97. void SampleApp_Init( uint8 task_id )
  98. {
  99.   SampleApp_TaskID = task_id;
  100.   SampleApp_NwkState = DEV_INIT;
  101.   SampleApp_TransID = 0;

  102.   // Device hardware initialization can be added here or in main() (Zmain.c).
  103.   // If the hardware is application specific - add it here.
  104.   // If the hardware is other parts of the device add it in main().

  105. #if defined ( BUILD_ALL_DEVICES )
  106.   // The "Demo" target is setup to have BUILD_ALL_DEVICES and HOLD_AUTO_START
  107.   // We are looking at a jumper (defined in SampleAppHw.c) to be jumpered
  108.   // together - if they are - we will start up a coordinator. Otherwise,
  109.   // the device will start as a router.
  110.   if ( readCoordinatorJumper() )
  111.     zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;
  112.   else
  113.     zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;
  114. #endif // BUILD_ALL_DEVICES

  115. #if defined ( HOLD_AUTO_START )
  116.   // HOLD_AUTO_START is a compile option that will surpress ZDApp
  117.   //  from starting the device and wait for the application to
  118.   //  start the device.
  119.   ZDOInitDevice(0);
  120. #endif

  121.   // Setup for the periodic message's destination address
  122.   // Broadcast to everyone
  123.   SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
  124.   SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
  125.   SampleApp_Periodic_DstAddr.addr.shortAddr = 0xFFFF;

  126.   // Setup for the flash command's destination address - Group 1
  127.   SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;
  128.   SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
  129.   SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;

  130.   // Fill out the endpoint description.
  131.   SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;
  132.   SampleApp_epDesc.task_id = &SampleApp_TaskID;
  133.   SampleApp_epDesc.simpleDesc
  134.             = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;
  135.   SampleApp_epDesc.latencyReq = noLatencyReqs;

  136.   // Register the endpoint description with the AF
  137.   afRegister( &SampleApp_epDesc );

  138.   // Register for all key events - This app will handle all key events
  139.   RegisterForKeys( SampleApp_TaskID );

  140.   // By default, all devices start out in Group 1
  141.   SampleApp_Group.ID = 0x0001;
  142.   osal_memcpy( SampleApp_Group.name, "Group 1", 7  );
  143.   aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );

  144. #if defined ( LCD_SUPPORTED )
  145.   HalLcdWriteString( "SampleApp", HAL_LCD_LINE_1 );
  146. #endif
  147. }

  148. /*********************************************************************
  149. * @fn      SampleApp_ProcessEvent
  150. *
  151. * @brief   Generic Application Task event processor.  This function
  152. *          is called to process all events for the task.  Events
  153. *          include timers, messages and any other user defined events.
  154. *
  155. * @param   task_id  - The OSAL assigned task ID.
  156. * @param   events - events to process.  This is a bit map and can
  157. *                   contain more than one event.
  158. *
  159. * @return  none
  160. */
  161. uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
  162. {
  163.   afIncomingMSGPacket_t *MSGpkt;
  164.   (void)task_id;  // Intentionally unreferenced parameter

  165.   if ( events & SYS_EVENT_MSG )
  166.   {
  167.     MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
  168.     while ( MSGpkt )
  169.     {
  170.       switch ( MSGpkt->hdr.event )
  171.       {
  172.         // Received when a key is pressed
  173.         case KEY_CHANGE:
  174.           SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
  175.           break;

  176.         // Received when a messages is received (OTA) for this endpoint
  177.         case AF_INCOMING_MSG_CMD:
  178.           SampleApp_MessageMSGCB( MSGpkt );
  179.           break;

  180.         // Received whenever the device changes state in the network
  181.         case ZDO_STATE_CHANGE:
  182.           SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
  183.           if ( (SampleApp_NwkState == DEV_ZB_COORD)
  184.               || (SampleApp_NwkState == DEV_ROUTER)
  185.               || (SampleApp_NwkState == DEV_END_DEVICE) )
  186.           {
  187.             // Start sending the periodic message in a regular interval.
  188.             osal_start_timerEx( SampleApp_TaskID,
  189.                               SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
  190.                               SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
  191.           }
  192.           else
  193.           {
  194.             // Device is no longer in the network
  195.           }
  196.           break;

  197.         default:
  198.           break;
  199.       }

  200.       // Release the memory
  201.       osal_msg_deallocate( (uint8 *)MSGpkt );

  202.       // Next - if one is available
  203.       MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );
  204.     }

  205.     // return unprocessed events
  206.     return (events ^ SYS_EVENT_MSG);
  207.   }

  208.   // Send a message out - This event is generated by a timer
  209.   //  (setup in SampleApp_Init()).
  210.   if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )
  211.   {
  212.     // Send the periodic message
  213.     SampleApp_SendPeriodicMessage();

  214.     // Setup to send message again in normal period (+ a little jitter)
  215.     osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
  216.         (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );

  217.     // return unprocessed events
  218.     return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
  219.   }

  220.   // Discard unknown events
  221.   return 0;
  222. }

  223. /*********************************************************************
  224. * Event Generation Functions
  225. */
  226. /*********************************************************************
  227. * @fn      SampleApp_HandleKeys
  228. *
  229. * @brief   Handles all key events for this device.
  230. *
  231. * @param   shift - true if in shift/alt.
  232. * @param   keys - bit field for key events. Valid entries:
  233. *                 HAL_KEY_SW_2
  234. *                 HAL_KEY_SW_1
  235. *
  236. * @return  none
  237. */
  238. void SampleApp_HandleKeys( uint8 shift, uint8 keys )
  239. {
  240.   (void)shift;  // Intentionally unreferenced parameter

  241.   if ( keys & HAL_KEY_SW_1 )
  242.   {
  243.     /* This key sends the Flash Command is sent to Group 1.
  244.      * This device will not receive the Flash Command from this
  245.      * device (even if it belongs to group 1).
  246.      */
  247.     SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION );
  248.   }

  249.   if ( keys & HAL_KEY_SW_2 )
  250.   {
  251.     /* The Flashr Command is sent to Group 1.
  252.      * This key toggles this device in and out of group 1.
  253.      * If this device doesn't belong to group 1, this application
  254.      * will not receive the Flash command sent to group 1.
  255.      */
  256.     aps_Group_t *grp;
  257.     grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );
  258.     if ( grp )
  259.     {
  260.       // Remove from the group
  261.       aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );
  262.     }
  263.     else
  264.     {
  265.       // Add to the flash group
  266.       aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );
  267.     }
  268.   }
  269. }

  270. /*********************************************************************
  271. * LOCAL FUNCTIONS
  272. */

  273. /*********************************************************************
  274. * @fn      SampleApp_MessageMSGCB
  275. *
  276. * @brief   Data message processor callback.  This function processes
  277. *          any incoming data - probably from other devices.  So, based
  278. *          on cluster ID, perform the intended action.
  279. *
  280. * @param   none
  281. *
  282. * @return  none
  283. */
  284. void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
  285. {
  286.   uint16 flashTime;

  287.   switch ( pkt->clusterId )
  288.   {
  289.     case SAMPLEAPP_PERIODIC_CLUSTERID:
  290.       break;

  291.     case SAMPLEAPP_FLASH_CLUSTERID:
  292.       flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
  293.       HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
  294.       break;
  295.   }
  296. }

  297. /*********************************************************************
  298. * @fn      SampleApp_SendPeriodicMessage
  299. *
  300. * @brief   Send the periodic message.
  301. *
  302. * @param   none
  303. *
  304. * @return  none
  305. */
  306. void SampleApp_SendPeriodicMessage( void )
  307. {
  308.   if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
  309.                        SAMPLEAPP_PERIODIC_CLUSTERID,
  310.                        1,
  311.                        (uint8*)&SampleAppPeriodicCounter,
  312.                        &SampleApp_TransID,
  313.                        AF_DISCV_ROUTE,
  314.                        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  315.   {
  316.   }
  317.   else
  318.   {
  319.     // Error occurred in request to send.
  320.   }
  321. }

  322. /*********************************************************************
  323. * @fn      SampleApp_SendFlashMessage
  324. *
  325. * @brief   Send the flash message to group 1.
  326. *
  327. * @param   flashTime - in milliseconds
  328. *
  329. * @return  none
  330. */
  331. void SampleApp_SendFlashMessage( uint16 flashTime )
  332. {
  333.   uint8 buffer[3];
  334.   buffer[0] = (uint8)(SampleAppFlashCounter++);
  335.   buffer[1] = LO_UINT16( flashTime );
  336.   buffer[2] = HI_UINT16( flashTime );

  337.   if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,
  338.                        SAMPLEAPP_FLASH_CLUSTERID,
  339.                        3,
  340.                        buffer,
  341.                        &SampleApp_TransID,
  342.                        AF_DISCV_ROUTE,
  343.                        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  344.   {
  345.   }
  346.   else
  347.   {
  348.     // Error occurred in request to send.
  349.   }
  350. }
復(fù)制代碼


完整的Word格式文檔51黑下載地址:
基于zigbee的大棚溫濕度監(jiān)控報(bào)警系統(tǒng).doc (425.5 KB, 下載次數(shù): 257)



評(píng)分

參與人數(shù) 2黑幣 +80 收起 理由
cheng95 + 30
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:693810 發(fā)表于 2020-4-20 19:18 | 只看該作者
有源文件嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:819918 發(fā)表于 2020-9-17 09:31 | 只看該作者
樓主,可以把源碼放出來(lái)嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:820816 發(fā)表于 2021-5-15 05:17 來(lái)自觸屏版 | 只看該作者
放個(gè)源程序唄
回復(fù)

使用道具 舉報(bào)

5#
ID:150442 發(fā)表于 2021-6-23 22:17 | 只看該作者
具有指導(dǎo)意義!!!
回復(fù)

使用道具 舉報(bào)

6#
ID:1111210 發(fā)表于 2024-4-3 17:28 | 只看該作者
怎么移植zstack工程到IAR?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
亚洲大片免费观看| 欧美超碰在线| 久草在线视频福利| 欧美日夜夜逼| 天天槽夜夜槽| 全部孕妇毛片丰满孕妇孕| a级免费观看| 在线观看岛国片| 国产一区亚洲二区| 欧美video巨大粗暴18| 在线播放一区二区精品产| 高潮毛片7777777毛片| 国产chinasex对白videos麻豆| 中文字幕乱码人妻二区三区| 波多野结衣mp4| 中文字幕av片| 午夜精品久久久久久久99| 成 人 黄 色 片 在线播放| 99久久精品国产色欲| 午夜精品无码一区二区三区| 精品免费久久久| 熟妇人妻av无码一区二区三区| 五月婷婷开心中文字幕| 在线成人综合色一区| 亚洲精品国产一区二区在线| 四虎影视最新网站入口在线观看| 亚洲国产精品久久网午夜小说| 九色porny丨精品自拍视频| 欧美性xxxx极品hd欧美| 91九色蝌蚪在线| 天天操天天擦| 中文字幕在线视频观看| 在线看av的网址| 99riav视频在线观看| 澳门av一区二区三区| 久久精品免视看国产成人| 久久91在线| 羞羞答答成人影院www| 日韩一级网站| 国产高清视频一区| 国产精品国产三级国产普通话99 | 国产成人精品一区二区无码呦| 国产免费高清视频| 亚洲欧美日本在线观看| 国产精品入口麻豆完整版| jizzjizzjizzjizzjizzjizzjizz| 日本免费专区| 欧美性天天影视| 精品精品导航| 国产精品美女久久久久| 激情综合网五月| 伊人久久亚洲美女图片| 国产一区二区美女诱惑| 国产精品国产三级国产有无不卡 | 中文字幕在线影院| 成人午夜在线影视| 色成人免费网站| 欧美理伦片在线播放| 午夜精品电影| 成人亚洲精品久久久久软件| 国产精品久久久久一区二区三区 | 麻豆一区二区99久久久久| 久久综合九色综合97_久久久| 欧美成熟视频| 人禽交欧美网站| 国产视频一区二区在线| 日韩欧美在线免费观看| 亚洲精品在线电影| 97av在线播放| 日韩中文一区二区三区| 中文字幕第21页| 麻豆一区在线观看| 国产又粗又猛又爽又黄91| 一个人看的日本www的免费视频 | 黄在线观看网站| 丰满大乳奶做爰ⅹxx视频| 国产精品100| 国产永久在线观看| 黄上黄在线观看| 亚洲天堂网站| 精品91在线| 国产午夜亚洲精品理论片色戒| 色就色 综合激情| 中文字幕精品在线| 99re视频在线播放| 高清在线观看免费| 99热6这里只有精品| 性生活视频软件| 天堂中文字幕一二区| 欧美男男video| 精品国产91| 国产盗摄女厕一区二区三区 | 亚洲精品五月天| 精品粉嫩超白一线天av| 国产精品久久二区| 中文精品无码中文字幕无码专区| 亚洲天堂视频一区| 亚洲av无码片一区二区三区 | 韩国主播福利视频一区二区三区| 成人中文在线| 成人丝袜高跟foot| 欧美日韩国产首页| 日韩av不卡在线| 日本a在线免费观看| 亚洲波多野结衣| 亚洲精品成人a| 久久日韩视频| av资源久久| 91性感美女视频| 亚洲成年人在线播放| 国产裸体写真av一区二区| 精品视频免费在线播放| 亚洲av无码一区二区三区在线| 性欧美xxx极品另类| 国产精品久久久久一区二区国产| 国产精品调教| eeuss影院一区二区三区| 日韩精品专区在线| 99国精产品一二二线| 欧美日韩理论片| 国产毛片一区二区三区va在线| 三级黄色网址| av在线亚洲色图| www.欧美日韩| 亚洲女人天堂色在线7777| 国产在线欧美日韩| 真人bbbbbbbbb毛片| 天天av天天翘| 九七久久人人| 亚洲视频精品| 黑人精品xxx一区一二区| 国模私拍视频一区| 成人午夜精品久久久久久久蜜臀| 五月天综合在线| 成人综合网址| xxxx日韩| 国产日韩欧美综合在线| 日韩一区二区久久久| 福利网在线观看| 日本一区二区不卡在线| 五月婷婷开心综合| 美女精品久久| 久久午夜电影网| 精品国产自在精品国产浪潮| av动漫在线播放| 中文字幕手机在线视频| 美女的诞生在线观看高清免费完整版中文 | 成人在线免费播放视频| 午夜激情福利电影| 99视频一区| 欧美激情影院| 成人久久久精品乱码一区二区三区| 亚洲一区二区三区在线免费| 国产在线国偷精品产拍免费yy| 色8久久精品久久久久久蜜| 奇米四色中文综合久久| 最新天堂中文在线| 亚洲精华国产精华精华液网站| www.久久热.com| 在线中文一区| 色综合久久久久网| 亚洲一区二区中文字幕| 9.1成人看片| 91久久久久久久久久久久久久| 夜夜爽视频导航| 日韩黄色三级在线观看| 不卡视频一二三| 久久综合伊人77777| 日本中文字幕网址| 99久久免费国产精精品| 97caopor国产在线视频| 免费观看在线综合| 亚洲美女av电影| 国产精品久久久久久久乖乖| 国产又大又粗又长| 污污影院在线观看| 国产麻豆视频一区| 日韩专区在线观看| 国产福利一区视频| 中国女人内谢69xxxx免费视频| 日本在线影院| 99r精品视频| 68精品久久久久久欧美| 任你躁av一区二区三区| 国产成人精品视频一区| 国产91精品入| 精品视频在线播放一区二区三区| 国产婷婷色一区二区三区在线| 久久久久久一区二区三区| 亚洲av无一区二区三区久久| 国产高清免费视频| 欧美巨大xxxx| 色婷婷精品大在线视频| 免费看污久久久| 国产污视频网站| dy888亚洲精品一区二区三区| 精品写真视频在线观看| 不卡中文字幕av| 黑人玩弄人妻一区二区三区| 成年人免费网站在线观看| 欧美人妖在线| 欧美精品三级在线观看| 400部精品国偷自产在线观看| 国产免费av电影| 都市激情亚洲一区| 国产精品美女久久久久久久| 亚洲精品免费在线视频| 国产精品第56页| 欧美日韩在线看片| 国产成人综合在线观看| 国语自产精品视频在线看| 女~淫辱の触手3d动漫| 色婷婷av金发美女在线播放| 99av国产精品欲麻豆| 国产亚洲日本欧美韩国| 亚洲综合中文网| 2018av男人天堂| 亚洲欧美日韩在线观看a三区| 中文字幕日韩高清| 秋霞午夜在线观看| 成人a'v在线播放| 欧美视频13p| 国产精品久久7| 国产探花在线视频| 成年在线播放小视频| 国产精品片aa在线观看| 亚洲一区二区免费视频| 91精品在线国产| 成人信息集中地| 成视人a免费观看视频| 日韩久久精品| 欧美日韩另类国产亚洲欧美一级| 免费看成人片| 成人黄色片在线观看| av网页在线| 免费看欧美女人艹b| 国产一区二区三区18| 少妇高清精品毛片在线视频| 亚洲日本国产精品| 国产一区二区三区四区五区3d| 国产亚洲欧美色| 国产精品入口夜色视频大尺度| 中文字幕免费视频| 91破解版在线看| 中文亚洲免费| 亚洲午夜av久久乱码| www.超碰com| 国产精品白浆视频免费观看| 视频精品二区| 午夜精品视频在线观看| 久久大片网站| 在线观看免费中文字幕| 美女尤物在线视频| 91在线精品一区二区| 国产精品999999| 国产一区二区播放| 国产区在线视频| 国产一区二区在线视频| 国产+人+亚洲| 中国1级黄色片| 国产精品一区二区三区四区色| 日本免费新一区视频| 久久精品视频导航| 少妇饥渴放荡91麻豆| 日本电影免费看| 日韩精品电影一区亚洲| 美乳少妇欧美精品| 男人舔女人下部高潮全视频| 久草电影在线| 九九九久久久精品| 91超碰caoporn97人人| 久久久久人妻一区精品色| 国产女人在线视频| 不卡视频免费播放| 国产在线一区二区三区| www.com国产| 黑人巨大精品| 精品高清美女精品国产区| 亚洲日本japanese丝袜| 香蕉人妻av久久久久天天| 成人午夜网址| 精品奇米国产一区二区三区| 亚洲欧美日韩精品一区| 性直播在线观看| 日本一不卡视频| 国产成人综合精品在线| 国产一级片视频| 三级中文字幕在线观看| 亚洲成人你懂的| 69sex久久精品国产麻豆| 国产精品美女一区二区三区四区 | 天堂资源在线| 一区二区三区欧美日| 亚洲免费视频一区| 最新中文乱码字字幕在线| 国产亚洲第一伦理第一区| 日韩经典中文字幕在线观看| 九色91porny| 日韩精品视频无播放器在线看 | 欧美激情视频一区| 久久嫩草捆绑紧缚| 妞干网免费在线视频| 午夜精品免费在线观看| 美女福利视频在线| 大香一本蕉伊线亚洲网| 极品美女销魂一区二区三区免费| 国产精品久久久久999| 国产裸体美女永久免费无遮挡| 久久伦理中文字幕| 欧美一级片在线| 色哟哟视频在线| 久草中文在线观看| 亚洲最新视频在线观看| 黄色片网址在线观看| 国产h色视频在线观看| 国产成人亚洲综合色影视| 久久av二区| 国产精品偷乱一区二区三区| 久久蜜桃精品| 91久久偷偷做嫩草影院| 五十路在线观看| 国产精品www994| 国产福利精品在线| 国产女人18毛片水真多| 欧美亚洲精品在线| 欧美激情一级精品国产| 五月婷婷六月婷婷| 网红女主播少妇精品视频| 在线日韩日本国产亚洲| 毛片a片免费观看| 免费精品一区二区三区在线观看| 日韩av在线网| 一区二区国产精品精华液| 欧美三级精品| 亚洲级视频在线观看免费1级| 国产高清一区二区三区四区| 亚洲wwww| 亚洲精品在线视频| 久久免费视频精品| 伦理一区二区三区| 久久大大胆人体| 亚洲一区二区色| 永久91嫩草亚洲精品人人| 国产精品91在线观看| 亚洲av激情无码专区在线播放| 亚洲福利专区| 国产精品免费区二区三区观看 | 国产一区二区三区在线看| 久久久精品国产sm调教| 国产精品对白| 超碰91人人草人人干| 影音先锋国产在线| 午夜久久tv| 国产精品12| 美女在线不卡| 久久久夜色精品亚洲| 精品少妇人妻av免费久久洗澡| 青青青手机在线视频观看| 欧美日韩免费观看中文| 小毛片在线观看| 成人国产激情在线| 亚洲小视频在线观看| 中文字幕 国产精品| 亚洲经典一区| 国产视频精品网| 先锋影音av资源网| 亚洲美女少妇撒尿| 能看毛片的网站| 天天综合网站| 久久综合九色九九| 亚洲第一黄色片| 久久丁香综合五月国产三级网站| 亚洲综合欧美日韩| 一区二区三区四区在线免费视频| 黄网站色欧美视频| 免费成人深夜蜜桃视频| 久久精品亚洲成在人线av网址| 51ⅴ精品国产91久久久久久| 中文字幕国语官网在线视频| 国产99久久久国产精品潘金| 干日本少妇首页| 国产蜜臀在线| 亚洲天堂成人在线| av 一区二区三区| 久久爱www久久做| 妞干网视频在线观看| 亚洲图片88| 国产手机视频精品| 国产精品一二三四五区| 美女国产一区二区| 各处沟厕大尺度偷拍女厕嘘嘘| 在线你懂的视频| 一区二区三区视频免费在线观看| 99国产揄拍国产精品| 日韩高清在线不卡| 免费无遮挡无码永久视频| av老司机免费在线| 精品久久久91| 欧美粗暴性video| 国产精品久久久久久久久动漫|