Zigbee學習系列——2.瞭解

自己想做一個物聯網的所有部分,本以爲這部分內容應該是重中之重,但是真正做起來才發現,自己的物聯網整體架構纔是最主要的,ZigBee只是其中的一小部分。

到目前爲止也算是瞭解了ZigBee協議棧的一部分的工作,所以這裏記錄一下我對這個協議棧的瞭解。

一、組網

1、信道和PanID

先不說協議棧對外做的那行底層驅動接口,就說一下聯網吧。如果我們手機連接對應的WiFi,那我們需要知道WiFi名稱和密碼,但是事實上除了這兩個還有其他的好多信息必須知道纔可以連接,但是其他信息又被做了統一,這就導致我們連接WiFi是如此的簡單。ZigBee設備如果需要連接同一個網絡,必須知道協調器組網使用的信道和PanID,信道即爲信號通道,這和2.4GHz有關,這裏不去解釋,網上一搜一大堆,2.4GHz下有16個信道,一個網絡用一個即可,顯然,現在的設備那麼多,僅僅通過一個信道是沒有辦法區分開網絡的(想想,一旦周圍的信號超過16種,必然有重複的),所以這裏提供了另一個內容:PanID,PanID是一個16位數字,它可以自定義(範圍 0~FFFE),也可以由協調器隨機分配(範圍 0~3FFF),當協調器中的PanID被設置爲0xFFFF,則初始化的時候協調器會自己隨機分配一個PanID(實際上也是有規律的),否則按你設置給協調器的PanID來進行組網。

如果想要連接入一個ZigBee網絡,只需要信道和PanID相同即可連接,這裏只是說了條件,但是要真正的連接還需要協調器設置可以入網纔可以,就好比你有了對應的學生證,但是門必須打開你纔可以進入。但即使門是開的,你的學生證不是這個學校的,照樣進不去。

理論上來講,你可以給協調器隨意設置信道和PanID值,只要其他節點設置相同即可。但是現實是我們的周圍存在各種信號,一些信道里的內容特別多,這個時候就需要根據選擇一個最優的信道和沒有用過的PanID來進行組網,正確做法是一個一個測試信號等等,但個人又不是工業,也不是商用,也不專業,所以就理論上設置一下就好啦!參考一下這個:

https://blog.csdn.net/stone8761/article/details/79651569

2、地址

ZigBee設備在使用時有兩個地址,一個是身份證地址64位的IEEE,這個地址在出生時(被生產出)就已經時確定的,並且唯一,另一個是網絡地址16位短地址,這個地址在連接到網絡後才能確定,在當前網絡下唯一,由協調器管理和分配,默認協調器的網絡地址位0x0000,並且網絡中收發信息都是以這個網絡地址來進行操作的(當然也可以使用64位的長地址),那麼問題來了,既然有一個唯一的身份證地址,幹嘛還需要一個短地址,首先,64位地址太長,每次收發數據都需要攜帶地址,佔用內存,所以不方便,其次,你想想你有一個身份證號碼爲什麼學校還要給你分配一個學號,而且每個學校都不一樣,公司要給你分配一個工號,這其中的道理都是差不多的。

其中有幾個特殊的地址,當給這幾個特殊的地址發消息時會有特殊的效果:

0x0000   協調器地址,給0x0000發送消息,協調器會收到

0xFFFF  全網絡地址,給該地址發送消息,該網絡下所有設備都會收到

二、聯網

協調器上電後首先初始化會根據配置的信道和PanID來組件網絡(這裏不貼任何代碼,因爲其他博客已經很全面了),然後打開可以入網(前提是你配置了自動入網),此時路由和終端上電會自動搜索合適的網絡來進行入網申請,這裏注意,入網申請時還沒有被分配短地址,所以此時是使用64位長地址對0x0000地址發送入網申請信息,如果沒有什麼問題,協調器會進行地址分配然後給該長地址設備發送分配好的地址和其他相關信息,然後協調器進行全網通告新設備加入消息(向0xFFFF發送),之後的消息則是通過短地址來進行的。

那這裏就又有一個問題了,短地址是在聯網後才能分配好,那麼我要發送消息怎麼知道對方的呢!

這就是ZigBee協議棧的功能了,ZigBee協議棧只負責連接好每一個合適的ZigBee設備並且讓ZigBee設備在當前網絡下保持唯一值,並且保證當一切設備合適時可以正常的收發信息,僅此而已,至於怎麼去管理好ZigBee下的設備功能和記錄連接的個數等等外圍功能均由自己去實現。

這就是我對ZigBee協議棧的瞭解,如有不合適的地方還請多多指教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章