Banner publicitario de PCBWay

Problemas de comunicación con XBee

Hola que tal!
Reciban un cordial saludo:apreton:

Estoy trabajando con unos modulos xbee y el arduino, los modelos de los xbee son Xbee pro S1
los dos son el mismo modelo, nadamas que uno trae antena en el modulo, y el otro trae la antena pero con rosca.

Para configurarlos estoy utilizando el programa X-CTU y me base en el siguiente video de youtube.


Los he configurado de la misma manera, nadamas que con un PAN ID diferente, el cual no creo que importe.

El arduino si envia datos al xbee de la computadora, osea puedo ver el valor del puerto analogico, o como en el video, el contador.

El problema es que cuando quiero encender un led, supongamos que el del ejemplo del video, no enciende. Y no he podido encontrar el problema, los dos xbee estan a la misma velocidad configurados y no e podido enviar datos de COMPUTADORA===== XBEE-ARDUINO.

ese es el problema. Estoy usando el xbee shield wireless para el arduino.

Espero y me puedan ayudar, SALUDOS!
 
Última edición:
"ID (Pan ID) Command
<Networking {Addressing}> The ID command is
used to set and read the PAN (Personal Area Net-
work) ID of the RF module. Only RF modules with
matching PAN IDs can communicate with each
other. RF modems with non-matching PAN IDs
will not receive unintended data transmission"

Con PAN ID diferentes no se podrán comunicar. Saludos
 
Última edición:
Hola que tal gracias por la respuesta.

En lo del PAN ID me refiero que es diferente a el del video, los dos xbee los tengo configurados con el mismo PAN ID (diferente numero a el del video), pero no puedo encender el led como se puestra en el video. No se si el arduino pierde el dato.

El arduino si me envia datos a la teminal(computadora), pero cuando envio de la computadora a el arduino a travez de los xbee el arduino no hace nada. Estoy usando el mismo codigo de el video de mi primer mensaje, como ejemplo.

Espero y me puedas ayudar.

Saludos!
 
Te invito a que hagas una prueba sencilla en la pestaña "Modem Configuration":
-Desde X-CTU despues de que le des 'Read', haces 'click' en 'Show defaults' los programas ambos, con la diferencia que uno de ellos busca "API enable" y le pones Without Scapes.
-Ya que los programes con DEFAULTS(uno de ellos tendra programado API without scapes) coloca los XBEE donde deben ir
-Desde X-CTU, en la casilla "Remote Configuration" te aparecera otra ventana en la cual le das click en "Open COM port" y luego en "Discover", despues de eso te aparecera el otro XBEE lo seleccionas y le das click en "Read",
-Ubica en que pin del XBEE está el LED y desde X-CTU cambia su estado.

Espero y te sea de ayuda, saludos
 
creo que quieres el cable virtual... ya lo voy a probar ahorita también. tiene que configura un xbee con una entrada digital y al otro con una salida digital en el ejemplo sale el pin 20 del xbee.
 
Buenas, primero que nada nose si este es el lugar para publicar esto, pero lo hare para salir de las dudas.

Soy nuevo en este foro y agradeceria mucho de su ayuda.
El circuito que trato de diseñar es controlar servomotores sg90 mediante comunicacion Inalambrica con 2 modulos Xbee y 2 pic16f877a.
La secuencia de comunicacion es la siguiente e identificare los pics como PIC1 y PIC2.

El PIC2 envia un dato por el puerto serial a el PIC1 (TX2 a RX1), este toma ese dato y envia una respuesta de control para el servomotor (TX1 a RX2), luego el PIC2 vuelve a enviar otro dato hacia el PIC1 y este envia otra respuesta de control para otro servomotor y así sucesivamente...


Problemas:

1.- Al conectar los dos pic de manera directa sin los modulos xbee de la siguiente manera:
TX pic 1 - RX pic2, TX pic 2 - RX pic1.
La comunicacion no comienza al momento de energizarlos, tengo que quitar la fuente y volver a energizar el circuito y comienza a funcionar de manera perfecta el control de los servomotores.

2.- Al conectar los dos pic con los modulos xbee:

TX pic1 -> divisor de tension a 3,3 para RX Xbee1, TX Xbee 1 conectado directo a RX pic2
TX pic2 -> divisor de tension a 3,3 para RX Xbee2, TX Xbee 2 conectado directo a RX pic1

Los servomotores se segmentan... no funcionan de forma continua, tienden a segmentarse como dije. A que se debe este problema no tengo la menor idea, intente con comunicacion entre 4800 y 57600 baud para la transmision, logicamente los pic y los xbee trabajando a la misma velocidad de transmision.

Si alguien sabe a que se debe este problema estare muy agradecido.

De antemano muchas gracias!
:apreton:

PD: En la simulacion en proteus funciona bien con los 2 pic conectado entre si.. en fisico falla :/
 
Hola.
Yo me compré dos placas de interfaz (que usan chips FTDI)
para conectar módulos Xbee a la PC por el puerto USB.
El problema que yo tuve fue con los drivers para el puerto USB. Los bajé del sitio de FTDI,
me anduvieron bien un tiempo y luego se desinstalaron "solos".
Finalmente el vendedor me mandó otros drivers, pude instalar bien los puertos USB y todo
funciona de maravillas, pero al principio me hizo transpirar, en especial porque los dos
modulitos fueron bastante "salados". Entre los dos Xbee de potencia (S2B) y los dos
adaptadores, todo me costó unos 2.200.- A$R (aprox. 150 dólares).

Acá está el origen del problema, contado por mi proveedor en Argentina.
"
Hola. Lo que paso fue lo siguiente:
La gente que hace las placas en china compro los chips FTDI como originales, pero eran truchos.
Esto paso en las placas que tenes vos, en los arduinos nanos y otras placas que usan el chip FTDI.
La empresa FTDI que fabica los originales detecto esto y saco un driver que cuando enchufabas un
dispositivo con estos chips truchos te borraba la direccion usb (tecnicamente no es ese el nombre).
Estos drivers se bajaban automaticamente con las actualizaciones de windows, lo que hacia que la
pc no reconociera mas placas como la que tenes vos. Los drivers que te pase yo, admiten todas las
direcciones usb y ademas la 0.0. que vendria a ser la "direccion borrada". Esto ya fue testeado en
varias pc's, varios SO y varias placas distintas y anduvo todo.
De todas maneras lo que hizo la empresa FTDI con los drivers no seria legal siguiendo el ejemplo
de lo que paso con Sony y la play3, que al estar todo el tiempo conectada a internet una de las
actualizaciones detectaba si estaba chipeada para leer dvd's truchos y en ese caso la play dejaba
de andar. Un usuario denuncio esto ya que la play es %100 propiedad del que la compro, si quiera
que haga cafe o lanze misiles Sony no se lo puede impedir de ninguna manera. Un argumento
parecido se uso en el juicio y lo gano el usuario. Despues si queres podes investigar el tema para
tener informacion mas especifica y tecnica.

"
 
Yo también tengo 2 Xbee junto con su placa para arduino, la comunicación funciona bien hasta que pasa más de 10 aprox minutos y se pone lento la comunicación y siempre pasa lo mismo, según leí en otros sitios que el xbee se pone a dormir después de varios minutos. No se cual sea el problema pero si alguien me puede ayudar dar una solución.
 
Buen dia amigo

Checa si la placa arduino pone en SLEEP al XBEE, en lo que los he usado nunca me ha pasado eso, la cuestion de la comunicacion lenta, puede ser cuestion de software de la aplicaciòn

Saludos
 
Hola, les explico el problema. Estoy trabajando en una red de información utilizando varios DIGI Xbee3 ZigBee 3.0 con una red DIGI Mesh, por medio del entorno de XCTU y apoyándome de Arduino para hacer las lecturas digitales de los PLC y enviarlas por medio del puerto serial al Xbee, de esta manera puedo mover los datos de forma inalámbrica.

El problema reside principalmente en el punto donde se realiza el movimiento de datos de un Xbee a otro. Aunque se conectan sin problemas, no envían los paquetes de datos al Xbee que estoy usando como Host. Ya realicé varias pruebas y no he podido solucionarlo por mi cuenta. Al investigar, difícilmente encuentro información sobre la programación de los Xbee con DIGIMesh, ya que la mayoría de publicaciones, videos, páginas y archivos solo hablan de la configuración y uso del sistema ZigBee, y de una manera muy básica.

Para darles un panorama más completo, procederé a cargar el código del programa de Arduino que estoy usando para enviar los datos:

[I]#include <SoftwareSerial.h> const int pinRx = 0; const int pinTx = 1; SoftwareSerial xbee(pinRx, pinTx); byte Semi = 0; byte Falla = 0; byte Manual = 0; byte Auto = 0; byte cnt_Semi = 0; byte cnt_Falla = 0; byte cnt_Manual = 0; byte cnt_Auto = 0; byte cnt_Ajuste = 0; byte cnt_Falla_Auto = 0; // Variable para el control del tiempo unsigned long previousMillis = 0; const long interval = 5000; // Intervalo de 5 segundos void setup() { xbee.begin(9600); pinMode(2, INPUT_PULLUP); // Auto pinMode(3, INPUT_PULLUP); // Semi pinMode(4, INPUT_PULLUP); // Falla pinMode(5, INPUT_PULLUP); // Manual // Enviar mensaje de inicio en formato DigiMesh sendDigiMeshMessage("Inyectora lista JA2"); } void loop() { unsigned long currentMillis = millis(); // Obtiene el tiempo actual Auto = digitalRead(2); // Salida PLC 7.11 Semi = digitalRead(3); // Salida PLC 7.12 Falla = digitalRead(4); // Salida PLC 7.13 Manual = digitalRead(5); // Salida PLC 7.14 // Verifica si ha pasado el intervalo de tiempo if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // Guarda el tiempo actual //------------------------------------------------------------------------------- // Asignacion del string de cada entrada en caso de estar activada o desactivada if (Auto == HIGH && Semi == HIGH && Falla == HIGH && Manual == HIGH) { // Maquina apagada sendDigiMeshMessage("JA2_Apagada"); } else if (Falla == HIGH && Auto == LOW && Semi == HIGH && Manual == HIGH) { // Maquina en Automatico sendDigiMeshMessage("JA2_Auto"); } else if (Falla == LOW && Auto == LOW && Semi == HIGH && Manual == HIGH) { // Falla en Automatico sendDigiMeshMessage("JA2_Falla"); } else if (Falla == LOW && Semi == LOW && Auto == HIGH && Manual == HIGH) { // Falla en Semiautomatico sendDigiMeshMessage("JA2_Falla"); } else if (Falla == HIGH && Semi == LOW && Auto == HIGH && Manual == HIGH) { // Semiautomatico sendDigiMeshMessage("JA2_Semi"); } else if (Falla == LOW && Manual == LOW && Auto == HIGH && Semi == HIGH) { // Falla en manual sendDigiMeshMessage("JA2_Ajuste"); } else if (Falla == HIGH && Manual == LOW && Auto == HIGH && Semi == HIGH) { // Manual sendDigiMeshMessage("JA2_Manual"); } xbee.println(); } } // Función auxiliar para enviar mensajes XBee en formato DigiMesh void sendDigiMeshMessage(const char* message) { // Calcular longitud del frame (payload + 14 bytes de cabecera) byte payloadLength = strlen(message); byte frameLength = payloadLength + 14; // Cabecera del paquete DigiMesh xbee.write(0x7E); // Delimitador de inicio xbee.write((uint8_t)0x00); // Longitud alta xbee.write((uint8_t)lowByte(frameLength)); // Longitud baja // Inicializar checksum byte checksum = 0; // Tipo de trama: 0x10 (TX Request) xbee.write(0x10); checksum += 0x10; // Frame ID (0x01 para solicitar ACK) xbee.write((uint8_t)0x01); checksum += 0x01; // Dirección de destino (64-bit broadcast: 0x000000000000FFFF) for(int i = 0; i < 8; i++) { xbee.write((uint8_t)0x00); checksum += 0x00; } xbee.write(0xFF); checksum += 0xFF; xbee.write(0xFF); checksum += 0xFF; // Opciones (0x00 para ninguna opción especial) xbee.write((uint8_t)0x00); checksum += 0x00; xbee.write((uint8_t)0x00); checksum += 0x00; // Escribe el mensaje carácter por carácter y calcula checksum const char* ptr = message; while (*ptr) { xbee.write(*ptr); checksum += *ptr; ptr++; } // Calcular checksum final (0xFF - (checksum & 0xFF)) checksum = 0xFF - checksum; // Enviar checksum xbee.write(checksum); }[/I]

La lectura de los datos la estoy haciendo por medio del programa XCTU, para poder verlos sin necesidad de un intermediario y saber bien qué me está llegando, así como para verificar el estado de la red que conecta ambos Xbee. Por ahora, no hay un programa para la lectura de los paquetes de datos de los Xbee.

También aclaro que el formato de los paquetes de datos lo hice basándome en el Frames Generator que facilita el programa, siendo este de donde saqué la cantidad de bits a mandar y el orden.

Espero que estos datos sean suficientes. Me mantendré al pendiente de la publicación por cualquier cosa. ¡Gracias por su ayuda!
 
Atrás
Arriba