ZigBee自组局域网
64 bit MAC地址(全球唯一地址)
哎呦,我们的目的是想让Zigbee设备之间能相互沟通。那首先最先摆在我们面前的问题是怎么保证Zigbee设备的唯一性呐?在你家里,你肯定是要认识爸爸、妈妈的,同样爸爸、妈妈也要认识你。你是怎么认识爸爸、妈妈的?现在给你1S思考时间,恩,你记住了爸爸、妈妈的身高、长相等特征。也就是说爸爸、妈妈有一定的外貌特征,两个人长的完全一模一样还真是不多见。现在医学说是DNA不一样,所以每个人就不一样,对人来说是DNA就是你在地球上的唯一标示。那Zigbee设备是以什么来确定其唯一性的呐,这个好说,Zigbee设备都是我们人类制造的,我们可以人为地给它们分配一个唯一的地址。我是这么想的,查下资料(稍等5分钟…………)。唯一标示Zigbee设备的物理地址是64bit的一串数字,比如:000124B00028B679,前面24bit代表公司代码,后40bit代表地址段。这些地址需要向IEEE委员会申请。
16 bit 网络地址(用于标示Zigbee网络内部一个设备)
你可能会想,我在家里,一般只喊“爸爸”、“妈妈”就可以区分他们了,不用每次都去看他们的身高、长相等等一系列特征我就可以唯一确定我要找的人。在一个给定的Zigbee网络内,唯一确定Zigbee设备有其他方法吗?我想应该是有的,Zigbee设备之间组成网络后,每个设备会分配一个16bit的短地址,设备之间可以通过这个短地址进行通讯。局域网内,范围小了,可以使用一个更简短的地址区分不同设备。
Zigbee网络建立、设备加入
在你们的家庭中,你的爸爸、妈妈和你都有着不同的角色。有时间找出你家的户口本,户口本一般是有编号的(在户口本的左上角或者右上角)。你的爸爸有可能是户主,你是父母的子女(这不是废话吗?我只是让你知道,在家庭中不同的人有不同的角色)。那你可能要问了,Zigbee设备中都有哪些角色,不同的角色都做哪些工作?Zigbee设备里分为Coordinator、Router、Enddevice三种角色。Coordinator负责建立Zigbee网络,并为这个Zigbee网络分配一个唯一的ID(他们都叫这个ID,PANID),Router可以加入Coordinator建立的网络,同时它可以转发数据,也就是作为数据中继,用来延长Zigbee无线通讯距离。Enddevice是终端设备,加入Zigbee网络,只能接收、发送数据。
1:直接扯开嗓子大喊:“我饿啦,赶紧给我做点吃的”。这种情况下,爸爸、妈妈都听见了,可能出现以下情形:a,爸爸比较忙,回了句:“我忙着,找你妈妈”,妈妈回了句“我给你做个蛋炒饭”。b,爸爸妈妈一起回:“好孩子,我们这就给你做饭”,然后出现爸爸、妈妈一起做饭的恩爱场景。c,爸爸妈妈都比较忙,回到“熊孩子,整天打游戏,还有脸说饿,自己做饭去,我们还要看电视剧呐”,当然这种情况下,你可以考虑你自己是不是冲电话费送的。不过,话说回来啦,你扯开嗓子喊,其实有个更专业的通讯术语,广播。对,Zigbee设备之间通讯的其中一种方式就是广播,一个设备广播,其他网内的设备都能听到。
普及一下Zigbee规定的广播地址小知识:
0xFFFF -这个一个对全网络中设备进行广播的广播地址
0xFFFD -如果在命令中将目标地址设为这个地址的话那么只对打开了接收的设备进行广播
0xFFFC -广播到协调器和路由器
0xFFFE -如果目的地址为这个地址的话,那么应用层将不指定目标设备,而是通过协议栈读取绑定表来获得相应目标设备的短地址
此外的0x0000到0xFFF8都是有效的目的地址。每一个地址就只是了一个目标设备。
2:悄悄滴走到妈妈身边,单独跟妈妈说:“妈妈,我饿了”。这种情况下,极有可能是爸爸做的饭菜实在是太难吃了。想这种,在Zigbee里就是点对点的通讯方式。在这种方式下,通讯双方都要指定目标地址。
3:和爸爸约定个暗号,大声咳嗽三声。这种方式,你不用考虑什么原地址、目标地址这些琐碎的事情。你只要发出这个暗号,老爸就知道你额了,还知道你想吃啥。高明啊,这招,但是这个也要看爸爸当时的心情咋样啊。这种在Zigbee里,叫绑定(Bonding)。通讯双方绑定后,双方通讯时就不需要过多的信息,只要发送暗号,就能完成相应的功能。
知识领域 VS Endpoint
通过上面的描述,我们知道了,设备短地址是用于标示一个Zigbee设备的。就相当于在家里面你、爸爸、妈妈一样,不同称谓表示不同的人。但是,又一个问题随之浮出水面,那就是小孩和大人拥有的生活经历和涉足的知识领域不太一样啊,你把你儿子(6岁)叫过来,给他说:“儿子,妈妈不在家,今天下午我们去吃肯德基,好吧?”。“好的”儿子高兴地回答。双方沟通愉快。那下面的场景你想下,“儿子,你知道C语言里指针变量是一种存储内存地址的变量吗?”,儿子一脸茫然,“??????”。剩下的场面脑补下吧。上面的故事告诉我们双方能够愉快地沟通,交流的内容需要双方都要了解。在Zigbee通讯里有一个概念和这类似,叫Endpoit,一个Zigbee设备上可以存在好多Endpoit。还是上个图吧。
在这个例子里,左边是两个开关(可能装在走廊里),两个开关共用一个Zigbee节点“Z1”(相当于开发板上的两个按键,这点应该不难理解吧),他们一起控制右边的三个灯泡(也是接在同一个节点上的--“Z2”)。Z1的key1控制Z2的lamp1,而key2则控制Z2的lamp2与lamp3。
上图中有几个没见过的概念:cluster ID 、Binding Table,其实还有一个profile、attribute。下面我们慢慢来说这些都是什么东东。
Binding Table最好理解,上面说了,为了沟通方便,我们可以建立绑定关系,建立绑定关系的双方的短地址、Endpoit等信息都存储在Binding Table中。
Profile ID, 这个是由Zigbee组织来分配的应用ID号,比如无线开关用0x0001,智能电表用ox0002,万用遥控器用0x0003等等。在这个例子里,这个ID号是专门用来做电灯开关的。为什么要这么做呢?这里就体现了“标准”的意义,不同厂家功能的设备,由于有了这个ID就能互相间使用了,正泰的开关一样可以控制Philips的灯。。。
Endpoint,这个名字看起来容易误解,以为是设备的序号了,其实不然。在这个例子中,Z1有key1/key2两个Endpoint,分别做不同的事情。其对应了同一个"application"中的0-240个不同的“子应用”,其中0号endpoint是用"ZDO"预留的,不能占用。如果你熟悉TCP/IP,你可能感觉Endpoit和port(端口号)有点相似之处。
Cluster ID,这个怎么叫呢?叫信息簇ID吧。。。我的理解是,“这是个哪类的信息”,发送端和接收端一定要对应,但是具体这个“类”怎么分,是我们可以自己决定的。比如说这个例子,我可以这样定:Cluster ID=1代表开关一次,Cluster ID=2代表连续闪烁。。。或者定义Cluster ID=1代表点对点控制,而Cluster ID=2代表全部控制,等等。。。
attribute,在Zigbee协议栈中,每一个标准的profile(例如HA,专门用于智能家居的应用层规范)都定义了很多的Cluster ID,而每一个Cluster ID都有一些规定好的attribute及动作。
什么?太难理解了,好吧,还是来个生活中的例子吧。
以大学一年级流行的友好寝室为例:
男宿舍8个人构成开发板A, 女宿舍8个人构成开发板B.
男宿舍8个人就是开发板A上的8个EndPoint。
男宿舍5个人喜欢学习,3个爱玩,分为具有不同行为爱好的两个集团,也就是两个Profile.
女宿舍8个人3个喜欢学习,2个爱玩,剩下4个爱吃,分为3个集团,也就是三个Profile。
爱学习的Profile = 0x0010; 爱玩的Profile = 0x0011; 爱吃的Profile = 0x0012;
以上定义结束,现在来看绑定过程:
某男同学(爱玩)打个电话给女宿舍说要出去玩,8个女同学中的6个因为爱好不同(Profile值不同),直接拒绝。剩下的2个女生有一个因为讨厌该男同学(脑子中没有注册该男同学的任何示好),也拒绝了,另外一个女生暗恋该男生(脑子中已经填满该男同学的任何示好,随时准备...), 于是绑定成功。
这样以后该男生就会直接拨这位女生的手机了。
假设这位男生排名老3, 那并不一定要求这位女生也排名老3。
4 小结:
我瞎白扯了半天,不知各位看官能不能看到这个地方。上面讨论的内容也基本涵盖了初学者最疑惑,也是最想弄清楚的概念。
有了上面的基础,我们就可以根据实际的实验平台做做实验。我们就大致上理解了什么是Zigbee协议了,当然这只是从应用层了解了,如果你只是使用Zigbee技术实现你项目中的用户需求,那你根据实际的协议栈(比如Z-Stack,TI提供的Zigbee开发平台)提供的API来进行应用层开发就可以了。如果你想深入研究Zigbee协议栈或者想学习Zigbee协议栈设计思想,建议阅读开源的Zigbee协议栈源代码
LoRa 的特性总结:
传输距离:城镇可达 2-5 Km , 郊区可达 15 Km 。
工作频率:ISM 频段包括 433、868、915 MH 等。
标准:IEEE 802.15.4g。
调制方式:基于扩频技术,线性调制扩频(CSS)的一个变种,具有前向纠错(FEC)能力,semtech 公司私有专利技术。
容量:一个 LoRa 网关可以连接上千上万个 LoRa 节点。
电池寿命:长达 10 年。
安全:AES128 加密。
传输速率:几百到几十 Kbps,速率越低传输距离越长,这很像一个人挑东西,挑的多走不太远,少了可以走远。