我一直试图让XBee S2通过Python使用Raspberry Pi。但是,尝试从AT命令获得多个响应是行不通的。
我有一个循环来发送ATID命令10次,并使用以下代码我试图得到一个响应:
def get_xbee_reply(self):
reply = b''
while True:
print ("hi")
char = self.serial.read()
if (char == b'\r'):
print("ended reply")
break
reply += char
print(reply)
return (reply.decode('utf-8'))
我得到的回复:
hi
hi
hi
ended reply
b'OK'
hi
hi
hi
hi
ended reply
b'555'
id = 555
hi
hi
hi
ended reply
b'OK'
hi
它从+++获取第二个OK消息后挂起(我在ATID之前发送以防止掉出AT模式。如果我点击 Ctrl + C 它打破并再次执行此操作,在挂起之前再次接收OK,555和OK。
XBee正在通过我的PC和Minicom与Raspberry Pi一起工作,所以这不是XBee问题。
为什么在第二次'OK'后停止?确定后是否停止或命令未通过?即使使用time.sleep
,它也无效。
编辑:添加了发送ATID命令的代码
def send_get_at(self, command):
self.serial.write(
(command + '\r').encode('utf-8')
)
print (str(command) + " = {}".format(
self.get_xbee_reply()
)
)
答案 0 :(得分:0)
我绝对建议在模块上从“AT模式”切换到“API模式”,因为它更灵活,你不必担心你是否处于命令模式。
在使用python-xbee中的API模式方法/函数之前,您需要为API模式(ATAP=1
)配置XBee模块。
监视XBee和Raspberry Pi之间的串行连接可能会有所帮助,但这可能需要一些硬件黑客攻击(将Tx和Rx引脚连接到两个串行端口的Rx引脚,并让软件转储收到的字节两者,时间;或使用逻辑探测器。)