How do you feel about this article? Help us to provide better content for you.
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
What do you think of this article?
上一个 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标准由主要由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主要是用来控制和监控,只要你的应用需要不超过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
Comments