我正在尝试从连接到我的计算机的协调器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'}发布于 2018-03-14 22:48:39
您的回调接收到一个字典,其中的XBee框架已转换为字段。在您的示例中,您将看到成功传送到路由器设备的tx_status响应帧。您可能希望尝试使用XCTU (或终端程序)将路由器设备连接到您的PC,以确认它正在以预期的波特率输出数据。然后,您可以确认您在路由器上输入的任何数据都会到达协调器。
调试完这部分后,您就可以关注Arduino代码无法工作的原因了。Arduino看到来自协调器的数据了吗?如果Arduino只是每隔几秒钟发送一条消息,而不等待数据,那么协调器会接收到它吗?也许你已经交换了你的tx/rx引脚,或者你在XBee和Arduino上的波特率配置不匹配。或者您将路由器XBee配置为API模式,而Arduino期望使用透明串行模式。
https://stackoverflow.com/questions/49255487
复制相似问题