xbee-python
xbee-python copied to clipboard
Packet backlog when receiving on Windows
Hello. I ran into a weird issue when receiving ZigBee packets on Windows. I'm currently sending packets from a drone every 0.8s, but on Windows, the callback method is only executed about every ~5s. I'm not loosing packets, as the received packet ID's increment correctly. The strange thing is, when using an Ubuntu VM on the same computer it works perfectly, and I receive at about ~0.8s. And if I stop sending from the drone, I continue to receive packets for quite some time.
I'm using v1.4 and a "Xbee SMT Grove Dev Board" connected by USB for both sending and receiving.
Here is the code were using to receive on both Windows and Ubuntu:
def connect(self):
self._device = XBeeDevice(self._port, self._baudRate)
self._device.open()
self._device.set_16bit_addr(XBee16BitAddress(utils.int_to_bytes(int(self._address))))
self._network = self._device.get_network()
self._device.add_packet_received_callback(self._packetReceivedCallback)
def _packetReceivedCallback(self, packet):
print("Received!")
#Processing after this
I also tried using pyserial on Windows to print the serial output with:
x = serial.Serial(port="COM4", baudrate=230400 )
while True:
y = x.read(100)
print(y)
Which resulted in 100 Bytes every ~0.8s, so the expected behavior. My best guess at the moment is, that somehow windows takes too long when spawning the threads to handle the packet_recieved_callback, but I really got no clue.
My take is on Windows and serial buffers maybe it just caching arrived data. Try perhaps set port buffers on minimum?
https://www.digi.com/support/knowledge-base/optimizing-usb-to-serial-port-settings
Also baudrate 230400 may be not what Windows likes. You may give a try to 115200, which always gave me good results.