serial raspberry puerto leer enviar datos con comunicacion python api raspberry-pi xbee

raspberry - No se puede enviar/recibir usando Xbee''s en modo API(python)



puerto serial python windows (2)

¿Estás seguro de que los módulos XBee están en modo API escapado ( ATAP=2 )? Y 9600 baudios?

¿Puedes habilitar un modo en python-xbee para volcar todos los caracteres?

¿Has confirmado que el cableado de serie es correcto? (Veo que estás usando USB, así que eso no es un problema).

Si no tiene el control de flujo de hardware conectado, asegúrese de que los módulos XBee tengan ATD6=0 y ATD7=0 establecidos (deshabilite RTS y CTS) y que python-xbee no esté esperando el intercambio de mensajes.

Si tiene configurado el control de flujo de hardware en el XBee, asegúrese de haber dicho a python-xbee que lo use.

¿Puedes usar minicom u otro terminal serie en el RaspPi para confirmar que la serie está funcionando? Use minicom en el extremo receptor para ver si está recibiendo algo en absoluto.

¿Puedes intentar enviar y recibir con las radios conectadas a una PC en lugar de la Pi? ¿Enviando desde la PC al Pi, o viceversa?

Tengo dos Xbee Pro 900, cada uno conectado a una Raspberry Pi. Ambos se actualizan a la versión 1061 y están configurados para Habilitar API con escapes. También tienen el mismo Módem VID de 7FFF. Ambos Pi tienen instaladas PySerial y la biblioteca python-xbee.

Xbee 1 (Receptor) tiene un número de serie de 0013A200409A1BB8
Xbee 2 (emisor) tiene un número de serie de 0013A200709A1BE9

He incluido mi código a continuación, que es solo código de muestra que he encontrado en línea. Mi problema es que no recibo nada en el Xbee apropiado. No tengo ni idea de qué está mal, he comprobado tres veces la dirección de destino y las dos configuraciones de Xbee.

Código de Xbee 2 (remitente):

#! /usr/bin/python import time from xbee import XBee import serial PORT = ''/dev/ttyUSB0'' BAUD_RATE = 9600 # Open serial port ser = serial.Serial(PORT, BAUD_RATE) # Create API object xbee = XBee(ser,escaped=True) import pprint pprint.pprint(xbee.api_commands) DEST_ADDR_LONG = "/x00/x13/xA2/x00/x40/x9A/x1B/xB8" # Continuously read and print packets while True: try: print "send data" xbee.tx_long_addr(frame=''0x1'', dest_addr=DEST_ADDR_LONG, data=''AB'') time.sleep(1) except KeyboardInterrupt: break ser.close()

Código Xbee 1 (Receptor):

#! /usr/bin/python from xbee import XBee import serial PORT = ''/dev/ttyUSB0'' BAUD_RATE = 9600 # Open serial port ser = serial.Serial(PORT, BAUD_RATE) # Create API object xbee = XBee(ser,escaped=True) # Continuously read and print packets while True: try: print "waiting" response = xbee.wait_read_frame() print response except KeyboardInterrupt: break ser.close()

Cuando ambos programas se están ejecutando, la luz Tx en el Xbee emisor parpadea, pero no recibo nada en el Xbee receptor. ¿Se me escapa algo? ¡Gracias por tu tiempo!


¿Estás usando XBee o XBeePro? Tuve el mismo problema y esta publicación me ayudó mucho.

Intente modificar el código del receptor de la siguiente manera:

import config import serial import time from xbee import ZigBee def toHex(s): lst = [] for ch in s: hv = hex(ord(ch)).replace(''0x'', '''') if len(hv) == 1: hv = ''0''+hv hv = ''0x'' + hv lst.append(hv) def decodeReceivedFrame(data): source_addr_long = toHex(data[''source_addr_long'']) source_addr = toHex(data[''source_addr'']) id = data[''id''] samples = data[''samples''] options = toHex(data[''options'']) return [source_addr_long, source_addr, id, samples] PORT = ''/dev/ttyUSB0'' BAUD_RATE = 9600 # Open serial port ser = serial.Serial(PORT, BAUD_RATE) zb = ZigBee(ser, escaped = True) while True: try: data = zb.wait_read_frame() decodedData = decodeReceivedFrame(data) print decodedData except KeyboardInterrupt: break

En mi caso, el código anterior da como resultado lo siguiente:

[[''0x00'', ''0x13'', ''0xa2'', ''0x00'', ''0x40'', ''0x9b'', ''0xaf'', ''0x4e''], [''0x68'', ''0x3f''], ''rx_io_data_long_addr'', [{''adc-0'': 524}]]

Aquí compartí los ajustes de configuración para Controller Node (compatible con X-CTU)