Bird
Raised Fist0
Raspberry Piprogramming~20 mins

pyserial library usage in Raspberry Pi - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
PySerial Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
1:30remaining
What is the output of this pyserial code snippet?

Consider this Python code using pyserial to open a serial port and read data:

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
data = ser.readline()
print(data)

Assuming the device sends the bytes b'Hello\n', what will be printed?

Raspberry Pi
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
data = ser.readline()
print(data)
Ab'Hello\n'
B'Hello\n'
CHello
Db'Hello'
Attempts:
2 left
💡 Hint

Remember that readline() returns bytes, not a string.

🧠 Conceptual
intermediate
1:00remaining
Which parameter sets the baud rate in pyserial?

In the serial.Serial() constructor, which parameter controls the communication speed (baud rate)?

Abaudrate
Bport
Ctimeout
Dparity
Attempts:
2 left
💡 Hint

Think about the term that defines bits per second.

❓ Predict Output
advanced
1:30remaining
What error does this pyserial code raise?

What error will this code raise?

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write('Hello')
Raspberry Pi
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write('Hello')
ANo error, writes successfully
BValueError: invalid port
CAttributeError: 'Serial' object has no attribute 'write'
DTypeError: a bytes-like object is required, not 'str'
Attempts:
2 left
💡 Hint

Check the type of data write() expects.

📝 Syntax
advanced
1:30remaining
Which option correctly opens a serial port with a 2-second timeout?

Choose the correct code to open a serial port /dev/ttyS0 at 115200 baud with a 2-second timeout.

Aserial.Serial('/dev/ttyS0', 115200, timeout='2')
Bserial.Serial(port='/dev/ttyS0', baudrate=115200, timeout=2)
Cserial.Serial('/dev/ttyS0', baudrate=115200, timeout=2.0)
Dserial.Serial(port='/dev/ttyS0', baud=115200, timeout=2)
Attempts:
2 left
💡 Hint

Check parameter names and types carefully.

🚀 Application
expert
2:00remaining
How to flush input buffer before reading data?

You want to clear any old data in the input buffer before reading fresh data from the serial port. Which method should you call?

Aser.flushInput()
Bser.clear()
Cser.reset_input_buffer()
Dser.flush()
Attempts:
2 left
💡 Hint

Look for the modern method name to reset input buffer.

Practice

(1/5)
1. What is the main purpose of the pyserial library when used with Raspberry Pi?
easy
A. To communicate with devices over serial ports
B. To create graphical user interfaces
C. To manage Wi-Fi connections
D. To control GPIO pins directly

Solution

  1. Step 1: Understand pyserial's role

    pyserial is designed to handle serial communication, which means sending and receiving data over serial ports.
  2. Step 2: Compare options with pyserial's function

    Options B, C, and D relate to GUI, Wi-Fi, and GPIO control, which are not pyserial's purpose.
  3. Final Answer:

    To communicate with devices over serial ports -> Option A
  4. Quick Check:

    pyserial = serial communication [OK]
Hint: pyserial = serial port communication library [OK]
Common Mistakes:
  • Confusing pyserial with GPIO control libraries
  • Thinking pyserial manages network connections
  • Assuming pyserial creates user interfaces
2. Which of the following is the correct way to open a serial port using pyserial in Python?
easy
A. serial.Open(port='/dev/ttyUSB0', speed=9600)
B. serial.connect('/dev/ttyUSB0', 9600)
C. serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=1)
D. serial.start(port='/dev/ttyUSB0', baud=9600)

Solution

  1. Step 1: Recall pyserial syntax for opening ports

    The correct method is to create a Serial object with parameters: port, baudrate, and optionally timeout.
  2. Step 2: Check each option's method and parameters

    Only serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=1) uses serial.Serial() with correct parameter names and values.
  3. Final Answer:

    serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=1) -> Option C
  4. Quick Check:

    Use serial.Serial() with port and baudrate [OK]
Hint: Use serial.Serial() with port and baudrate [OK]
Common Mistakes:
  • Using incorrect method names like Open or connect
  • Using wrong parameter names like speed or baud
  • Omitting required parameters
3. What will be the output of this code snippet if the serial device sends the bytes b'OK'?
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
response = ser.read(2)
print(response)
ser.close()
medium
A. b'OK'
B. 'OK'
C. OK
D. b"\x00\x00"

Solution

  1. Step 1: Understand ser.read(2) behavior

    The read(2) method reads 2 bytes from the serial port and returns them as a bytes object.
  2. Step 2: Interpret the print output

    Printing a bytes object shows it with a leading b and quotes, so b'OK' will be printed.
  3. Final Answer:

    b'OK' -> Option A
  4. Quick Check:

    ser.read() returns bytes, printed as b'...' [OK]
Hint: ser.read() returns bytes, print shows b'...' [OK]
Common Mistakes:
  • Expecting a string instead of bytes
  • Confusing print output with raw string
  • Assuming null bytes if device sends data
4. Identify the error in this pyserial code snippet:
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)
ser.write('Hello')
ser.close()
medium
A. The close method should be called before write
B. The Serial constructor is missing the timeout parameter
C. The port name '/dev/ttyUSB0' is invalid
D. The write method requires bytes, not a string

Solution

  1. Step 1: Check the write method argument type

    pyserial's write() expects bytes, but 'Hello' is a string, causing a TypeError.
  2. Step 2: Verify other parts of the code

    Timeout is optional, port name can be valid, and close() should be after write().
  3. Final Answer:

    The write method requires bytes, not a string -> Option D
  4. Quick Check:

    write() needs bytes, encode strings first [OK]
Hint: Always encode strings to bytes before write() [OK]
Common Mistakes:
  • Passing string directly to write() without encoding
  • Thinking timeout is mandatory
  • Closing port before writing data
5. You want to read lines from a serial device that sends text ending with newline characters. Which pyserial method and parameters should you use to read a full line safely with a 2-second timeout?
hard
A. Use serial.Serial('/dev/ttyUSB0', 9600, timeout=None) and ser.readline()
B. Use serial.Serial('/dev/ttyUSB0', 9600, timeout=2) and ser.readline()
C. Use serial.Serial('/dev/ttyUSB0', 9600) and ser.read(100)
D. Use serial.Serial('/dev/ttyUSB0', 9600, timeout=0) and ser.readline()

Solution

  1. Step 1: Set timeout for safe reading

    Setting timeout=2 seconds ensures readline() waits up to 2 seconds for a line, avoiding blocking forever.
  2. Step 2: Use readline() to read full lines

    readline() reads until newline character, perfect for line-based text from serial devices.
  3. Final Answer:

    Use serial.Serial('/dev/ttyUSB0', 9600, timeout=2) and ser.readline() -> Option B
  4. Quick Check:

    timeout + readline() = safe line read [OK]
Hint: Use timeout with readline() to avoid blocking [OK]
Common Mistakes:
  • Using read() instead of readline() for lines
  • Setting timeout=None causes blocking
  • Setting timeout=0 causes non-blocking read with no wait
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard