如何使用python digi-xbee库从本地xbee接收“FN”(查找邻居)AT命令的多个ATCommand响应数据包

时间:2018-06-07 07:05:30

标签: python xbee

这是适用于除“FN”之外的所有AT命令的代码:

from digi.xbee.devices import XBeeDevice

#Initialise a serial port for the local xbee 
local_xbee = XBeeDevice("/dev/tty.usbserial-AH02D9Q4", 9600). 

#Opens serial port for sending commands   
local_xbee.open()

#Sets new timeout for sync command operation 
local.set_sync_ops_timeout(10). 

#Send "FN" AT command to local xbee to receive neighbour list
neighbour_xbee_list = local.get_parameter("FN")

print(neighbour_xbee_list)

local_xbee.close()

注意:

上面的代码只返回一个邻居,而我在网络中有多个节点。

2 个答案:

答案 0 :(得分:0)

我认为问题的关键不在于如何使用FN命令,而是如何发现邻居。

为此,您可以使用此处描述的start_discovery_process函数。 http://xbplib.readthedocs.io/en/latest/user_doc/discovering_the_xbee_network.html#discovernetwork

答案 1 :(得分:0)

import serial
from digi.xbee.packets.common import ATCommPacket
from digi.xbee.devices import XBeeDevice
from digi.xbee.reader import PacketListener
from digi.xbee.serial import XBeeSerialPort
from digi.xbee.util import utils
import time


local_xbee = XBeeDevice("/dev/tty.usbserial-AH02D9Q4", 9600)
local_xbee.open()
print("This is : ", local_xbee.get_node_id())
print(local_xbee._packet_listener.is_running())
parameter = "FN"
frame_id = 33
my_packet = ATCommPacket(frame_id, parameter)
#print(my_packet)
#print(my_packet.frame_id)
#print(my_packet.command)
final_send = my_packet.output()
local_xbee._serial_port.write(final_send)
print("Finding Neighbours")
while True:
    print(".")
    Queue = local_xbee._packet_listener.get_queue()
    received_packet = Queue.get_by_id(frame_id)
    if received_packet != None:
        #if received_packet.status == ATCommandStatus.OK:
        final = received_packet._get_api_packet_spec_data().__str__()
        print(final)
    time.sleep(0.5)

local_xbee.close()