溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Zigbee通訊漫談(初次見面)

發(fā)布時間:2020-07-06 19:16:37 來源:網(wǎng)絡(luò) 閱讀:920 作者:zhanglianpin 欄目:網(wǎng)絡(luò)安全


鄭重聲明:以下文章內(nèi)容適合初學(xué)Zigbee的童鞋們,大神請略過……


1 緣由:

  工作中聽說過Zigbee技術(shù),只是知道是一種無線通訊技術(shù),具體技術(shù)細(xì)節(jié)及使用都不是很清楚。不料,一個項目中需要使用Zigbee技術(shù),這下可是要好好看下Zigbee是啥子?xùn)|東了。這里寫下我對Zigbee技術(shù)的一些理解。

2 啥是Zigbee呀?

  Zigbee是一種無線通訊技術(shù)。無線,顧名思義,就是通過無線電波(像WIFI,手機(jī))作為信息載體的一種通訊方式。通訊,也就是指一個設(shè)備和另一個設(shè)備之間需要溝通、交流。人和人之間需要溝通,溝通就需要使用語言,那這個語言可能存在語法,說白了就是雙方都要理解對方說的是啥,要是一個只懂中文,另一個只懂英文,那他兩個溝通就可能需要一個翻譯。設(shè)備之間也一樣,它們之間需要遵循一定的規(guī)定。兩個設(shè)備都要按照這個規(guī)定進(jìn)行收發(fā)信息,那這個規(guī)定就是協(xié)議。對于Zigbee通訊技術(shù)來說就是Zigbee協(xié)議。其實啊,計算機(jī)的技術(shù)有兩個大的方面,一個是計算機(jī)本身(硬件技術(shù)上的進(jìn)步),一個是不同設(shè)備之間的溝通。類比我們?nèi)祟悂碚f,一個是 人 本身的問題,一個是社會問題。說了這么多廢話,下面總結(jié)一下:Zigbee通訊就是設(shè)備和設(shè)備之間進(jìn)行溝通的一種方式,這種方式規(guī)定了傳輸信息需要什么物理介質(zhì),傳輸?shù)男畔⒏袷绞鞘裁礃幼拥?,誰先發(fā)送信息,信息傳輸過程中被干擾了怎么辦,對方要是沒收到怎么辦等等一系列問題。


  算了,還是看看官方怎么定義的吧:ZigBee是基于IEEE802.15.4標(biāo)準(zhǔn)的低功耗局域網(wǎng)協(xié)議。根據(jù)國際標(biāo)準(zhǔn)規(guī)定,ZigBee技術(shù)是一種短距離、低功耗的無線通信技術(shù)。

     另外附上Zigbee、WIFI、bluetooth之間的區(qū)別和聯(lián)系圖:

     Zigbee通訊漫談(初次見面)

3 和Zigbee打個招呼(混個臉熟)

  我們把Zigbee通訊和人之間溝通做個類比,然后以不斷提問的方式來闡述一下Zigbee是怎么實現(xiàn)不同設(shè)備之間通訊的。前面說啦,Zigbee一般用于局域網(wǎng)通訊(有同學(xué)舉手了,“啥是局域網(wǎng)呀?”“那個同學(xué),你先把手放下,舉著怪累的”“局域網(wǎng)就是局部使用的網(wǎng)絡(luò),也就是說小范圍內(nèi)的通訊,你像你家里需要不同設(shè)備通訊,就可以使用Zigbee技術(shù)” “我們都使用Internet上網(wǎng)、聊天,它是基于TCP/IP協(xié)議的,TCP/IP可以組成局域網(wǎng),也可以組成Internet”),那我們就以你家里人之間溝通作為類比的例子。下面假設(shè)以下場景:你家里有3口人,你、爸爸、媽媽|類比Zigbee網(wǎng)絡(luò)里有3個Zigbee設(shè)備。你現(xiàn)在大概知道我會以什么方式來聊聊這個Zigbee了吧。

  64 bit MAC地址(全球唯一地址)

  哎呦,我們的目的是想讓Zigbee設(shè)備之間能相互溝通。那首先最先擺在我們面前的問題是怎么保證Zigbee設(shè)備的唯一性吶?在你家里,你肯定是要認(rèn)識爸爸、媽媽的,同樣爸爸、媽媽也要認(rèn)識你。你是怎么認(rèn)識爸爸、媽媽的?現(xiàn)在給你1S思考時間,恩,你記住了爸爸、媽媽的身高、長相等特征。也就是說爸爸、媽媽有一定的外貌特征,兩個人長的完全一模一樣還真是不多見。現(xiàn)在醫(yī)學(xué)說是DNA不一樣,所以每個人就不一樣,對人來說是DNA就是你在地球上的唯一標(biāo)示。那Zigbee設(shè)備是以什么來確定其唯一性的吶,這個好說,Zigbee設(shè)備都是我們?nèi)祟愔圃斓模覀兛梢匀藶榈亟o它們分配一個唯一的地址。我是這么想的,查下資料(稍等5分鐘…………)。唯一標(biāo)示Zigbee設(shè)備的物理地址是64bit的一串?dāng)?shù)字,比如:000124B00028B679,前面24bit代表公司代碼,后40bit代表地址段。這些地址需要向IEEE委員會申請。

  16 bit 網(wǎng)絡(luò)地址(用于標(biāo)示Zigbee網(wǎng)絡(luò)內(nèi)部一個設(shè)備)

  你可能會想,我在家里,一般只喊“爸爸”、“媽媽”就可以區(qū)分他們了,不用每次都去看他們的身高、長相等等一系列特征我就可以唯一確定我要找的人。在一個給定的Zigbee網(wǎng)絡(luò)內(nèi),唯一確定Zigbee設(shè)備有其他方法嗎?我想應(yīng)該是有的,Zigbee設(shè)備之間組成網(wǎng)絡(luò)后,每個設(shè)備會分配一個16bit的短地址,設(shè)備之間可以通過這個短地址進(jìn)行通訊。局域網(wǎng)內(nèi),范圍小了,可以使用一個更簡短的地址區(qū)分不同設(shè)備。

 Zigbee網(wǎng)絡(luò)建立、設(shè)備加入

 在你們的家庭中,你的爸爸、媽媽和你都有著不同的角色。有時間找出你家的戶口本,戶口本一般是有編號的(在戶口本的左上角或者右上角)。你的爸爸有可能是戶主,你是父母的子女(這不是廢話嗎?我只是讓你知道,在家庭中不同的人有不同的角色)。那你可能要問了,Zigbee設(shè)備中都有哪些角色,不同的角色都做哪些工作?Zigbee設(shè)備里分為Coordinator、Router、Enddevice三種角色。Coordinator負(fù)責(zé)建立Zigbee網(wǎng)絡(luò),并為這個Zigbee網(wǎng)絡(luò)分配一個唯一的ID(他們都叫這個ID,PANID),Router可以加入Coordinator建立的網(wǎng)絡(luò),同時它可以轉(zhuǎn)發(fā)數(shù)據(jù),也就是作為數(shù)據(jù)中繼,用來延長Zigbee無線通訊距離。Enddevice是終端設(shè)備,加入Zigbee網(wǎng)絡(luò),只能接收、發(fā)送數(shù)據(jù)。

來張Zigbee家庭圖:

Zigbee通訊漫談(初次見面)

Zigbee通訊漫談(初次見面)

圖二:Zigbee網(wǎng)絡(luò)拓?fù)鋱D

    ***,你媽喊你回家吃飯啦!

    你和爸爸、媽媽在家里,你玩游戲累了,想點東西。你可以選擇以下方式和你的爸爸、媽媽溝通。

1:直接扯開嗓子大喊:“我餓啦,趕緊給我做點吃的”。這種情況下,爸爸、媽媽都聽見了,可能出現(xiàn)以下情形:a,爸爸比較忙,回了句:“我忙著,找你媽媽”,媽媽回了句“我給你做個蛋炒飯”。b,爸爸媽媽一起回:“好孩子,我們這就給你做飯”,然后出現(xiàn)爸爸、媽媽一起做飯的恩愛場景。c,爸爸媽媽都比較忙,回到“熊孩子,整天打游戲,還有臉說餓,自己做飯去,我們還要看電視劇吶”,當(dāng)然這種情況下,你可以考慮你自己是不是沖電話費送的。不過,話說回來啦,你扯開嗓子喊,其實有個更專業(yè)的通訊術(shù)語,廣播。對,Zigbee設(shè)備之間通訊的其中一種方式就是廣播,一個設(shè)備廣播,其他網(wǎng)內(nèi)的設(shè)備都能聽到。

普及一下Zigbee規(guī)定的廣播地址小知識:

0xFFFF -這個一個對全網(wǎng)絡(luò)中設(shè)備進(jìn)行廣播的廣播地址

0xFFFD -如果在命令中將目標(biāo)地址設(shè)為這個地址的話那么只對打開了接收的設(shè)備進(jìn)行廣播

0xFFFC -廣播到協(xié)調(diào)器和路由器

0xFFFE -如果目的地址為這個地址的話,那么應(yīng)用層將不指定目標(biāo)設(shè)備,而是通過協(xié)議棧讀取綁定表來獲得相應(yīng)目標(biāo)設(shè)備的短地址

此外的0x0000到0xFFF8都是有效的目的地址。每一個地址就只是了一個目標(biāo)設(shè)備。


2:悄悄滴走到媽媽身邊,單獨跟媽媽說:“媽媽,我餓了”。這種情況下,極有可能是爸爸做的飯菜實在是太難吃了。想這種,在Zigbee里就是點對點的通訊方式。在這種方式下,通訊雙方都要指定目標(biāo)地址。

3:和爸爸約定個暗號,大聲咳嗽三聲。這種方式,你不用考慮什么原地址、目標(biāo)地址這些瑣碎的事情。你只要發(fā)出這個暗號,老爸就知道你額了,還知道你想吃啥。高明啊,這招,但是這個也要看爸爸當(dāng)時的心情咋樣啊。這種在Zigbee里,叫綁定(Bonding)。通訊雙方綁定后,雙方通訊時就不需要過多的信息,只要發(fā)送暗號,就能完成相應(yīng)的功能。

知識領(lǐng)域 VS Endpoint

  通過上面的描述,我們知道了,設(shè)備短地址是用于標(biāo)示一個Zigbee設(shè)備的。就相當(dāng)于在家里面你、爸爸、媽媽一樣,不同稱謂表示不同的人。但是,又一個問題隨之浮出水面,那就是小孩和大人擁有的生活經(jīng)歷和涉足的知識領(lǐng)域不太一樣啊,你把你兒子(6歲)叫過來,給他說:“兒子,媽媽不在家,今天下午我們?nèi)コ钥系禄?,好吧?”。“好的”兒子高興地回答。雙方溝通愉快。那下面的場景你想下,“兒子,你知道C語言里指針變量是一種存儲內(nèi)存地址的變量嗎?”,兒子一臉茫然,“??????”。剩下的場面腦補(bǔ)下吧。上面的故事告訴我們雙方能夠愉快地溝通,交流的內(nèi)容需要雙方都要了解。在Zigbee通訊里有一個概念和這類似,叫Endpoit,一個Zigbee設(shè)備上可以存在好多Endpoit。還是上個圖吧。

Zigbee通訊漫談(初次見面)


 在這個例子里,左邊是兩個開關(guān)(可能裝在走廊里),兩個開關(guān)共用一個Zigbee節(jié)點“Z1”(相當(dāng)于開發(fā)板上的兩個按鍵,這點應(yīng)該不難理解吧),他們一起控制右邊的三個燈泡(也是接在同一個節(jié)點上的--“Z2”)。Z1的key1控制Z2的lamp1,而key2則控制Z2的lamp2與lamp3。

上圖中有幾個沒見過的概念:cluster ID 、Binding Table,其實還有一個profile、attribute。下面我們慢慢來說這些都是什么東東。

  Binding Table最好理解,上面說了,為了溝通方便,我們可以建立綁定關(guān)系,建立綁定關(guān)系的雙方的短地址、Endpoit等信息都存儲在Binding Table中。

 Profile ID, 這個是由Zigbee組織來分配的應(yīng)用ID號,比如無線開關(guān)用0x0001,智能電表用ox0002,萬用遙控器用0x0003等等。在這個例子里,這個ID號是專門用來做電燈開關(guān)的。為什么要這么做呢?這里就體現(xiàn)了“標(biāo)準(zhǔn)”的意義,不同廠家功能的設(shè)備,由于有了這個ID就能互相間使用了,正泰的開關(guān)一樣可以控制Philips的燈。。。
 Endpoint,這個名字看起來容易誤解,以為是設(shè)備的序號了,其實不然。在這個例子中,Z1有key1/key2兩個Endpoint,分別做不同的事情。其對應(yīng)了同一個"application"中的0-240個不同的“子應(yīng)用”,其中0號endpoint是用"ZDO"預(yù)留的,不能占用。如果你熟悉TCP/IP,你可能感覺Endpoit和port(端口號)有點相似之處。
 Cluster ID,這個怎么叫呢?叫信息簇ID吧。。。我的理解是,“這是個哪類的信息”,發(fā)送端和接收端一定要對應(yīng),但是具體這個“類”怎么分,是我們可以自己決定的。比如說這個例子,我可以這樣定:Cluster ID=1代表開關(guān)一次,Cluster ID=2代表連續(xù)閃爍。。?;蛘叨xCluster ID=1代表點對點控制,而Cluster ID=2代表全部控制,等等。。。

  attribute,在Zigbee協(xié)議棧中,每一個標(biāo)準(zhǔn)的profile(例如HA,專門用于智能家居的應(yīng)用層規(guī)范)都定義了很多的Cluster ID,而每一個Cluster ID都有一些規(guī)定好的attribute及動作。

什么?太難理解了,好吧,還是來個生活中的例子吧。

以大學(xué)一年級流行的友好寢室為例:
男宿舍8個人構(gòu)成開發(fā)板A, 女宿舍8個人構(gòu)成開發(fā)板B.
男宿舍8個人就是開發(fā)板A上的8個EndPoint。
男宿舍5個人喜歡學(xué)習(xí),3個愛玩,分為具有不同行為愛好的兩個集團(tuán),也就是兩個Profile.
女宿舍8個人3個喜歡學(xué)習(xí),2個愛玩,剩下4個愛吃,分為3個集團(tuán),也就是三個Profile。
愛學(xué)習(xí)的Profile = 0x0010; 愛玩的Profile = 0x0011; 愛吃的Profile = 0x0012;
以上定義結(jié)束,現(xiàn)在來看綁定過程:
某男同學(xué)(愛玩)打個電話給女宿舍說要出去玩,8個女同學(xué)中的6個因為愛好不同(Profile值不同),直接拒絕。剩下的2個女生有一個因為討厭該男同學(xué)(腦子中沒有注冊該男同學(xué)的任何示好),也拒絕了,另外一個女生暗戀該男生(腦子中已經(jīng)填滿該男同學(xué)的任何示好,隨時準(zhǔn)備...), 于是綁定成功。
這樣以后該男生就會直接撥這位女生的手機(jī)了。
假設(shè)這位男生排名老3, 那并不一定要求這位女生也排名老3。

4 小結(jié):

 我瞎白扯了半天,不知各位看官能不能看到這個地方。上面討論的內(nèi)容也基本涵蓋了初學(xué)者最疑惑,也是最想弄清楚的概念。

5 Zigbee協(xié)議棧結(jié)構(gòu)

 Zigbee協(xié)議棧設(shè)計時采用了分層的設(shè)計思想。還是上個圖:

Zigbee通訊漫談(初次見面)可以看到,Physical (PHY) Layer和MAC  Layer是IEEE 802.15.4定義的。

分層模式下Zigbee通訊的示意圖:

Zigbee通訊漫談(初次見面)在802.15.4和Zigbee協(xié)議中,用“原語”的概念來描述相鄰兩個層間的服務(wù),層間調(diào)用函數(shù)或者傳遞信息,都可以用原語來表示。雖然,在整個系統(tǒng)中,有很多不同的層,但是層間的通訊方式是非常相似的。比如PHY、MAC與NWK層都為他們的上一級提供數(shù)據(jù)服務(wù),其請求數(shù)據(jù)服務(wù)的機(jī)制類似:高層通過D-SAP向下級請求傳輸,下級傳輸成功后將狀態(tài)返回給上級。

  正是由于這種相似性,才讓“服務(wù)原語”這種方式顯得格外重要。每一個原語要么執(zhí)行一個指令,要么返回一個之前指令的運(yùn)行結(jié)果。原語也會帶著指令運(yùn)行需要的參數(shù)。

Zigbee通訊漫談(初次見面)  上圖描述了某層為其上層提供服務(wù)的一般方法,如圖所示,有四種類型的原語:請求、指示、響應(yīng)和確認(rèn)。換句話說,在802.15.4和Zigbee標(biāo)準(zhǔn)中的所有服務(wù)都可以歸類為上述四種原語之一。原語用下面的格式來描述:
(注:出于本文讀者多數(shù)為現(xiàn)在或者未來的軟件工程師,后面直接用英文名稱來表述四種原語)
<The primitive>.request
<The primitive>.indication
<The primitive>.response
<The primitive>.confirm

  首先,由N+1層向N層用request原語申請一個服務(wù),比如說MAC層向PHY層請求一個MPDU傳輸服務(wù),它必須要向PHY層申請一個PD-Data.request的原語。

  而N層會向其服務(wù)用戶(經(jīng)常是N+1層)發(fā)出一個indication的原語,用來指示一個對N+1層很重要的事件。比如說,PHY層接收到一組數(shù)據(jù),需要將此數(shù)據(jù)傳遞給MAC層,那么它就向MAC層產(chǎn)生發(fā)出一個PD_Data.indication的原語,用來向其傳遞數(shù)據(jù)。

  如果這個indication原語要求對其做出響應(yīng),那么N+1層就會發(fā)出一個response原語。值得注意的是,PHY和NWK層沒有任何response原語,而只有MAC和APL層有。

  而confirm原語是由N層發(fā)出,用來最終確認(rèn)最初N+1層申請的request服務(wù)已經(jīng)完成。比如在上例中,數(shù)據(jù)發(fā)送完成后,PHY層會告訴MAC層,傳輸已經(jīng)成功完成。

注:本文只是用一種淺顯易懂的方式,讓讀者了解原語的基本概念,如果讀者需要深入了解每層提供的原語細(xì)節(jié),請直接閱讀802.15.4和Zigbee的協(xié)議文檔。

 ZigBee設(shè)備在工作時,各種不同的任務(wù)在不同的層次上執(zhí)行,通過層的服務(wù),完成所要執(zhí)行的任務(wù)。每一層的服務(wù)主要完成兩種功能:根據(jù)它的下層服務(wù)要求,為上層提供相應(yīng)的服務(wù);另一則是根據(jù)上層的服務(wù)要求,對它的下層提供相應(yīng)的服務(wù)。各項服務(wù)通過服務(wù)原語來實現(xiàn)。可以把原語看作是API函數(shù) 是ZigBee中最基本的操作, 一般協(xié)議都有對原語進(jìn)行程序?qū)崿F(xiàn) 在自己開發(fā)系統(tǒng)時,只需要調(diào)用,設(shè)定參數(shù)就好了 。如果要自己實現(xiàn)底層的細(xì)節(jié)那就必須在開源的協(xié)議棧中,深入到原語的級別。也就是說,對于原語我們只需要了解就行,真正開發(fā)程序只知道我們給系統(tǒng)哪些參數(shù)就行了。

6 總結(jié)

  有了上面的基礎(chǔ),我們就可以根據(jù)實際的實驗平臺做做實驗。我們就大致上理解了什么是Zigbee協(xié)議了,當(dāng)然這只是從應(yīng)用層了解了,如果你只是使用Zigbee技術(shù)實現(xiàn)你項目中的用戶需求,那你根據(jù)實際的協(xié)議棧(比如Z-Stack,TI提供的Zigbee開發(fā)平臺)提供的API來進(jìn)行應(yīng)用層開發(fā)就可以了。如果你想深入研究Zigbee協(xié)議?;蛘呦雽W(xué)習(xí)Zigbee協(xié)議棧設(shè)計思想,建議閱讀開源的Zigbee協(xié)議棧源代碼(freakz協(xié)議棧、TinyOS等)。

記得閱讀 ZIGBEE SPECIFICATION 哦。

官方資料:Zigbee specification

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI