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

时间:2017-04-29 07:42:45

标签: python-2.7 xbee

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

非常感谢并且非常感谢 丹尼尔

0 个答案:

没有答案