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)