Es fällt mir am schwersten, meine XBEEs dazu zu bringen, mit meinem Raspberry Pi (RP) zu arbeiten. Ich habe einen auf einem USB-Breakout-Board in meinem Computer und den anderen XBEE, der mit einem RP verbunden ist. Der auf dem RP ist der API-Koordinator und der auf dem Computer ist der AT-Router. Wenn ich dieses Programm auf dem RP ausführe (was einen der IO-Pins auf dem Router XBEE ändern sollte)
#!/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")
Auf dem Router wird aber nichts gemacht. Ich glaube, dass die XBEEs verbunden sind, denn wenn ich den Router an den Computer anschließe, erhalte ich eine Nachricht an der seriellen Schnittstelle des RP, die ihn darüber informiert, dass etwas beigetreten ist. Mir gehen die Ideen aus und ich hatte gehofft, dass mir jemand helfen könnte.
Sie verwenden den API-Modus; ist das eine maskierte API (ATAP=2) oder eine nicht maskierte API? Der Frame, den Sie senden, muss maskiert/nicht maskiert werden, damit er mit der Einstellung übereinstimmt, die auf der Sender-XBee konfiguriert ist.
Versuchen Sie zuerst, eine Art Übertragung im AT-Modus zu erreichen; Wenn das funktioniert, aktualisieren Sie auf den API-Modus.
Ich kenne XBee nicht, aber es sieht so aus, als ob Ihr Längenbyte 0x10 (16) ist und Ihre Nachricht nur 15 Bytes lang ist.
Außerdem wiederholen Sie die Nachricht im Code zweimal, was nur eine schlechte Praxis ist.
Versuchen Sie Code wie diesen (ungetestet):
#!/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
darron
Connor Wolf
(0xFF - ( sum & 0xFF ))
?). Ich würde Ihr gesamtes Paket als String speichern und die Prüfsumme berechnen, indem ich über den String iteriere. Auf diese Weise haben Sie keine möglichen Transkriptionsfehler.