Bird
Raised Fist0
Raspberry Piprogramming~20 mins

RPi.GPIO library setup in Raspberry Pi - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
GPIO Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this GPIO setup code?
Consider this Python code snippet using the RPi.GPIO library. What will be printed when this code runs?
Raspberry Pi
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
print(GPIO.gpio_function(18))
A0
B1
C2
D3
Attempts:
2 left
💡 Hint
GPIO.gpio_function(pin) returns a number representing the pin mode. GPIO.OUT corresponds to 1.
❓ Predict Output
intermediate
2:00remaining
What error does this GPIO setup code raise?
What error will this code produce when run on a Raspberry Pi?
Raspberry Pi
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, "OUT")
ARuntimeError
BTypeError
CValueError
DNo error
Attempts:
2 left
💡 Hint
The setup function expects a constant like GPIO.OUT, not a string.
🔧 Debug
advanced
3:00remaining
Why does this GPIO output not toggle as expected?
This code is intended to toggle GPIO pin 17 on and off once. Why does it not work as expected?
Raspberry Pi
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17, GPIO.HIGH)
GPIO.output(17, GPIO.LOW)
GPIO.cleanup()
AGPIO.output requires a boolean True/False, not GPIO.HIGH/LOW.
BGPIO.cleanup() resets the pin before setting LOW, so the LOW command fails.
CGPIO.setmode(GPIO.BCM) must be called after setup, not before.
DThe pin is set HIGH and immediately set LOW without delay, so the change is too fast to observe.
Attempts:
2 left
💡 Hint
Think about how fast the commands run and what you can actually see.
🧠 Conceptual
advanced
2:30remaining
What is the difference between GPIO.BCM and GPIO.BOARD modes?
When setting up GPIO pins, what is the key difference between using GPIO.setmode(GPIO.BCM) and GPIO.setmode(GPIO.BOARD)?
AGPIO.BCM is for input pins only; GPIO.BOARD is for output pins only.
BGPIO.BCM uses Broadcom chip numbering; GPIO.BOARD uses physical pin numbering on the header.
CGPIO.BCM requires root access; GPIO.BOARD does not.
DGPIO.BCM disables pull-up resistors; GPIO.BOARD enables them by default.
Attempts:
2 left
💡 Hint
Think about how pins are identified on the Raspberry Pi.
🚀 Application
expert
3:00remaining
How many pins are set as outputs after this code runs?
Given this code, how many GPIO pins are configured as outputs at the end?
Raspberry Pi
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
pins = [5, 6, 13, 19]
for pin in pins:
    GPIO.setup(pin, GPIO.OUT)
GPIO.setup(6, GPIO.IN)
GPIO.setup(19, GPIO.IN)
A2
B4
C3
D1
Attempts:
2 left
💡 Hint
Consider the effect of the last two setup calls on pins 6 and 19.

Practice

(1/5)
1. What is the purpose of the GPIO.setmode() function in the RPi.GPIO library?
easy
A. It sets the pin numbering system to use (BOARD or BCM).
B. It cleans up all GPIO pins after use.
C. It sets the direction of a specific pin (input or output).
D. It reads the current value of a GPIO pin.

Solution

  1. Step 1: Understand the role of GPIO.setmode()

    This function tells the Raspberry Pi how to number the pins, either by physical board numbers (BOARD) or by Broadcom chip numbers (BCM).
  2. Step 2: Differentiate from other functions

    Cleaning pins is done by GPIO.cleanup(), setting pin direction is GPIO.setup(), and reading pin value is done by GPIO.input().
  3. Final Answer:

    It sets the pin numbering system to use (BOARD or BCM). -> Option A
  4. Quick Check:

    GPIO.setmode() = sets pin numbering [OK]
Hint: Remember: setmode chooses pin numbering style [OK]
Common Mistakes:
  • Confusing setmode() with cleanup()
  • Thinking setmode() sets pin direction
  • Mixing up setmode() with reading pin values
2. Which of the following is the correct way to import the RPi.GPIO library and set the pin numbering mode to BCM?
easy
A. import RPi.GPIO as GPIO\nGPIO.setmode(GPIO.BCM)
B. import RPi.GPIO as GPIO\nGPIO.setmode(GPIO.BOARD)
C. import GPIO\nGPIO.setmode(GPIO.BCM)
D. import RPi.GPIO\nGPIO.setmode(GPIO.BCM)

Solution

  1. Step 1: Check the correct import syntax

    The standard way is to import RPi.GPIO as GPIO to use GPIO functions easily.
  2. Step 2: Verify the setmode argument

    To set pin numbering to BCM, use GPIO.setmode(GPIO.BCM). import RPi.GPIO as GPIO\nGPIO.setmode(GPIO.BCM) matches both correct import and setmode usage.
  3. Final Answer:

    import RPi.GPIO as GPIO\nGPIO.setmode(GPIO.BCM) -> Option A
  4. Quick Check:

    Import as GPIO + setmode BCM = import RPi.GPIO as GPIO\nGPIO.setmode(GPIO.BCM) [OK]
Hint: Import as GPIO and use GPIO.BCM for BCM mode [OK]
Common Mistakes:
  • Forgetting 'as GPIO' in import
  • Using BOARD instead of BCM when BCM is asked
  • Importing just GPIO without RPi
3. What will be the output of this code snippet?
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
print(GPIO.gpio_function(7))

Assuming pin 7 is set as output.
medium
A. 0
B. 3
C. 2
D. 1

Solution

  1. Step 1: Understand GPIO.gpio_function()

    This function returns a number representing the pin's current function. For output pins, it returns 1.
  2. Step 2: Check pin setup

    Pin 7 is set as GPIO.OUT, so gpio_function(7) returns 1.
  3. Final Answer:

    1 -> Option D
  4. Quick Check:

    Output pin function code = 1 [OK]
Hint: Output pins return 1 from gpio_function() [OK]
Common Mistakes:
  • Assuming gpio_function returns pin number
  • Confusing output code with input code
  • Not setting pin mode before calling gpio_function
4. Identify the error in this code snippet:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, "OUT")
GPIO.output(11, True)
GPIO.cleanup()
medium
A. Calling GPIO.cleanup() before output.
B. Using string "OUT" instead of GPIO.OUT in setup.
C. Missing GPIO.setwarnings(False) before setup.
D. Not importing time module for delays.

Solution

  1. Step 1: Check GPIO.setup() syntax

    The direction argument must be GPIO.OUT or GPIO.IN, not a string like "OUT".
  2. Step 2: Verify other lines

    GPIO.setwarnings() is optional, cleanup is correctly called last, and time module is not needed here.
  3. Final Answer:

    Using string "OUT" instead of GPIO.OUT in setup. -> Option B
  4. Quick Check:

    Pin direction must be GPIO.OUT, not "OUT" [OK]
Hint: Use GPIO.OUT constant, not string "OUT" [OK]
Common Mistakes:
  • Passing pin direction as string
  • Calling cleanup too early
  • Forgetting to import GPIO properly
5. You want to control an LED connected to pin 12 using BCM numbering. Which sequence of commands correctly sets up the pin and turns the LED on, then cleans up properly?
hard
A. GPIO.setmode(GPIO.BCM)\nGPIO.setup(18, GPIO.OUT)\nGPIO.output(18, True)\nGPIO.cleanup()
B. GPIO.setmode(GPIO.BOARD)\nGPIO.setup(12, GPIO.OUT)\nGPIO.output(12, True)\nGPIO.cleanup()
C. GPIO.setmode(GPIO.BCM)\nGPIO.setup(12, GPIO.OUT)\nGPIO.output(12, True)\nGPIO.cleanup()
D. GPIO.setmode(GPIO.BOARD)\nGPIO.setup(18, GPIO.OUT)\nGPIO.output(18, True)\nGPIO.cleanup()

Solution

  1. Step 1: Match numbering mode with pin number

    Pin 12 in BCM mode corresponds to GPIO12, so setmode(GPIO.BCM) and setup(12) is correct.
  2. Step 2: Confirm output setup and cleanup

    Pin is set as output, turned on with True, and cleanup is called last to reset pins.
  3. Final Answer:

    GPIO.setmode(GPIO.BCM)\nGPIO.setup(12, GPIO.OUT)\nGPIO.output(12, True)\nGPIO.cleanup() -> Option C
  4. Quick Check:

    BCM mode + pin 12 + output + cleanup = GPIO.setmode(GPIO.BCM)\nGPIO.setup(12, GPIO.OUT)\nGPIO.output(12, True)\nGPIO.cleanup() [OK]
Hint: Match setmode with pin number system [OK]
Common Mistakes:
  • Mixing BOARD and BCM numbering
  • Using wrong pin number for chosen mode
  • Forgetting to call cleanup()
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