class XBeeHandler(Thread): def __init__(self, inQ, outQ, XBeePort): super(XBeeHandler, self).__init__() self.daemon = True self.name = 'XBH' self.inQ = inQ self.outQ = outQ # Initialize XBee device: self.device = ZigBeeDevice(XBeePort, 9600) self.device.open() self.device.add_data_received_callback(self.receiveCB) def run(self): while (True): msg = self.outQ.get() # Blocking call self.device.send_data(msg.sender, msg.data) if DEBUG: print('XBH - Sent %s bytes to %s' % (len(msg.data), msg.sender.get_64bit_addr())) def receiveCB(self, xbee_message): sender = xbee_message.remote_device data = xbee_message.data msg = MSG(sender, data) self.inQ.put(msg) if DEBUG: print('XBH - Received %s bytes from %s' % (len(msg.data), sender.get_64bit_addr())) def terminate(self): self.device.close() if DEBUG: print('XBH - Closed connection with RF device.')
xbee_network.clear() xbee_network.add_device_discovered_callback(callback_device_discovered) xbee_network.add_discovery_process_finished_callback( callback_discovery_finished) xbee_network.start_discovery_process() print("Discovering remote XBee devices...") while xbee_network.is_discovery_running(): time.sleep(0.1) if remote_device is None: print("Could not find the remote device") exit(1) device.add_data_received_callback(my_data_received_callback) device.send_data_async(remote_device, "START_PID") data_set.write("===================================================\n") while t != 1: try: if k == 1: servo.ChangeDutyCycle(angle) time.sleep(0.2) servo.ChangeDutyCycle(0) k = 0 if Driving_Time == 1: target_Speed = 12
def main(argv): if len(argv) != 3: print("Usage: long_test.py <port> <baud_rate> <duration_in_seconds>") return print(" +-------------------------------+") print(" | Long duration and stress test |") print(" +-------------------------------+\n") port = argv[0] baud_rate = int(argv[1]) duration = int(argv[2]) device = ZigBeeDevice(port, baud_rate) try: device.open() # Discover the network. network = device.get_network() network.start_discovery_process() print("Discovering network...") # Wait until the discovery process has finished. while network.is_discovery_running(): time.sleep(0.1) if not network.has_devices(): print("No remote modules in the network") return # Get the first device of the network that is not an end device. remote = None for dev in network.get_devices(): if utils.bytes_to_int(dev.get_parameter("SM")) == 0: remote = dev break if remote is None: print("No routers in the network") return print("Selected remote device: %s" % remote) # Add a data received callback. def data_callback(message): if message.remote_device.get_64bit_addr() == remote.get_64bit_addr( ): print("%s - [C] - %s" % (datetime.datetime.now(), message.data.decode())) # Ensure that the sent and received messages are equal. assert (data == message.data.decode()) device.add_data_received_callback(data_callback) print("Sending data...\n") dead_line = time.time() + duration while dead_line > time.time(): retries = MAX_RETRIES data_received = False while not data_received: try: data = ''.join( random.choice(string.ascii_letters) for i in range(random.randint(1, 84))) print("%s - [S] - %s" % (datetime.datetime.now(), data)) # Send explicit data to the loopback cluster. device.send_expl_data(remote, data, SOURCE_ENDPOINT, DEST_ENDPOINT, CLUSTER_ID, PROFILE_ID) # Read new data from the remote device. msg = device.read_data_from(remote, 10) print("%s - [P] - %s" % (datetime.datetime.now(), msg.data.decode())) data_received = True # Ensure that the sent and received messages are equal. assert (data == msg.data.decode()) except TimeoutException as ex: retries -= 1 if retries == 0: raise ex # Wait some time between 1 and 5 seconds. time.sleep(random.randint(1, 5)) print("\nTest finished successfully") finally: if device is not None and device.is_open(): device.close()
from time import sleep # Instantiate device: XBee_zig = ZigBeeDevice('/dev/tty.SLAB_USBtoUART', 9600) # ('port', baud) XBee_zig.open() # Opens serial interface to device # Define callback. def xbRxCallback(xbee_message): address = xbee_message.remote_device.get_64bit_addr() data = xbee_message.data.decode("utf8") print("Received data from %s: %s" % (address, data)) # Add the callback. XBee_zig.add_data_received_callback(xbRxCallback) # Read device information (more getters are availiable): addr_64 = XBee_zig.get_64bit_addr() node_id = XBee_zig.get_node_id() pan_id = XBee_zig.get_pan_id() print('Opened device with addr') print(addr_64) print('and node ID') print(node_id) print('on PAN ID') print(pan_id) print('listening for messages...') #msg = XBee_zig.read_data(120);