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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 智能家居無線網(wǎng)絡(luò)通訊協(xié)議設(shè)計(jì)方案

          智能家居無線網(wǎng)絡(luò)通訊協(xié)議設(shè)計(jì)方案

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

          無線

            智能家終端設(shè)備品種繁多,且功能不一,不同設(shè)備要進(jìn)行統(tǒng)一控制,必須對(duì)各種設(shè)備進(jìn)行抽象處理,提取它們的共同特征??梢园呀K端設(shè)備抽象成文件,在控制端分配一塊內(nèi)存描述該設(shè)備當(dāng)前狀態(tài),利用設(shè)備控制方法讀取或修改當(dāng)前狀態(tài),控制方法可分為三類:文件讀?。≧ead),文件修改(Write),文件控制(Control)。

            Read:讀設(shè)備文件操作,即對(duì)節(jié)點(diǎn)設(shè)備狀態(tài)掃描查詢,程序設(shè)計(jì)API 如下:

            void drv_lit_read(rxp_cmdreq req)以上為讀設(shè)備API 入口,參數(shù)req 為結(jié)構(gòu)體指針,寫、控制設(shè)備操作類似。

            Write:寫設(shè)備文件操作,即對(duì)節(jié)點(diǎn)設(shè)備狀態(tài)修改,程序設(shè)計(jì)API 如下:

            void drv_lit_write(rxp_cmdreq req)Control:控制設(shè)備文件操作,即對(duì)節(jié)點(diǎn)設(shè)備狀態(tài)的調(diào)節(jié)。程序設(shè)計(jì)API 如下:

            void drv_lit_cnt(rxp_cmdreq req)并不是所有的文件都支持這三種控制方法,多數(shù)文件只支持前兩種控制方法,下文以燈控設(shè)備為例。

            3.1

            無線射頻模塊nRF24l01 對(duì)應(yīng)收發(fā)模式的數(shù)據(jù)有效負(fù)載最大為32 個(gè)字節(jié),該數(shù)據(jù)包作為一幀數(shù)據(jù),其中可分成三類數(shù)據(jù):驅(qū)動(dòng)接口數(shù)據(jù),記錄控制數(shù)據(jù)以及記錄數(shù)據(jù),輸入幀與輸出幀數(shù)據(jù)類型相同。數(shù)據(jù)格式如表1.

          表1 幀數(shù)據(jù)格式

          智能家居無線網(wǎng)絡(luò)通訊協(xié)議設(shè)計(jì)方案

            (1)驅(qū)動(dòng)接口數(shù)據(jù)。

            Dest:接收端地址,1 字節(jié)表示,屬性值從0-255,可以表示256 個(gè)節(jié)點(diǎn)地址,滿足多數(shù)的節(jié)點(diǎn)資源。

            Src:發(fā)送端地址,1 字節(jié)表示,與Dest 意義相同。

            Cmdid:節(jié)點(diǎn)命令碼,1 字節(jié)表示,如上文表示,共有三種類型:0x01,表示讀命令(read);0x02,表示寫命令(write);0x03,表示控制命令(control)。

            節(jié)點(diǎn)即對(duì)應(yīng)從控制器編號(hào)。

            Fileid:文件標(biāo)志符,1 字節(jié)表示,即節(jié)點(diǎn)地址上對(duì)應(yīng)的設(shè)備號(hào),最大支持0x00-0xFF 256 個(gè)文件。

            (2)記錄控制數(shù)據(jù)。

            Result:操作結(jié)果碼,1 字節(jié)表示,當(dāng)有數(shù)據(jù)返回時(shí),要求填寫該字節(jié)。0x00,操作成功;0x10,非法節(jié)點(diǎn);0x11,非法文件標(biāo)識(shí)符;0x12,非法初始記錄值;0x13,非法記錄。0xFF,默認(rèn)無效值。

            Start:記錄開始值,1 字節(jié)表示,當(dāng)有多條記錄操作時(shí),該值即對(duì)應(yīng)的記錄序。

            Len:記錄長度,1 字節(jié)表示,當(dāng)作為輸入數(shù)據(jù)時(shí),表示記錄操作的長度,如果Len 值大于當(dāng)前節(jié)點(diǎn)的最大記錄長度,則取當(dāng)前節(jié)點(diǎn)記錄長度最大值;當(dāng)作為輸出數(shù)據(jù)時(shí),表示當(dāng)前節(jié)點(diǎn)操作的記錄長度。

           ?。?)記錄數(shù)據(jù)Records:記錄數(shù)據(jù)緩沖,緩沖區(qū)達(dá)25 個(gè)字節(jié)。

            該緩沖區(qū)可存放多條記錄,記錄格式如表2,每條記錄字節(jié)長度不一,一般在3-5 個(gè)字節(jié)左右,最多能存放8 條記錄。

          表2 記錄數(shù)據(jù)格式

          智能家居無線網(wǎng)絡(luò)通訊協(xié)議設(shè)計(jì)方案

            該Len 值與記錄控制數(shù)據(jù)中的Len 值意義不同,表示該條記錄的字節(jié)長度,其中并不包含本身字節(jié)長度,1 個(gè)字節(jié)長度;Opt 值為保留字節(jié),一般無意義,控制命令與該字節(jié)相關(guān),1 個(gè)字節(jié)度;Content 為設(shè)備文件的記錄值,記錄字節(jié)長度不定,一般1-2 字節(jié)長。

            3.2 協(xié)議擴(kuò)展與特點(diǎn)

            地址資源,單字節(jié)的Dest 與Src 地址分配對(duì)于普通的用戶完全能滿足要求,對(duì)于家居環(huán)境復(fù)雜,地址分配點(diǎn)較多的用戶,可能會(huì)出現(xiàn)資源不夠的情況,該情況可將Dest 與Src 地址擴(kuò)展至16 位,即2字節(jié)。滿足65535 個(gè)節(jié)點(diǎn)要求。

            節(jié)點(diǎn)命令碼,三種命令類型只占用Cmdid 的二位,其余的高六位值保留,以備協(xié)議擴(kuò)展所需。同理。

            記錄選項(xiàng),Opt 為保留字節(jié),默認(rèn)值為0x00,該字節(jié)主要針對(duì)控制操作,用于記錄控制操作符,如表2 說明,主要針對(duì)燈控文件的變亮,變暗操作。

            該的設(shè)計(jì)主要有以下特點(diǎn):

            (1)統(tǒng)一外設(shè),將外部設(shè)備抽象成標(biāo)準(zhǔn)文件,并在控制器內(nèi)存記錄文件內(nèi)容,操作指定設(shè)備只需訪問該設(shè)備映射文件所處內(nèi)存空間數(shù)據(jù)即可,規(guī)范外設(shè)標(biāo)準(zhǔn),提高通訊效率。

            (2)通訊協(xié)議的制定極大的優(yōu)化了主控制器與射頻模塊之間的數(shù)據(jù)傳輸性能,主控制器只需根據(jù)固定的通訊協(xié)議格式填充即可,簡化其處理過程。

            (3)同樣簡化了從控制節(jié)點(diǎn)的數(shù)據(jù)處理過程。



          評(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); })();