Go Down

Topic: Problemas con comunicación entre Arduino con XBee Serie 2 modo API (Read 354 times) previous topic - next topic

juanfbermejo

Hola a todos,

estoy desarrollando un proyecto de sensorización, en el cual pretendo montar una red de nodos que se comunican con un nodo coordinador mediante XBee. El nodo coordinador reunirá los datos de los diferentes nodos de sensores y los enviará a un servidor.

El problema es que estoy atascado en las comunicaciones con los XBee. Estoy utilizando tres XBee S2C, configurados cada uno como Coordinador, Router y End Device. He fijado el mismo Pan ID para los tres, además de configurarlos para que utilicen el modo API 2, todo ello usando XCTU.

Para el código, utilizo la librería xbee-arduino. He repasado la documentación, pero al cargar los ejemplos de la propia librería para los módulos XBee de la serie 2, no consigo enviar y recibir la información. El nodo Router o End Device, con el sketch de Tx cargado, me hace parpadear el led 2 veces, que como indica la parte final del código, significa que el XBee local no responde.

Para conectar el XBee al Arduino he utilizado un Arduino Wireless SD Shield y también he probado a conectarlo directamente sin ningún shield, y obtengo el mismo resultado.

También he conectado el XBee configurado como coordinador al XCTU y he explorado la red, y en principio parece que los XBee si se conectan y conforman la red.

El código es el siguiente:

Code: [Select]
/**
 * Copyright (c) 2009 Andrew Rapp. All rights reserved.
 *
 * This file is part of XBee-Arduino.
 *
 * XBee-Arduino is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * XBee-Arduino is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with XBee-Arduino.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <XBee.h>

/*
This example is for Series 2 XBee
 Sends a ZB TX request with the value of analogRead(pin5) and checks the status response for success
*/

// create the XBee object
XBee xbee = XBee();

uint8_t payload[] = { 0, 0 };

// SH + SL Address of receiving XBee
XBeeAddress64 addr64 = XBeeAddress64(0x0013a200, 0x4176eca5);
ZBTxRequest zbTx = ZBTxRequest(addr64, payload, sizeof(payload));
ZBTxStatusResponse txStatus = ZBTxStatusResponse();

int pin5 = 0;

int statusLed = 13;
int errorLed = 13;

void flashLed(int pin, int times, int wait) {

  for (int i = 0; i < times; i++) {
    digitalWrite(pin, HIGH);
    delay(wait);
    digitalWrite(pin, LOW);

    if (i + 1 < times) {
      delay(wait);
    }
  }
}

void setup() {
  pinMode(statusLed, OUTPUT);
  pinMode(errorLed, OUTPUT);

  Serial.begin(9600);
  xbee.setSerial(Serial);

  flashLed(statusLed, 5, 50);
}

void loop() {

  // break down 10-bit reading into two bytes and place in payload
  pin5 = 25;
  payload[0] = pin5 >> 8 & 0xff;
  payload[1] = pin5 & 0xff;

  xbee.send(zbTx);

  // flash TX indicator
  flashLed(statusLed, 1, 100);

  // after sending a tx request, we expect a status response
  // wait up to half second for the status response
  if (xbee.readPacket(500)) {
    // got a response!

    // should be a znet tx status           
    if (xbee.getResponse().getApiId() == ZB_TX_STATUS_RESPONSE) {
      xbee.getResponse().getZBTxStatusResponse(txStatus);

      // get the delivery status, the fifth byte
      if (txStatus.getDeliveryStatus() == SUCCESS) {
        // success.  time to celebrate
        flashLed(statusLed, 5, 50);
      } else {
        // the remote XBee did not receive our packet. is it powered on?
        flashLed(errorLed, 3, 500);
      }
    }
  } else if (xbee.getResponse().isError()) {
    //nss.print("Error reading packet.  Error code: "); 
    //nss.println(xbee.getResponse().getErrorCode());
  } else {
    // local XBee did not provide a timely TX Status Response -- should not happen
    flashLed(errorLed, 2, 50);
  }

  delay(1000);
}



A ver si a alguien se le ocurre alguna idea de qué me está pasando, porque ya le he dado bastante vueltas y no consigo solucionarlo.

Muchas gracias!

Aaron_Cara

I have the same problem.
I used the xbee shield to connect the Arduino MEGA and the Xbee S2C ZB. When using it in transparent mode I have no problems, but when using it in API mode then in software XCTU detects the communication port of the Arduino but not the Xbee S2C ZB.

please some idea I'm sorry to solve it.
My main idea is to be able to send data from analog readings.

Go Up