极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12954|回复: 4

Honeybee Zigbee无线通信讲解03--带地址通信

[复制链接]
发表于 2014-9-2 18:03:59 | 显示全部楼层 |阅读模式
本帖最后由 弘毅 于 2014-9-5 20:18 编辑

前两篇介绍Honeybee的时候我们使用的其实是广播模式,在这种模式下只要你在一个信道中A发送的消息,BCDE等就都能收到。这样子在数据量小的时候是没有问题的,接收端遇到不想要的信息过滤一下就可以了。但是如果数据量大了,过滤量就会比较大,缓冲区也会常常会溢出。

这时我们该怎样处理这种问题呢?

我们使用带地址的通信方式就可以解决。

在Zigbee网络中,我们使用一个16位的数字来表示设备的网络地址,范围是0-65535。

使用地址以后,网络中接收端对所有数据接收后首先都会查看地址,是否是发送给自己的,如果不是发送给自己的就会进行丢弃。

语法
Zigbee.address(本机地址,目标地址)
参数
本机地址: 0-65535
目标地址: 0-65535
返回值


首先看一下接1号机代码

  1. #include <at128rfa1.h>

  2. void setup()
  3. {
  4.   Zigbee.begin(11);  // 初始化Zigbee,定义信道
  5.   Serial.begin(9600); // 启用串口,波特率9600
  6.   Zigbee.address(1,0); // 定义Zigbee地址本机地址1,发送地址0
  7. }

  8. void loop()
  9. {
  10.   if (Zigbee.available()>0) // 判断Zigbee数据接收缓冲区是否有数据
  11.   {
  12.     Serial.println();
  13.     Serial.print("Rx: ");
  14.     while(Zigbee.available())
  15.     Serial.write(Zigbee.read());// 读取缓冲区数据,通过串口输出。
  16.   }
  17. }
复制代码


然后看一下接收2号机代码
  1. #include <at128rfa1.h>

  2. void setup()
  3. {
  4.   Zigbee.begin(11);  // 初始化Zigbee,定义信道
  5.   Serial.begin(9600); // 启用串口,波特率9600
  6.   Zigbee.address(2,0); // 定义Zigbee地址本机地址2,发送地址0
  7. }

  8. void loop()
  9. {
  10.   if (Zigbee.available()>0) // 判断Zigbee数据接收缓冲区是否有数据
  11.   {
  12.     Serial.println();
  13.     Serial.print("Rx: ");
  14.     while(Zigbee.available())
  15.     Serial.write(Zigbee.read());// 读取缓冲区数据,通过串口输出。
  16.   }
  17. }
复制代码


最后是发送端的代码。

  1. #include <at128rfa1.h>

  2. void setup()
  3. {
  4.   Zigbee.begin(11);  // 初始化Zigbee,定义信道
  5.   Serial.begin(9600);
  6.   Zigbee.address(0,1); // 定义Zigbee地址本机地址0,发送地址1
  7. }

  8. void loop()
  9. {
  10.   // 串口接收到数据,通过Zigbee发送
  11.   if (Serial.available())
  12.   {
  13.     Zigbee.beginTransmission();
  14.     Serial.println();
  15.     Serial.print("Tx: ");
  16.     while(Serial.available())
  17.     {
  18.       char c = Serial.read();
  19.       Serial.write(c);
  20.       Zigbee.write(c);
  21.     }
  22.     Serial.println();
  23.     Zigbee.endTransmission();
  24.   }
  25. }
复制代码


为了能更好的查看数据,我们需要同时打开三个串口监视器。两个接收端我们使用一个第三方的串口助手。发送端使用IDE自带的串口监视器。

在发送端,我们首先使用  Zigbee.address(0,1);来设定本机地址是0,目标是1。下载代码后打开串口监视器,发送1,2,3,4这几个数据,看看是接收端哪边收到。

然后使用  Zigbee.address(0,2);来设定本机地址是0,目标地址是2。下载好代码后打开串口监视器,发送5,6,7,8,9这几个数据,看看是不是二号机接收到数据。


惯例上图~~要点击放大后才能看清哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-4-2 21:00:12 | 显示全部楼层
竟然没有人顶,感谢弘毅大师
回复 支持 反对

使用道具 举报

发表于 2015-4-28 10:20:51 | 显示全部楼层
at128rfa1.h库哪里来的?

回复 支持 反对

使用道具 举报

发表于 2015-5-19 15:18:59 | 显示全部楼层
強,學習了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 03:59 , Processed in 0.045313 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表