Xbee在乒乓球时收到乱码数据

时间:2018-03-13 11:52:37

标签: python xbee

我正在尝试从连接到我的计算机的协调器xbee发送和接收数据。路由器xbee连接到我的arduino,应该在收到后发回消息。

这是我在计算机上运行的python脚本的代码:

#!/usr/bin/python
#this code runs on the xbee coordinator that is set to API mode 2

import serial
from xbee import ZigBee
from xbee.helpers.dispatch import Dispatch
import time

PORT = '/dev/tty.usbserial-A900UF4T'
BAUD_RATE = 9600

UNKNOWN = '\xff\xfe' 
WHERE = '\x00\x13\xA2\x00\x40\x98\xDA\x08'
dataString='Hello\n'

# Open serial port
ser = serial.Serial(PORT, BAUD_RATE, interCharTimeout=0.5)


#sends data to xbee address
def sendData(address, datatosend):
    zb.send('tx', dest_addr_long = address, dest_addr = UNKNOWN, data = datatosend)

def recvData (data):
    print data



zb = ZigBee(ser, callback=recvData)


#test data sending method
ack = '0013A2004098DA02'
while True:
    try:
        sendData(WHERE, dataString)

    except KeyboardInterrupt:
        break

zb.halt()
ser.close()

这是我得到的回应:

{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}
{'retries': '\x00', 'frame_id': '\x01', 'deliver_status': '\x00', 'dest_addr': '\x03\xb1', 'discover_status': '\x00', 'id': 'tx_status'}

1 个答案:

答案 0 :(得分:0)

您的回调会收到一个字典,其中XBee帧已转换为字段。在您的情况下,您会看到成功传送到路由器设备的tx_status响应帧。您可能希望尝试使用XCTU(或终端程序)将路由器设备连接到PC,以确认它以预期的波特率输出数据。然后您可以确认您在路由器上输入的任何数据都会到达协调器。

一旦您调试了拼图的这一部分,您就可以专注于您的Arduino代码无法正常工作的原因。 Arduino是否看到协调员的数据?如果Arduino只是每隔几秒发送一条消息而不等待数据,那么协调员是否会收到它?也许你交换了tx / rx引脚,或者在XBee和Arduino上的波特率配置不匹配。或者您将路由器XBee配置为API模式,Arduino期望透明串行模式。