3 votos

No puedo conseguir que Raspberry Pi y Xbee funcionen juntos

Estoy teniendo el tiempo más difícil tratando de conseguir mi XBEE para trabajar con mi Raspberry pi (RP). Tengo uno en una placa breakout USB en mi ordenador y el otro XBEE conectado a una RP. El que está en la RP es el coordinador de la API y el que está en el ordenador es el router AT. Cuando ejecuto este programa en la RP (que debería cambiar uno de los pines IO del XBEE del router)

    #!/usr/bin/python
import serial
print("TEST")
ser=serial.Serial('/dev/ttyAMA0', baudrate=9600)
print(ser)
ser.write('\x7E')
ser.write('\x00')
ser.write('\x10')
ser.write('\x17')
ser.write('\x00')
ser.write('\x00')
ser.write('\x00')
ser.write('\x00')
ser.write('\x00')
ser.write('\x00')
ser.write('\xFF')
ser.write('\xFF')
ser.write('\xFF')
ser.write('\xFE')
ser.write('\x02')
ser.write('\x44')
ser.write('\x01')
ser.write('\x05')
sum=(0x17+0xFF+0xFF+0xFF+0xFE+0x02+0x44+0x01+0x05)
check=(0xFF - ( sum & 0xFF ))
ser.write(chr(check))
ser.close()
print("DONE")

Sin embargo, no se hace nada en el router. Creo que los XBEE están conectados porque cuando conecto el router al ordenador, me aparece un mensaje en el puerto serie el RP notificando que algo se ha unido. Me he quedado sin ideas y esperaba que alguien me pudiera ayudar.

1voto

Arvin Puntos 837

Está utilizando el modo API; ¿es API con escape (ATAP=2) o API sin escape? La trama que estás enviando tiene que ser escapada/no-escapada para que coincida con la configuración del XBee emisor.

Intenta conseguir algún tipo de transmisión en modo AT primero; cuando eso funcione, entonces pasa al modo API.

0voto

AnonJr Puntos 111

No conozco XBee, pero parece que tu byte de longitud es 0x10 (16) y tu mensaje sólo tiene 15 bytes.

Además, repites el mensaje en código dos veces, lo cual es una mala práctica.

Prueba un código como este (no probado):

#!/usr/bin/python
import serial
print("TEST")
ser=serial.Serial('/dev/ttyAMA0', baudrate=9600)
print(ser)

msg=[0x17,
     0x00,
     0x00,
     0x00,
     0x00,
     0x00,
     0x00,
     0xFF,
     0xFF,
     0xFF,
     0xFE,
     0x02,
     0x44,
     0x01,
     0x05]

ser.write(chr(0x7e)+
          chr(len(msg)//256)+
          chr(len(msg)%256))
ser.write(''.join(chr(x) for x in msg))
check=(0xFF - ( sum(msg) & 0xFF ))
ser.write(chr(check))
ser.close()
print("DONE")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X