📖 Scenario: You have a Raspberry Pi connected to an LED through a PWM pin. You want to control the brightness of the LED by changing the PWM duty cycle.
🎯 Goal: Build a simple program that sets up a PWM LED on pin 18 and changes its brightness by setting the PWM value.
📋 What You'll Learn
Create a PWMLED object on pin 18
Set a brightness level variable
Use the brightness variable to set the LED brightness
Print the brightness value
💡 Why This Matters
🌍 Real World
Controlling LED brightness is common in home automation, indicators, and lighting projects using Raspberry Pi.
💼 Career
Understanding PWM control of LEDs is useful for hardware interfacing and embedded systems programming.
Progress0 / 4 steps
1
Set up the PWMLED on pin 18
Import PWMLED from gpiozero and create a PWMLED object called led on pin 18.
Raspberry Pi
Hint
Use from gpiozero import PWMLED to import the class.
Create the LED with led = PWMLED(18).
2
Create a brightness variable
Create a variable called brightness and set it to 0.5 to represent half brightness.
Raspberry Pi
Hint
Set brightness = 0.5 to represent 50% brightness.
3
Set the LED brightness using the brightness variable
Set the value property of led to the brightness variable.
Raspberry Pi
Hint
Use led.value = brightness to set the LED brightness.
4
Print the brightness value
Print the text "Brightness level:" followed by the brightness variable.
Raspberry Pi
Hint
Use print(f"Brightness level: {brightness}") to show the brightness.
Practice
(1/5)
1. What does the PWMLED class control on a Raspberry Pi?
easy
A. The speed of the Raspberry Pi fan
B. The color of an LED by mixing red, green, and blue lights
C. The temperature of the Raspberry Pi CPU
D. The brightness of an LED by changing how long it is on and off quickly
Solution
Step 1: Understand PWMLED purpose
PWMLED is used to control LED brightness by adjusting the time it stays on and off rapidly.
Step 2: Compare options
Only The brightness of an LED by changing how long it is on and off quickly describes brightness control using on/off timing, which matches PWMLED's function.
Final Answer:
The brightness of an LED by changing how long it is on and off quickly -> Option D
Quick Check:
PWMLED controls brightness = A [OK]
Hint: PWM means brightness by fast on/off timing [OK]
Common Mistakes:
Confusing brightness with color control
Thinking PWMLED controls temperature or fan speed
2. Which of the following is the correct way to set the brightness of a PWMLED named led to half brightness?
easy
A. led.set_brightness = 0.5
B. led.brightness(0.5)
C. led.brightness = 0.5
D. led.brightness = 50
Solution
Step 1: Recall PWMLED brightness syntax
Brightness is set by assigning a float between 0 and 1 to the brightness attribute.
Step 2: Check each option
led.brightness = 0.5 uses correct attribute assignment with 0.5 (half brightness). Others use wrong syntax or wrong value type.
Final Answer:
led.brightness = 0.5 -> Option C
Quick Check:
Set brightness by attribute = C [OK]
Hint: Use led.brightness = value between 0 and 1 [OK]
Common Mistakes:
Calling brightness like a function
Using integer 50 instead of 0.5
Trying to assign to a method
3. What will be the output behavior of this code snippet?
from gpiozero import PWMLED
import time
led = PWMLED(17)
led.brightness = 0.2
time.sleep(2)
led.brightness = 0.8
time.sleep(2)
led.off()
medium
A. LED glows dimly for 2 seconds, then brightly for 2 seconds, then turns off
B. LED glows brightly for 2 seconds, then dimly for 2 seconds, then turns off
C. LED stays off the whole time
D. Code causes an error because brightness is set incorrectly
Solution
Step 1: Analyze brightness settings
First brightness is 0.2 (dim), then after 2 seconds it changes to 0.8 (bright).
Step 2: Understand timing and off command
Each brightness level lasts 2 seconds, then LED is turned off.
Final Answer:
LED glows dimly for 2 seconds, then brightly for 2 seconds, then turns off -> Option A
Quick Check:
Brightness changes 0.2 to 0.8 then off = A [OK]
Hint: Brightness values control glow level over time [OK]
Common Mistakes:
Mixing order of brightness values
Thinking brightness values cause errors
Assuming LED stays on after off()
4. Identify the error in this code that tries to set LED brightness:
from gpiozero import PWMLED
led = PWMLED(18)
led.brightness(0.7)
medium
A. Using parentheses after brightness instead of assignment
B. Wrong pin number for PWMLED
C. Missing import for time module
D. PWMLED does not support brightness control
Solution
Step 1: Check how brightness is set
Brightness is an attribute, so it should be assigned a value, not called like a function.
Step 2: Verify other options
Pin 18 is valid, time module is not needed here, and PWMLED supports brightness.
Final Answer:
Using parentheses after brightness instead of assignment -> Option A
Quick Check:
brightness is attribute, not method = D [OK]
Hint: Set brightness with =, not parentheses [OK]
Common Mistakes:
Calling brightness like a function
Assuming pin number causes error
Thinking time import is required here
5. You want to smoothly increase an LED's brightness from off to full over 5 seconds using PWMLED. Which code snippet correctly achieves this?
hard
A.
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(5):
led.brightness = i
time.sleep(1)
led.off()
B.
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(6):
led.brightness = i / 5
time.sleep(1)
led.off()
C.
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(0, 1, 0.2):
led.brightness = i
time.sleep(1)
led.off()
D.
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(5):
led.brightness = 1 - i / 5
time.sleep(1)
led.off()
Solution
Step 1: Understand brightness range and timing
Brightness must go from 0 to 1 in steps over 5 seconds, so dividing i by 5 in 6 steps (0 to 5) works.
Step 2: Check each code snippet
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(6):
led.brightness = i / 5
time.sleep(1)
led.off()
correctly uses i/5 for brightness from 0 to 1 in 1-second steps.
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(5):
led.brightness = i
time.sleep(1)
led.off()
sets brightness to integers >1 (invalid).
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(0, 1, 0.2):
led.brightness = i
time.sleep(1)
led.off()
uses range with float step (invalid syntax).
from gpiozero import PWMLED
import time
led = PWMLED(21)
for i in range(5):
led.brightness = 1 - i / 5
time.sleep(1)
led.off()
decreases brightness instead of increasing.
Final Answer:
Code that increases brightness smoothly from 0 to 1 over 5 seconds using i/5 steps -> Option B
Quick Check:
Brightness from 0 to 1 in steps = B [OK]
Hint: Divide loop index by max steps for smooth brightness [OK]
Common Mistakes:
Using integer brightness values >1
Trying to use float step in range (not allowed)
Decreasing brightness instead of increasing
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.