我尝试使用安装在Sparkfun USB浏览器上的XBee S2C(协调器)接收数据 . 为此,我使用Python-XBee-Library . 通过转义启用API . 数据由另一个安装在Arduino上的XBee S2C(路由器)发送 . 要在协调员处接收数据,我使用以下代码:
from xbee import XBee
import serial
PORT = 'COM4'
BAUD_RATE = 9600
# Open serial port
ser = serial.Serial(PORT, BAUD_RATE)
# Continuously read and print packets
while True:
try:
response = xbee.wait_read_frame()
print response
except KeyboardInterrupt:
break
ser.close()
如果我运行此代码,虽然我通过XCTU从路由器获取数据,但我永远不会收到响应 . 在一个实验中(Arduino代码中的更改)在Python处出现错误消息:
“无法识别的带有id字节{0}的响应数据包”.format(data [0]))KeyError:'无法识别的响应数据包,带有id字节\ x90'
因此,我已经使用协调器测试了一些其他代码:
import serial
import time
port = 'COM4'
baudrate = 9600
print 'open ' + port
xbee = serial.Serial(port, baudrate)
print 'open file'
d = open("read10.txt",'w')
print 'waiting incoming message...'
while True:
try:
out = ''
while xbee.inWaiting() > 0:
out += xbee.read(1)
if out != '':
print out
lt = time.localtime()
# print lt
messzeit = time.strftime("%d.%m.%Y %H:%M:%S", lt)
print messzeit
d.write(messzeit + ";" + out)
for i in range(0,21,1):
print out[i]
print hex(ord(out[i]))
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
xbee.close()
d.close()
raise
使用此代码,我得到一个适合XCTU和 hex(ord(out[i])
结果的ASCII序列,但我仍然想知道,为什么wait_read_frame不起作用,如何获得正确的HEX结果和ASCII序列的数据 .
ASCII序列: ~ � }3� AT��DANI�
在路由器上我先写了这个Arduino-Code:
void sendPacket(int temperature, int Filter) { // Prepare the Zigbee Transmit Request API packet ZBTxRequest txRequest; txRequest.setAddress64(0x0000000000000000);
// Grösse des Pakets hängt von den Datentypen ab
AllocBuffer<9> packet;
packet.append<uint8_t>(1);
packet.append<int>(temperature); //Achtung auf Variablenzuweisung
packet.append<int>(Filter);
txRequest.setPayload(packet.head, packet.len());
// send packet
xbee.send(txRequest);
}
使用此代码,我只能从设置(API / AT和ATAO)中看到ASCII序列(两个XBee都在API-Mode2中) ~ }1� }3� AT��� G
. 之后我编写了下一个代码,并将协调器设置为AT模式:
void sendPacket(int temperature, int Filter) { // Prepare the Zigbee Transmit Request API packet ZBTxRequest txRequest; txRequest.setAddress64(0x0000000000000000);
// Grösse des Pakets hängt von den Datentypen ab
uint8_t payload[] = {'D','A','N','I'};
txRequest.setPayload(payload, sizeof(payload));
// send packet
xbee.send(txRequest);
}
在这种情况下,我在执行Python-Code out += xbee.read(1)
时得到 DANI
.
因此,我很高兴知道,如何从我的XBee-Coordinator获取有用数据并将其保存到txt文件中 .
非常感谢丹尼尔