Bird
Raised Fist0
Raspberry Piprogramming~5 mins

Home automation with relay modules in Raspberry Pi

Choose your learning style10 modes available
Introduction

Home automation lets you control devices like lights or fans from your Raspberry Pi. Relay modules act like switches that the Pi can turn on or off safely.

You want to turn your room lights on or off using your Raspberry Pi.
You want to control a fan remotely with a program.
You want to automate watering plants by switching a pump on and off.
You want to build a simple security system that controls alarms or locks.
You want to schedule devices to run at certain times automatically.
Syntax
Raspberry Pi
import RPi.GPIO as GPIO
import time

relay_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay_pin, GPIO.OUT)

# To turn relay ON
GPIO.output(relay_pin, GPIO.LOW)

# To turn relay OFF
GPIO.output(relay_pin, GPIO.HIGH)

Relay modules usually work with LOW signal to turn ON and HIGH to turn OFF.

Use GPIO.BCM mode to refer to pins by their Broadcom number.

Examples
This example turns a relay connected to pin 17 ON for 2 seconds, then OFF.
Raspberry Pi
import RPi.GPIO as GPIO

relay_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay_pin, GPIO.OUT)

# Turn relay ON
GPIO.output(relay_pin, GPIO.LOW)

# Wait 2 seconds
import time
time.sleep(2)

# Turn relay OFF
GPIO.output(relay_pin, GPIO.HIGH)

GPIO.cleanup()
This code blinks the relay 3 times with 1 second ON and 1 second OFF.
Raspberry Pi
import RPi.GPIO as GPIO
import time

relay_pin = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay_pin, GPIO.OUT)

# Toggle relay ON and OFF 3 times
for _ in range(3):
    GPIO.output(relay_pin, GPIO.LOW)
    time.sleep(1)
    GPIO.output(relay_pin, GPIO.HIGH)
    time.sleep(1)

GPIO.cleanup()
Sample Program

This program turns a relay connected to pin 22 ON for 3 seconds, then turns it OFF and cleans up the GPIO pins.

Raspberry Pi
import RPi.GPIO as GPIO
import time

relay_pin = 22

GPIO.setmode(GPIO.BCM)
GPIO.setup(relay_pin, GPIO.OUT)

print('Turning relay ON')
GPIO.output(relay_pin, GPIO.LOW)  # Relay ON

print('Relay is ON for 3 seconds')
time.sleep(3)

print('Turning relay OFF')
GPIO.output(relay_pin, GPIO.HIGH)  # Relay OFF

GPIO.cleanup()
print('Program finished')
OutputSuccess
Important Notes

Always connect relay modules to a separate power supply if they need more current than the Pi can provide.

Use GPIO.cleanup() at the end to reset pins and avoid warnings next time you run the program.

Check your relay module's datasheet to confirm if LOW or HIGH activates the relay.

Summary

Relay modules let your Raspberry Pi safely control high-power devices.

Use GPIO pins to send LOW or HIGH signals to switch the relay ON or OFF.

Always clean up GPIO pins after your program finishes.

Practice

(1/5)
1. What is the main purpose of using a relay module with a Raspberry Pi in home automation?
easy
A. To increase the Raspberry Pi's processing speed
B. To safely control high-power devices using low-power GPIO signals
C. To store data from sensors
D. To provide internet connectivity

Solution

  1. Step 1: Understand relay module function

    A relay module acts as a switch controlled by the Raspberry Pi's GPIO pins to turn devices ON or OFF safely.
  2. Step 2: Identify the purpose in home automation

    It allows the Pi to control high-power devices without directly handling high voltage or current.
  3. Final Answer:

    To safely control high-power devices using low-power GPIO signals -> Option B
  4. Quick Check:

    Relay modules = safe device control [OK]
Hint: Relays switch big power with small signals [OK]
Common Mistakes:
  • Thinking relay speeds up the Pi
  • Confusing relay with data storage
  • Assuming relay provides network access
2. Which of the following Python code snippets correctly sets GPIO pin 17 as output and turns the relay ON (assuming active LOW)?
easy
A. GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.LOW)
B. GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.HIGH)
C. GPIO.setup(17, GPIO.IN) GPIO.output(17, GPIO.LOW)
D. GPIO.setup(17, GPIO.IN) GPIO.output(17, GPIO.HIGH)

Solution

  1. Step 1: Set GPIO pin mode

    Pin 17 must be set as output to control the relay, so GPIO.setup(17, GPIO.OUT) is correct.
  2. Step 2: Turn relay ON with active LOW

    For active LOW relay, sending GPIO.LOW activates the relay, so GPIO.output(17, GPIO.LOW) is correct.
  3. Final Answer:

    GPIO.setup(17, GPIO.OUT) followed by GPIO.output(17, GPIO.LOW) -> Option A
  4. Quick Check:

    Active LOW means LOW signal turns relay ON [OK]
Hint: Active LOW relay ON means output LOW [OK]
Common Mistakes:
  • Setting pin as input instead of output
  • Using HIGH to turn ON active LOW relay
  • Confusing pin numbers
3. What will be the output of this Python code controlling a relay on GPIO pin 22?
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)
GPIO.output(22, GPIO.LOW)
print(GPIO.input(22))
GPIO.cleanup()
medium
A. 1
B. Error: GPIO.input() not allowed on output pin
C. 0
D. GPIO.LOW

Solution

  1. Step 1: Setup and output LOW on pin 22

    The code sets pin 22 as output and writes LOW (0) to it.
  2. Step 2: Read pin state with GPIO.input(22)

    GPIO.input returns the current pin state; since output is LOW, it returns 0.
  3. Final Answer:

    0 -> Option C
  4. Quick Check:

    Output LOW means input reads 0 [OK]
Hint: GPIO.input reads output pin state correctly [OK]
Common Mistakes:
  • Expecting 1 instead of 0 after output LOW
  • Thinking GPIO.input causes error on output pins
  • Confusing GPIO.BCM with GPIO.BOARD numbering
4. Identify the error in this relay control code snippet:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, GPIO.LOW)
GPIO.cleanup()
GPIO.output(18, GPIO.HIGH)
medium
A. Calling GPIO.output after GPIO.cleanup causes an error
B. GPIO.setup should be called after GPIO.cleanup
C. GPIO.setmode must be called twice
D. GPIO.output cannot use GPIO.HIGH

Solution

  1. Step 1: Understand GPIO.cleanup() effect

    GPIO.cleanup() resets all GPIO pins, releasing resources and resetting pin states.
  2. Step 2: Check GPIO.output after cleanup

    Calling GPIO.output after cleanup without re-setup causes a runtime error because pin 18 is no longer configured.
  3. Final Answer:

    Calling GPIO.output after GPIO.cleanup causes an error -> Option A
  4. Quick Check:

    Use GPIO.setup after cleanup before output [OK]
Hint: Don't use GPIO.output after cleanup without setup [OK]
Common Mistakes:
  • Thinking cleanup only clears pin states but allows output
  • Believing setup order is flexible
  • Assuming GPIO.HIGH is invalid
5. You want to control two relays connected to GPIO pins 5 and 6 to turn ON a fan and a light respectively. The relays are active LOW. Which Python code correctly turns ON the fan and turns OFF the light?
hard
A. GPIO.setup(5, GPIO.OUT) GPIO.setup(6, GPIO.OUT) GPIO.output(5, GPIO.HIGH) GPIO.output(6, GPIO.HIGH)
B. GPIO.setup(5, GPIO.OUT) GPIO.setup(6, GPIO.OUT) GPIO.output(5, GPIO.HIGH) GPIO.output(6, GPIO.LOW)
C. GPIO.setup(5, GPIO.IN) GPIO.setup(6, GPIO.IN) GPIO.output(5, GPIO.LOW) GPIO.output(6, GPIO.HIGH)
D. GPIO.setup(5, GPIO.OUT) GPIO.setup(6, GPIO.OUT) GPIO.output(5, GPIO.LOW) GPIO.output(6, GPIO.HIGH)

Solution

  1. Step 1: Setup pins 5 and 6 as outputs

    Both pins must be outputs to control relays: GPIO.setup(5, GPIO.OUT) and GPIO.setup(6, GPIO.OUT).
  2. Step 2: Apply active LOW logic for relays

    To turn ON the fan (pin 5), output LOW; to turn OFF the light (pin 6), output HIGH.
  3. Final Answer:

    Setup pins as output, output LOW on 5, HIGH on 6 -> Option D
  4. Quick Check:

    Active LOW ON = LOW, OFF = HIGH [OK]
Hint: Active LOW ON means output LOW, OFF means HIGH [OK]
Common Mistakes:
  • Setting pins as input instead of output
  • Reversing HIGH and LOW for active LOW relay
  • Turning both devices ON or OFF incorrectly
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