<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于Zigbee技術(shù)的家用無線網(wǎng)關(guān)的設(shè)計(jì)

          基于Zigbee技術(shù)的家用無線網(wǎng)關(guān)的設(shè)計(jì)

          作者: 時(shí)間:2010-06-29 來源:網(wǎng)絡(luò) 收藏

          根據(jù)課題要求,選擇的系統(tǒng)硬件組成:采用S3C4480嵌入式開發(fā)板,該開發(fā)自帶2M FLASH和8M RAM。網(wǎng)絡(luò)芯片采用RTL8019 10M網(wǎng)絡(luò)芯片,通信模塊采用TI的CC2420芯片(兩片)。
          選用的系統(tǒng)軟件組成:uCOS-Ⅱ+基本功能協(xié)議棧+LWIP TCP/IP協(xié)議棧。
          基本功能為將TCP協(xié)議的網(wǎng)絡(luò)與Zigbee協(xié)議棧的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,從而可以將常用的以太網(wǎng)的數(shù)據(jù)發(fā)送到Zigbee網(wǎng)絡(luò)中,也可以將Zigbee網(wǎng)絡(luò)中的數(shù)據(jù)發(fā)送到以太網(wǎng)中。開啟Zigbee,其它的RFD節(jié)點(diǎn)通過與其通信,加入到該網(wǎng)絡(luò)中。這樣Zigbee無線就可以管理所有節(jié)點(diǎn)。
          這里涉及兩個(gè)主要協(xié)議棧:Zigbee協(xié)議棧和TCP/IP協(xié)議棧。
          TCE/IP協(xié)議棧這里選擇適合嵌入式應(yīng)用的LWIP協(xié)議棧,具有良好的移植性并且開放源代碼。
          考慮到目前還沒有完全可以用的Zigbee協(xié)議棧,在這里定義并實(shí)現(xiàn)了―個(gè)基本功能的Zigbee協(xié)議棧。其基本結(jié)構(gòu)為:
          (1)phy層:該層主要實(shí)現(xiàn)與具體Zigbee模塊硬件有關(guān)的操作。
          (2)mac層:基于phy層提供的接口,實(shí)現(xiàn)對(duì)Zigbee網(wǎng)絡(luò)的基本初始化,設(shè)置PAID,設(shè)置IEEE 64位地址,選擇通信通道,實(shí)現(xiàn)接收和發(fā)送Zigbee數(shù)據(jù)包功能。
          (3)nwk層:該部分用來從mac獲得接收到的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行分析,進(jìn)行一系列的操作。根據(jù)發(fā)送來的數(shù)據(jù),如果是應(yīng)用層的數(shù)據(jù),向上傳遞接收到的數(shù)據(jù)。如果是網(wǎng)絡(luò)層命令,則進(jìn)行具體操作。
          實(shí)現(xiàn)的網(wǎng)絡(luò)層命令有:
          a)終端節(jié)點(diǎn)(RFD)請(qǐng)求加入該網(wǎng)絡(luò):進(jìn)行驗(yàn)證,并為加入的終端節(jié)點(diǎn)分配地址。
          b)終端節(jié)點(diǎn)(RFD)請(qǐng)求離開該網(wǎng)絡(luò):進(jìn)行驗(yàn)證,并將該節(jié)點(diǎn)從節(jié)點(diǎn)信息列表中刪除。
          c)終端節(jié)點(diǎn)(RFD)加入該網(wǎng)絡(luò)成功。
          d)終端節(jié)點(diǎn)(RFD)離開該網(wǎng)絡(luò)成功。
          除此之外還包括針對(duì)這些請(qǐng)求的FFD響應(yīng)命令。
          (4)app層:該層從nwk層獲得數(shù)據(jù),并根據(jù)數(shù)據(jù)內(nèi)容進(jìn)行操作,與具體應(yīng)用有關(guān)。

          本文引用地址:http://www.ex-cimer.com/article/157333.htm

          3 網(wǎng)關(guān)的具體操作流程及其偽代碼
          Zigbee協(xié)議棧與TCP/IP協(xié)議棧,分別作為uCOS-II系統(tǒng)的兩個(gè)任務(wù),這兩個(gè)任務(wù)之間通過消息隊(duì)列或者郵箱的形式進(jìn)行數(shù)據(jù)通信,用以實(shí)現(xiàn)任務(wù)的數(shù)據(jù)交換。
          在啟動(dòng)主機(jī)軟件時(shí),用戶通過設(shè)定要連接的Zigbee網(wǎng)關(guān)IP,從而使用Zigbee網(wǎng)關(guān)的連接。在連接成功以后,PC主機(jī)請(qǐng)求Zigbee網(wǎng)絡(luò)中所有節(jié)點(diǎn)的信息,Zigbee網(wǎng)關(guān)將Zigbee網(wǎng)絡(luò)中所有的節(jié)點(diǎn)信息發(fā)送給主機(jī),主機(jī)軟件顯示所有可能的節(jié)點(diǎn)。獲得所有節(jié)點(diǎn)信息以后,用戶就可以選擇要通信的節(jié)點(diǎn),并通過TCP將所有的操作信息發(fā)送給該節(jié)點(diǎn),從而實(shí)現(xiàn)對(duì)節(jié)點(diǎn)控制和監(jiān)控。
          這里寫出Zigbee協(xié)議棧任務(wù)基本流程偽代碼。

          4 網(wǎng)關(guān)調(diào)試方法
          具體的操作過程:
          (1)打開串口調(diào)試助手軟件,設(shè)置波特率為57 600,8位,l位停止,無奇偶校驗(yàn)和流量控制協(xié)議。
          (2)連接好Zigbee與PC的串口,同時(shí)連接電源。
          (3)在串口調(diào)試助手軟件中將顯示有關(guān)設(shè)備啟動(dòng)的信息和Zigbee網(wǎng)關(guān)相關(guān)信息。這時(shí)說明Zigbee網(wǎng)絡(luò)已經(jīng)初始化完成,并形成了一個(gè)Zigbee網(wǎng)絡(luò)。
          (4)打開主機(jī)軟件,設(shè)置好連接的網(wǎng)關(guān)IP地址,然后點(diǎn)擊“連接”按鈕,這時(shí)在軟件左邊的列表框中顯示所有的Zigbee節(jié)點(diǎn)信息,也可以通過下面的“刷新節(jié)點(diǎn)信息”來獲得最新的節(jié)點(diǎn)信息列表。
          主機(jī)軟件最下面的只讀編輯框,里面顯示的是一些日志信息,方便調(diào)試。圖3顯示了網(wǎng)關(guān)調(diào)試情況:

          5 結(jié)論
          通過網(wǎng)關(guān)分析,發(fā)現(xiàn)該網(wǎng)關(guān)具有實(shí)用性和可行性。在網(wǎng)關(guān)的過程中,遇到不少困難,比如目前還沒有適用于ARM平臺(tái)的Zigbee協(xié)議棧,只能對(duì)現(xiàn)有的各種Zigbee協(xié)議棧進(jìn)行修改和移植,以適合ARM平臺(tái),這一步實(shí)現(xiàn)起來較為復(fù)雜。另外,為了節(jié)省設(shè)備成本,測試中兩個(gè)RFD設(shè)備同時(shí)接在一個(gè)Zigbee無線網(wǎng)關(guān)設(shè)備上,距離較近,在實(shí)際生產(chǎn)測試中并不適用。


          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();