Python 2.7 XBee S2C:接收数据并用Python保存到txt文件

Python 2.7 XBee S2C:接收数据并用Python保存到txt文件,python-2.7,xbee,Python 2.7,Xbee,我尝试使用XBee S2C(协调器)接收数据,它安装在Sparkfun USB浏览器上。为此,我使用pythonxbee库。API已启用转义。数据由另一个安装在Arduino上的XBee S2C(路由器)发送。要在协调器处接收数据,我使用以下代码: from xbee import XBee import serial PORT = 'COM4' BAUD_RATE = 9600 # Open serial port ser = serial.Serial(PORT, BAUD_RATE)

我尝试使用XBee S2C(协调器)接收数据,它安装在Sparkfun USB浏览器上。为此,我使用pythonxbee库。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}的无法识别的响应数据包”。格式(数据[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和十六进制(ord(out[I])结果的ASCII序列,但我仍然想知道,为什么等待读取帧不工作,以及如何获得正确的十六进制结果和ASCII序列数据

ASCII序列:
~� }3.� 在��丹尼�

在路由器上,我首先编写了以下Arduino代码:

void sendPacket(内部温度,内部过滤器){
//准备Zigbee传输请求API数据包
ZBTREQUEST txRequest;
txRequest.setAddress64(0x0000000000000000);

}

在本例中,当执行Python代码时,我得到
DANI
,out+=xbee.read(1)

因此,我很高兴知道,如何从XBee协调器获取有用的数据并将其保存到txt文件中

非常问候和感谢你
Daniel

Tilde(0x7E)是在API模式下从XBee发送的帧起始字符。可能XBee模块无法识别接收帧的帧类型(在您的第一个代码块中),因此会忽略它们?您能在“XBee”中启用任何调试吗模块是否让它转储它解析的每一帧?@tomlogic感谢您的评论。我已经做了一些进一步的测试(见上文)检查
ATAO
以及编写Python库的目的或期望值。我认为在0和1之间更改
ATAO
可能会解决此问题。@tomlogic:感谢您的反馈。我已尝试将[ATAO]从[Native]更改为[explicit],但仍有ASCII行。我已在上面添加了一些其他信息
// 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); 
// 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);