我尝试使用安装在Sparkfun USB浏览器上的XBee S2C(协调器)接收数据。为此,我使用Python-XBee-Library。通过转义启用API。数据由另一个安装在Arduino上的XBee S2C(路由器)发送。要在协调员处接收数据,我使用代码:
server <- function(input, output,session) {
callModule(refinedSearch, "tmp")
observeEvent(input$addFilter, {
id <- paste0("filter_", input$add)
insertUI(selector = "#addFilter",where = "beforeBegin",
ui = refinedSearchUI(id))
callModule(refinedSearch, id)
})
}
如果我运行此代码,虽然我通过XCTU从路由器获取数据,但我永远不会收到响应。在一个实验中(Arduino代码中的更改)在Python上发生了一条错误消息:
&#34;无法识别的响应数据包,其id字节为{0}&#34; .format(data [0])) KeyError:&#39;无法识别的响应数据包,其中包含id字节\ x90&#39;
因此,我已经使用协调员测试了一些其他代码:
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和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
结果的ASCII序列,但我仍然想知道,为什么wait_read_frame不起作用,我怎样才能获得正确的HEX结果和数据ASCII序列。
ASCII序列:hex(ord(out[i])
在路由器上我先写了这个Arduino-Code:
~ � }3� AT��DANI�
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模式2中)}
。
之后我编写了下一个代码,并将协调器设置为AT模式:
~ }1� }3� AT��� G
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代码}
时得到DANI
。
因此我很高兴知道,如何从我的XBee-Coordinator获取有用数据并将其保存到txt文件中。
非常感谢并且非常感谢 丹尼尔