我尝试使用安装在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文件中 .

非常感谢丹尼尔