Python 2.7 XBee S2C:接收数据并用Python保存到txt文件
我尝试使用XBee S2C(协调器)接收数据,它安装在Sparkfun USB浏览器上。为此,我使用pythonxbee库。API已启用转义。数据由另一个安装在Arduino上的XBee S2C(路由器)发送。要在协调器处接收数据,我使用以下代码: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)
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文件中
非常问候和感谢你
DanielTilde(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);