示例#1
0
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.')
示例#2
0
    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
示例#3
0
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()
示例#4
0
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);