Python XBee无法发送两个AT命令

时间:2014-01-03 10:29:41

标签: python raspberry-pi xbee

我一直试图让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()
    )
  )

1 个答案:

答案 0 :(得分:0)

我绝对建议在模块上从“AT模式”切换到“API模式”,因为它更灵活,你不必担心你是否处于命令模式。

在使用python-xbee中的API模式方法/函数之前,您需要为API模式(ATAP=1)配置XBee模块。

监视XBee和Raspberry Pi之间的串行连接可能会有所帮助,但这可能需要一些硬件黑客攻击(将Tx和Rx引脚连接到两个串行端口的Rx引脚,并让软件转储收到的字节两者,时间;或使用逻辑探测器。)