Me está costando mucho intentar que mis XBEE funcionen con mi Raspberry pi (RP). Tengo uno en una placa de conexión USB en mi computadora y el otro XBEE conectado a un RP. El que está en el RP es el coordinador de 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, aparece un mensaje en el puerto serie del RP notificándole que algo se ha unido. No tengo ideas, y esperaba que alguien pudiera ayudarme.
Está utilizando el modo API; ¿Es esa API escapada (ATAP = 2) o API no escapada? El marco que está enviando debe tener escape/no escape para que coincida con la configuración configurada en el remitente XBee.
Primero intente lograr algún tipo de transmisión en modo AT; cuando eso funcione, actualice al modo API.
No conozco XBee, pero parece que su byte de longitud es 0x10 (16) y su mensaje tiene solo 15 bytes de longitud.
También repite el mensaje en código dos veces, lo cual es una mala práctica.
Pruebe 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")
Reid
ryan f
darrón
connor lobo
(0xFF - ( sum & 0xFF ))
?). Almacenaría todo su paquete como una cadena y calcularía la suma de verificación iterando sobre la cadena. De esa forma, no tendrás posibles errores de transcripción.