|
本帖最后由 弘毅 于 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这几个数据,看看是不是二号机接收到数据。
惯例上图~~要点击放大后才能看清哦
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|