I'm testing serial communication between two Pi's (Zero -> Pi 4) with Python pyserial library. I am using Zero as camera with preprocessing and sending preprocessed data to Pi 4 via UART (/dev/ttyS0). Camera is working properly at 37FPS (27ms) and sending data (two float values - 8 bytes) to Pi 4 only on request. Pi 4 receive all 8 bytes and converts them into two floats successfully. BUT reading data on Pi 4 takes approx. 75ms. I found out that function pyserial.Serial.read(bytes) processes those 75ms. I also tried changing baudrate to different values (115200 and 250000) but with no effect. Same result was when I changed Pi 4 to Pi 3B+.

What might be the cause of slow reading from serial buffer using pyserial library?

Raspberry Pi Zero code:

with Serial('/dev/ttyS0', 250000) as ser:
    for frame in camera.capture_continuous(stream, format="yuv", use_video_port=True):
        start = time()
        regions = self.__Regions(frame, self.__channel, self.__threshold, self.__disk)
        if (regions): coordinates = self.__Coordinates(regions)
        else: coordinates = [-1.0, -1.0]
        for value in coordinates: ser.write(pack('f', value))
        end = time()
        print(end - start) # prints out 0.027s which is 37FPS

Raspberry Pi 4B code:

with Serial('/dev/ttyS0', 250000) as ser:
    while True:
        start = time()
        data = ser.read(8) # this takes 0.075s 
        end = time()
        print(list(unpack('ff', data)))
        print(end - start) # prints out 0.075s 

1 Answer 1


Oh boiii I FKN FOUND IT!!! After a week of thinking.

The problem is with this sh@tty camera connection on Raspberry Pi Zero, which is somehow interventing to the TX and RX pins on ttyS0 port (UART0). I tested sending 1 byte from Pi 4 to Zero without camera connection and it worked perfectly 0.38ms!!!

But now, I have to deal with this problem so that the camera will work quick without interventing the UART...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.