Honeybee Zigbee无线通信讲解03--带地址通信
本帖最后由 弘毅 于 2014-9-5 20:18 编辑前两篇介绍Honeybee的时候我们使用的其实是广播模式,在这种模式下只要你在一个信道中A发送的消息,BCDE等就都能收到。这样子在数据量小的时候是没有问题的,接收端遇到不想要的信息过滤一下就可以了。但是如果数据量大了,过滤量就会比较大,缓冲区也会常常会溢出。
这时我们该怎样处理这种问题呢?
我们使用带地址的通信方式就可以解决。
在Zigbee网络中,我们使用一个16位的数字来表示设备的网络地址,范围是0-65535。
使用地址以后,网络中接收端对所有数据接收后首先都会查看地址,是否是发送给自己的,如果不是发送给自己的就会进行丢弃。
语法
Zigbee.address(本机地址,目标地址)
参数
本机地址: 0-65535
目标地址: 0-65535
返回值
无
首先看一下接1号机代码
#include <at128rfa1.h>
void setup()
{
Zigbee.begin(11);// 初始化Zigbee,定义信道
Serial.begin(9600); // 启用串口,波特率9600
Zigbee.address(1,0); // 定义Zigbee地址本机地址1,发送地址0
}
void loop()
{
if (Zigbee.available()>0) // 判断Zigbee数据接收缓冲区是否有数据
{
Serial.println();
Serial.print("Rx: ");
while(Zigbee.available())
Serial.write(Zigbee.read());// 读取缓冲区数据,通过串口输出。
}
}
然后看一下接收2号机代码
#include <at128rfa1.h>
void setup()
{
Zigbee.begin(11);// 初始化Zigbee,定义信道
Serial.begin(9600); // 启用串口,波特率9600
Zigbee.address(2,0); // 定义Zigbee地址本机地址2,发送地址0
}
void loop()
{
if (Zigbee.available()>0) // 判断Zigbee数据接收缓冲区是否有数据
{
Serial.println();
Serial.print("Rx: ");
while(Zigbee.available())
Serial.write(Zigbee.read());// 读取缓冲区数据,通过串口输出。
}
}
最后是发送端的代码。
#include <at128rfa1.h>
void setup()
{
Zigbee.begin(11);// 初始化Zigbee,定义信道
Serial.begin(9600);
Zigbee.address(0,1); // 定义Zigbee地址本机地址0,发送地址1
}
void loop()
{
// 串口接收到数据,通过Zigbee发送
if (Serial.available())
{
Zigbee.beginTransmission();
Serial.println();
Serial.print("Tx: ");
while(Serial.available())
{
char c = Serial.read();
Serial.write(c);
Zigbee.write(c);
}
Serial.println();
Zigbee.endTransmission();
}
}
为了能更好的查看数据,我们需要同时打开三个串口监视器。两个接收端我们使用一个第三方的串口助手。发送端使用IDE自带的串口监视器。
在发送端,我们首先使用Zigbee.address(0,1);来设定本机地址是0,目标是1。下载代码后打开串口监视器,发送1,2,3,4这几个数据,看看是接收端哪边收到。
然后使用Zigbee.address(0,2);来设定本机地址是0,目标地址是2。下载好代码后打开串口监视器,发送5,6,7,8,9这几个数据,看看是不是二号机接收到数据。
惯例上图~~要点击放大后才能看清哦
竟然没有人顶:o,感谢弘毅大师 at128rfa1.h库哪里来的?
強,學習了
页:
[1]