极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30646|回复: 7

HoneyBee入门教程--第二课--无线串口通信

[复制链接]
发表于 2013-5-27 13:29:43 | 显示全部楼层 |阅读模式
本帖最后由 swim 于 2013-5-27 16:36 编辑

由于HoneyBee兼容普通Arduino,本教程将暂时先不介绍普通Arduino的内容,后面慢慢补。。Arduino的一些基本操作可参考Arduino入门教程系列。

本课中将带大家体验最简单的Zigbee通信案例,无线串口通信。
本课中的代码为example中的ZigduinoRadio-ZigduinoRadioExample
本课中使用的无线模式为广播模式


代码如下:

  1. /*
  2. 翻译:swim
  3. 时间:2013年5月27日
  4. 发表地址:www.geek-workshop.com
  5. 程序说明:无线串口通信
  6. */
  7. #include <ZigduinoRadio.h>

  8. void setup()
  9. {
  10. //初始化Zigbee,定义通道
  11.   ZigduinoRadio.begin(11);
  12.   Serial.begin(9600);
  13. //这两个函数是检测数据是否成功发送
  14.   ZigduinoRadio.attachError(errHandle);
  15.   ZigduinoRadio.attachTxDone(onXmitDone);
  16. }

  17. void loop()
  18. {
  19. //串口接收到数据,通过Zigbee发送;Zigbee接收到数据,通过串口打出
  20.   if (Serial.available())
  21.   {
  22.     ZigduinoRadio.beginTransmission();
  23.    
  24.     Serial.println();
  25.     Serial.print("Tx: ");
  26.    
  27.     while(Serial.available())
  28.     {
  29.       char c = Serial.read();
  30.       Serial.write(c);
  31.       ZigduinoRadio.write(c);
  32.     }
  33.    
  34.     Serial.println();
  35.    
  36.     ZigduinoRadio.endTransmission();
  37.   }
  38.   
  39.   if (ZigduinoRadio.available())
  40.   {
  41.     Serial.println();
  42.     Serial.print("Rx: ");
  43.    
  44.     while(ZigduinoRadio.available())
  45.       Serial.write(ZigduinoRadio.read());
  46. //打印出无线通信的信号强度、质量等参数      
  47.     Serial.println();
  48.     Serial.print("LQI: ");
  49.     Serial.print(ZigduinoRadio.getLqi(), 10);
  50.     Serial.print(", RSSI: ");
  51.     Serial.print(ZigduinoRadio.getLastRssi(), 10);
  52.     Serial.print(" dBm, ED: ");
  53.     Serial.print(ZigduinoRadio.getLastEd(), 10);
  54.     Serial.println("dBm");
  55.   }
  56.   
  57.   delay(100);
  58. }

  59. void errHandle(radio_error_t err)
  60. {
  61.   Serial.println();
  62.   Serial.print("Error: ");
  63.   Serial.print((uint8_t)err, 10);
  64.   Serial.println();
  65. }

  66. void onXmitDone(radio_tx_done_t x)
  67. {
  68.   Serial.println();
  69.   Serial.print("TxDone: ");
  70.   Serial.print((uint8_t)x, 10);
  71.   Serial.println();
  72. }
复制代码

可以看到,HoneyBee的无线通信非常简单,几乎和串口的使用无差别,其中程序中有两个函数可以检测发送内容是否成功发送,在以后的课程中,我们将会使用这两个函数来介绍可靠发送的实现,即接收端收到数据后将返回一个值给发射端。

将该代码分别下载到每一块HoneyBee板子上(本次实验我们使用了2块HoneyBee板子,你可以使用更多)


分别打开串口监视器

然后我们可以尝试在任意一个串口监视器中输入内容并发送

可以看到,我们在其中一块的串口上发送了HelloWorld!,另外一块板子立刻接收到了HelloWorld!这个内容,并且在下方还有信号强度和质量等信息,然后我们试着在另外一块的串口上发送数据

同样的,再另一个串口上也接受到了我们发射的数据,是不是很简单呢?

我们同时可以发现,在发送和接收数据的时候,HoneyBee控制板上的RXRX和RXTX灯将会亮起,方便我们观察。

经过我们的实地测试,两块HoneyBee之间的通信在使用2dbm天线的空旷场地下情况下可达到200m,看到这里大家是否对HoneyBee产生兴趣了呢,下节课我们将介绍无线点亮LED,更多精彩内容敬请期待

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-5-31 21:35:00 | 显示全部楼层
空旷200m 是很不错.. 但室内呢?一般150-200平米 三房的室内空间呢?死角的情况高不高?
谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-31 21:41:54 | 显示全部楼层
学长 发表于 2013-5-31 21:35
空旷200m 是很不错.. 但室内呢?一般150-200平米 三房的室内空间呢?死角的情况高不高?
谢谢

在室内的话,大概可以覆盖100平方的样子,没有那么大的房子可供测试。。。
回复 支持 反对

使用道具 举报

发表于 2013-7-4 10:37:35 | 显示全部楼层
swim 发表于 2013-5-31 21:41
在室内的话,大概可以覆盖100平方的样子,没有那么大的房子可供测试。。。

工程师,还有什么例程,就赶紧放出来吧!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-4 16:41:45 | 显示全部楼层
nust_奔跑 发表于 2013-7-4 10:37
工程师,还有什么例程,就赶紧放出来吧!

最近会出无线RGB控制
回复 支持 反对

使用道具 举报

发表于 2013-8-6 18:55:19 | 显示全部楼层
这个板子哪里有卖的??????
回复 支持 反对

使用道具 举报

发表于 2015-1-27 14:51:00 | 显示全部楼层
zhangdeyue1 发表于 2013-8-6 18:55
这个板子哪里有卖的??????

本论坛淘宝店
回复 支持 反对

使用道具 举报

发表于 2016-5-9 18:06:48 | 显示全部楼层
好资料,研究下,
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2022-10-8 07:15 , Processed in 0.070126 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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