No se puede hacer que Raspberry Pi y Xbee trabajen juntos

3

Estoy teniendo dificultades para que mis XBEE funcionen con mi Raspberry pi (RP). Tengo uno en una placa de ruptura de USB en mi computadora y el otro XBEE conectado a un RP. El que está en el RP es el coordinador de la API y el que está en la computadora es el enrutador AT. Cuando ejecuto este programa en el RP (que debería cambiar uno de los pines IO en el enrutador XBEE)

    #!/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 enrutador. Creo que los XBEE están conectados porque cuando conecto el enrutador a la computadora, recibo un mensaje en el puerto serie y el RP notifica que algo se ha unido. Me he quedado sin ideas y esperaba que alguien pudiera ayudarme.

    
pregunta Ryan F

2 respuestas

1

Estás usando el modo API; ¿Es esa API escapada (ATAP = 2) o API no escapada? El marco que está enviando tiene que ser escapado / no escapado para que coincida con la configuración configurada en el remitente XBee.

Primero intenta lograr algún tipo de transmisión en modo AT; cuando eso funcione, entonces actualice al modo API.

    
respondido por el Erion
0

No sé XBee, pero parece que su byte de longitud es 0x10 (16) y su mensaje solo tiene 15 bytes de longitud.

También repite el mensaje en el código dos veces, lo cual es una mala práctica.

Probar 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")
    
respondido por el markrages

Lea otras preguntas en las etiquetas