嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

无线个人区域网络(Wireless Personal Area Network,WPAN)(二):ZigBee

上一个 Blog 跟大家提过Wireless PAN (WPAN) 为无线装置之间的短距、低资料传输率的通讯架构。目前大家所熟知的WPAN 范例,则为蓝芽(802.15.1) 与ZigBee (802.15.4)。蓝芽(Bluetooth) 已为布署于多款消费性电子设备中的普遍技术,可迅速传输少量资料。 ZigBee 则为低传输率的WPAN 标准,可广泛用于感测器网路、远端控制,与家庭/建物自动化的应用。这个Blog就跟大家讲解一下Zigbee以及Zigbee的一些应用啦!

Zigbee

 Zigbee其实是基于IEEE 802.15.4之上,一个低速短距离传输的无线网路协定,在这个标准下还有ISA100.11a, WirelessHART,同MiWi。 IEEE 802.15.4其实是指物理层(Physical layers) 和媒体存取层(Medium access control layer)的标准。在此之上的应用层(Application layer) 和网络层(Network layer) 规范则交由Zigbee定义。 Zigbee的目标是针对远程控制和传感器的应用,适用于恶劣,短程的传输环境,有低速、低耗电、低成本、支援大量网路节点等特点。

ZigBee标准和ZigBee Alliance

ZigBee标准由主要由Honeywell公司组成的ZigBee Alliance制定。该组织拥有超过70名成员,其中以飞利浦,三星,Ember,三菱,摩托罗拉所最为积极。 ZigBee Alliance将会因应制造商和系统开发商的要求,不断开发新的标准。

ZIGBEE 版本

COMMENTS AND DETAILS

ZigBee 2004

这个版本是在2005年6月释出,ZigBee 最原本的版本,,称为ZigBee1.0。

ZigBee 2006

这个版本新加入了群集库(cluster library)并在2006年9月释出,称为ZigBee V1.1。

ZigBee 2007

在2008年10月,这版本ZigBee包含了两个不同的配置设定(Profile class),称为ZigBee V1.2。

ZigBee PRO

ZigBee Pro 是ZigBee 2007其中一个配置设定。 ZigBee PRO提供了更多强化功能,包括加强安全性。

RF4CE

RF4CE 全名为Radio Frequency for (4) Consumer Electronics,RF4CE的目标是为了视听的应用而设计,第一个RF4CE版本在2009年释出。

Zigbee? Xbee?

XBee其实是一个产品的名称,XBee 802.15.4 (Series 1)是一个基于ZigBee媒体存取层(MAC, Medium access control layer)上开发的产品,而并不是一个标准。听起上来会很怪诞,但事实上,由于在MAC之上的应用层(Application layer)是用XBee自己的语言编写,造成了只有XBee的产品只能与相应的XBee沟通,但就无法与其他ZigBee标准的产品沟通的情况。

一般常用的XBee有两款,分别是:XBee和XBee Pro 。技术上,XBee PRO有更好的通信范围,但耗电却比较大。除非你需要有长途通信(其实最多都只是700米左右),否则大多数情况下XBee已经足够应付。

XBee可以做什么?

XBee主要是用来控制和监控,只要你的应用需要不超过250kbp的传输速率,XBee就可以满足到你了。 XBee是很好的遥测,遥控,无线网络机器人和家电的远程控制的工具,只要你敢于尝试,必定能发掘XBee更多的用途。

好,如果你已经确定了的XBee是适合你的项目。但是,如何开始呢?第一步当然是要有两块XBee,因为XBee只会同相应XBee沟通。第二点是XBee可以一对一收发之外,又具备一对多收发信号的功能,这意味着XBee将可以用于监察和控制多个设备。

XBee收发器一般是以XBee模块作为发射器和接收器的装置,这种模式下,因为XBee只是一个收发模块,它还是需要用微控制器来去控制的。 XBee模块接收来自微控制器的UART引脚的信号后,就会发射出去,它会通过其他已配对正确MY,DL地址的XBee传输,所有由另一个XBee接收到的数据将会被传输到微控制器到,再交由微控制器去处理。

XBee 应用示范

以下來我將會教大家初嘗XBee的滋味!這個示範主要是透過使用XBee,使Arduino 之間能做到無線的通訊!

你需要用到的材料有:兩塊Arduino development board ,兩塊 XBee breakout boards ,兩塊2 相應的XBee RF Module,一些LED和開關,除了這些之外,還有一些供電的零件:0.1uF電容,10Kohm電阻和NPN三極管(5v 和3.3v)。

需要注意的是,以下的內容只適用於Series 1 XBees(XBee 802.15.4)之上。

首先,先把XBee RF Module都焊上breakout boards上,這個其實只是一個簡單的PCB用來連接其他元件。

第二步,把供電,Arduino和XBee都連接好在一塊麵包版上,需要注意XBee的運作電壓為3.3v,有別於Arduino的5v。之後,把3.3V電源(來自3.3v三極管)連接到XBee的pin1上, pin10就接地,信號方面,兩塊接收器的連接方式都一樣,連接Arduino 的pin12 到XBee的pin2,pin13 到XBee的pin3。

以下是發射器的程式碼:

// serial out is on port 1

// serial in is on port 0

// a digital input =port 12

int switchPin = 12;

// a status light =port 13

int ledPin = 13;

char thisByte = 0; //thisByte就是需要送出的字串

void setup () {

pinMode(ledPin, OUTPUT);

pinMode(switchPin, INPUT);

Serial.begin(9600);

blinkLED(ledPin, 3);

Serial.print("X");

delay(1100);

Serial.print("+++");

delay(1100);


if (returnedOK() == 'T') {

}

else {

setup();


// 设定PAN (personal area network) ID号码

// 这个示范将用0x3330 作为密码,当然你亦都可以自己选择

// 由0x0 到0xFFFE

Serial.print("ATID3330,");

Serial.print("DH0,");

Serial.print("DL1,");

 Serial.println("CN");

if (returnedOK() == 'T') {

setup();

}

}

void loop () {

thisByte = digitalRead(switchPin);

Serial.print(thisByte, DEC);

}


void blinkLED(int targetPin, int numBlinks) {

for (int i=0; i<numBlinks; i++) {

digitalWrite(targetPin, HIGH);

delay(250); 

 digitalWrite(targetPin, LOW);

delay(250);

}


char returnedOK () {

//这个程序是用来校验字串是否完整地送出

char incomingChar[3];

char okString[] = "OK";

char result = 'n';

int startTime = millis();


while (millis() - startTime < 2000 && result == 'n') { // timeout = 10 seconds

if (Serial.available() > 1) {

 for (int i=0; i<3; i++) {

incomingChar[i] = Serial.read();

}


if ( strstr(incomingChar, okString) != NULL ) {

 if (incomingChar[0] == 'O' && incomingChar[1] == 'K') {

result = 'T';

 else {

 result = 'F';

}

}

}

return result;

}

以下是接收器的程式碼:

int outputPin = 12;

int ledPin = 13;

char inByte = 0; //inByte就是接收字串的地方

void setup () {

pinMode(ledPin, OUTPUT);

pinMode(outputPin, OUTPUT);

Serial.begin(9600);

blinkLED(ledPin, 3);

Serial.print("X");

delay(1100);

Serial.print("+++");

delay(1100);

if (returnedOK() == 'T') {

}

else {

setup(); }

Serial.print("ATID3330,");

// 设定MY (16 bit address)

// 这个示范用 0x0 为发射 0x1 为接收

// 当然你亦都可以用0x0 到0xFFFE之间任何一个数字

Serial.print("MY1,");

Serial.println("CN");

if (returnedOK() == 'T') {

}

else {

setup(); }

}

void loop () {

if (Serial.available() > 1) {

inByte = Serial.read();

}

if (inByte == '1') {

digitalWrite(outputPin, HIGH);

}

else {

digitalWrite(outputPin, LOW);

}

}


void blinkLED(int targetPin, int numBlinks) {

for (int i=0; i<numBlinks; i++) {

digitalWrite(targetPin, HIGH);

delay(250);

digitalWrite(targetPin, LOW); 

delay(250);

}

}

char returnedOK () {

char incomingChar[3];

char okString[] = "OK";

char result = 'n';

int startTime = millis();

while (millis() - startTime < 2000 && result == 'n') { 

if (Serial.available() > 1) {

for (int i=0; i<3; i++) {

incomingChar[i] = Serial.read();

}

if ( strstr(incomingChar, okString) != NULL ) {

if (incomingChar[0] == 'O' && incomingChar[1] == 'K') result = 'T'; } 

else {

result = 'F'; }

}

return result;

}

最后,在XBee 的6,13,15 pin上加上一些LED用来监测XBee的情况。现在,只要把inByte 和thisByte放进你的程式里,再把上面两个程式烧入Arduino,你就可以透过XBee 来作无线传输了!

这是网友使用的Zigbee的示范。

 

RF4CE,Radio Frequency for (4) Consumer Electronics

一些世界领先的一些消费类电子产品公司(如松下、飞利浦、三星和索尼)很早已经认识到,传统的红外线遥控器,由于协议种类的复杂以及一些明显的缺陷,已经无法满足用户的需求。经过一段时间之后,他们决定共同成立一个联盟来共同解决传统遥控器的问题,这个联盟就是RF4CE联盟由来啦。


RF4CE (Radio Frequency for Consumer Electronics)顾名思义就是为消费电子提供的RF技术。目前采用的是全球通用频段2.4GHz(常见的如蓝牙和Wi-Fi),协定则是基于2003年开始就有的IEEE 802.15.4标准。 2009年初,ZigBee组织宣布与四家全球最大的消费电子制造商合作。最终产生了ZigBee RF4CE标准,该标准为针对家庭自动化和娱乐应用的基于ZigBee的RF遥控和设备开发提供了公共平台。 RF4CE技术上具有4个方面的主要优势:传输距离大大、具备穿越障碍物能力、具备双向通信能力、超低功耗。
RF4CE联盟成立之后,一些厂商陆续发布了相应标准的产品,以下是一些我觉得很出色的产品。


Microchip ZigBee RF4CE平台

 


TI ZigBee® RF4CE advanced remote control solutions

下一编: 无线个人区域网络(Wireless Personal Area Network,WPAN)(三):蓝牙Bluetooth

Hello everyone! :) I’m 3rd-year undergraduate student from the Department of Electronic & Computer engineering, at the Hong Kong University of Science and Technology. During my studies, I have taken electronics courses such as Electro-Robotics and Embedded System Design and found it fascinating to learn how to get all of the components of such systems, a robotic car in my case, to work together. It is very satisfying to see my car follow the track and perform its task perfectly. It’s like seeing my creation come alive! Through this Designspark Blog, I would like to share what I have learnt in the field of electronics with all of you and also introduce you to some cool electronics news and products. As a student, I understand how painful it is to read through papers that I can barely understand a word of it. I will try to explain everything is a simple way so that anyone can understand it. I hope everyone can share my joy in building electronics gadgets. If you find my blog useful, please share it with your friends! 大家好!:) 我是来自香港科技大学,电子及计算器工程学系三年级的学生。在我过去两年多的学习中,我选修了不少电子课程,当中包括电子机械人及嵌入式系统设计。我发觉在学习如何使不同零件去拼凑成一个嵌入式系统,例如一辆智能电动车,的过程中,不单只令我获益良多并且在完成后更能获得很大的满足感,所以在这一方面我一直都很感兴趣。 透过Designspark博客,我想分享我在电子领域内所学到的点滴,也想为您介绍一些很酷的电子新闻和产品。作为一名学生,我非常明白钻研一份堆满难明生字的文章是多么痛苦,我会尝着用简单明了的字眼去解释,使任何人都可以理解。 我希望我能透过这个管道去分享制作电子小手作的有趣之处。如果你觉得我的博客有趣又或者很有用,请与您的朋友分享!
DesignSpark Electrical Logolinkedin