2013-4-11 00:59:34 [显示全部楼层]
9534浏览
查看: 9534|回复: 4

[已解决] xbee+xbee shield+arduino问题

[复制链接]
xbee+xbee shield+arduino问题图1
这是我们做的东西的方案 左边的 作为Router 放在移动终端
右边的作为Coordinator 通过适配器连接在PC上

确认设备连接和跳线设置没有问题
现在Router端的associ灯不停闪烁

然后我们写了一个测试程序,烧在Arduino上面
  1. #include <XBee.h>
  2. #define disSH 0x0013a200
  3. #define disSL 0x40a62ddc
  4. // create the XBee object
  5. XBee xbee = XBee();
  6. uint8_t payload[] = { 0, 0 };
  7. // SH + SL Address of receiving XBee
  8. XBeeAddress64 addr64 = XBeeAddress64(disSH,disSL);
  9. ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
  10. ZBTxStatusResponse txStatus = ZBTxStatusResponse();
  11. int pin5 = 0;
  12. int statusLed = 13;
  13. int errorLed = 13;
  14. void flashLed(int pin, int times, int wait) {
  15.   for (int i = 0; i < times; i++) {
  16.     digitalWrite(pin, HIGH);
  17.     delay(wait);
  18.     digitalWrite(pin, LOW);
  19.     if (i + 1 < times) {
  20.       delay(wait);
  21.     }
  22.   }
  23. }
  24. void setup() {
  25.   pinMode(statusLed, OUTPUT);
  26.   pinMode(errorLed, OUTPUT);
  27.   Serial.begin(9600);
  28.   xbee.setSerial(Serial);
  29. }
  30. void loop() {   
  31.   xbee.send(zbTx);
  32.   // flash TX indicator
  33.   flashLed(statusLed, 1, 100);
  34.   // after sending a tx request, we expect a status response
  35.   // wait up to half second for the status response
  36.   if (xbee.readPacket(500)) {
  37.     // got a response!
  38.     // should be a znet tx status            
  39.     if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
  40.       xbee.getResponse().getZBTxStatusResponse(txStatus);
  41.       // get the delivery status, the fifth byte
  42.       if (txStatus.getDeliveryStatus() == SUCCESS) {
  43.         // success.  time to celebrate
  44.         flashLed(statusLed, 5, 50);
  45.       } else {
  46.         // the remote XBee did not receive our packet. is it powered on?
  47.         flashLed(errorLed, 3, 500);
  48.       }
  49.     }
  50.   } else if (xbee.getResponse().isError()) {
  51.     //nss.print("Error reading packet.  Error code: ");  
  52.     //nss.println(xbee.getResponse().getErrorCode());
  53.   } else {
  54.     // local XBee did not provide a timely TX Status Response -- should not happen
  55.     flashLed(errorLed, 2, 50);
  56.   }
  57.   delay(1000);
  58. }
复制代码
结果L灯一直在闪烁 flashLed(errorLed, 2, 50); 表示工作不正常。以上为发送测试程序,就是简单的发送一个payload

于是我们又写了一个接收程序
  1. <blockquote>#include <XBee.h>
复制代码
就是简单地 接收到信息

然后我们通过Coordinator端发送广播包,无效,发送单播点对点包,也无效。L一直不亮

Java广播程序如下
  1. /**
  2. * Copyright (c) 2008 Andrew Rapp. All rights reserved.
  3. *  
  4. * This file is part of XBee-API.
  5. *  
  6. * XBee-API is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *  
  11. * XBee-API is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. * GNU General Public License for more details.
  15. *  
  16. * You should have received a copy of the GNU General Public License
  17. * along with XBee-API.  If not, see <<a href="http://www.gnu.org/licenses/>." target="_blank">http://www.gnu.org/licenses/>.</a>
  18. */
  19. package com.rapplogic.xbee.examples.zigbee;
  20. import org.apache.log4j.Logger;
  21. import org.apache.log4j.PropertyConfigurator;
  22. import com.rapplogic.xbee.api.XBee;
  23. import com.rapplogic.xbee.api.XBeeAddress64;
  24. import com.rapplogic.xbee.api.XBeeException;
  25. import com.rapplogic.xbee.api.zigbee.ZNetTxRequest;
  26. import com.rapplogic.xbee.util.ByteUtils;
  27. /**
  28. * @author andrew
  29. */
  30. public class BroadcastSenderExample {
  31.         private final static Logger log = Logger.getLogger(BroadcastSenderExample.class);
  32.         
  33.         private BroadcastSenderExample() throws XBeeException {
  34.                
  35.                 XBee xbee = new XBee();
  36.                
  37.                 try {
  38.                         // replace with your com port and baud rate. this is the com port of my coordinator               
  39.                         xbee.open("COM5", 9600);
  40.                         
  41.                         while (true) {
  42.                                 // put some arbitrary data in the payload
  43.                                 int[] payload = ByteUtils.stringToIntArray("the\nquick\nbrown\nfox");
  44.                                 
  45.                                 ZNetTxRequest request = new ZNetTxRequest(XBeeAddress64.BROADCAST, payload);
  46.                                 // make it a broadcast packet
  47.                                 request.setOption(ZNetTxRequest.Option.BROADCAST);
  48.                                 //log.info("request packet bytes (base 16) " + ByteUtils.toBase16(request.getXBeePacket().getPacket()));
  49.                                 
  50.                                 xbee.sendAsynchronous(request);
  51.                                 // we just assume it was sent.  that's just the way it is with broadcast.  
  52.                                 // no transmit status response is sent, so don't bother calling getResponse()
  53.                                        
  54.                                 try {
  55.                                         // wait a bit then send another packet
  56.                                         Thread.sleep(2000);
  57.                                 } catch (InterruptedException e) {
  58.                                 }
  59.                         }
  60.                 } finally {
  61.                         xbee.close();
  62.                 }
  63.         }
  64.         
  65.         public static void main(String[] args) throws XBeeException, InterruptedException  {
  66.                 PropertyConfigurator.configure("log4j.properties");
  67.                 new BroadcastSenderExample();
  68.         }
  69. }
复制代码
使用的是http://code.google.com/p/xbee-api/的最新版本api
两个xbee都在api mode (AP = 2模式下工作)
以下为两个XBee的配置
xbee+xbee shield+arduino问题图2

xbee+xbee shield+arduino问题图3




但是如果把两个xbee都放在适配器上 一个发送广播通信 一个接受广播通信 就没有问题 正常工作。
广播接收代码
  1. package com.rapplogic.xbee.examples.zigbee;
  2. import org.apache.log4j.Logger;
  3. import org.apache.log4j.PropertyConfigurator;
  4. import com.rapplogic.xbee.api.XBee;
  5. import com.rapplogic.xbee.api.XBeeException;
  6. import com.rapplogic.xbee.api.XBeeResponse;
  7. /**
  8. * @author andrew
  9. */
  10. public class BroadcastReceiverExample {
  11.         private final static Logger log = Logger.getLogger(BroadcastReceiverExample.class);
  12.         
  13.         private BroadcastReceiverExample() throws XBeeException {
  14.                
  15.                 XBee xbee = new XBee();
  16.                
  17.                 try {
  18.                         // replace with your com port and baud rate. this is the com port of my coordinator
  19.                         xbee.open("COM5", 9600);
  20.                         
  21.                         while (true) {                                
  22.                                 XBeeResponse response = xbee.getResponse();
  23.                                 log.info("received response " + response);
  24.                         }
  25.                 } finally {
  26.                         xbee.close();
  27.                 }
  28.         }
  29.         
  30.         public static void main(String[] args) throws XBeeException, InterruptedException  {
  31.                 PropertyConfigurator.configure("log4j.properties");
  32.                 new BroadcastReceiverExample();
  33.         }
  34. }
复制代码
这个是arduino api
http://code.google.com/p/xbee-ar ... l-beta.zip&can=2&q=

麻烦请老板验证下是什么问题 如果确实是api兼容性问题的话 我们就考虑换成不用api的方案 或者是我们这个实现方案有问题,请老板指出,十分感谢。





admin  管理员

发表于 2013-4-11 20:47:20

情况比较复杂,我们正在测试。 烦请稍等一下。
回复

使用道具 举报

milome  见习技师

发表于 2015-11-5 14:49:23

我用的是IO扩展板V7.1和两块xbee serials 2B的板子,遇到了相同的问题,coordinator端怎么也收不到数据,请问这个问题有什么更新吗?
回复

使用道具 举报

Cain  初级技匠

发表于 2015-11-5 16:28:49

milome 发表于 2015-11-5 14:49
我用的是IO扩展板V7.1和两块xbee serials 2B的板子,遇到了相同的问题,coordinator端怎么也收不到数据,请 ...

v7.1板子上的开关是否拨到了Run上?
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主

楼主的其它帖子

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail