라즈베리파이로 스마트 전등 제어하기 (초보자용 IoT 실습)
1. 스마트 전등 제어의 기본 개념
스마트홈의 핵심은 ‘자동화’입니다. 라즈베리파이를 이용하면 전등, 콘센트, 가전제품을 인터넷을 통해 제어할 수 있습니다.
이 실습에서는 릴레이 모듈을 이용해 실제 전등을 켜고 끄는 시스템을 만들어봅니다. 원리는 간단합니다.
라즈베리파이의 GPIO 핀에서 전기 신호를 보내면 릴레이가 스위치 역할을 하여 전등의 전원을 차단하거나 연결합니다.
이 프로젝트를 통해 라즈베리파이의 GPIO 제어, 전기 회로 이해, IoT 자동화의 기본 구조를 모두 익힐 수 있습니다.
2. 준비물 및 사전 세팅
스마트 전등 제어를 위한 준비물은 다음과 같습니다.
- 라즈베리파이 4 (또는 3 이상)
- 1채널 릴레이 모듈
- 전등 또는 220V 램프 (주의: 안전을 위해 저전압 전구 실습 권장)
- 점퍼 케이블 (암-수 타입)
- 브레드보드 (선택사항)
- 라즈베리파이 OS 설치된 microSD카드
- SSH 접속 또는 모니터 연결
사전 준비로는 라즈베리파이 OS를 설치하고, SSH 접속이나 터미널을 사용할 수 있도록 설정해야 합니다.
기본 패키지를 최신 상태로 유지하기 위해 아래 명령어를 먼저 실행하세요.
sudo apt update && sudo apt upgrade -y
3. 회로 구성: 릴레이 모듈과 전등 연결하기
릴레이는 전류를 차단하거나 연결하는 전자 스위치입니다. 라즈베리파이의 3.3V 신호만으로 220V 회로를 제어할 수 있게 해줍니다.
연결 방법은 다음과 같습니다.
- 라즈베리파이 GPIO 17 → 릴레이 IN
- 라즈베리파이 5V 핀 → 릴레이 VCC
- 라즈베리파이 GND → 릴레이 GND
- 릴레이의 COM과 NO 단자 → 전등 스위치 라인에 연결
주의할 점은 220V 전류를 다루기 때문에, 반드시 절연된 선을 사용하고 전원을 분리한 상태에서 연결해야 합니다.
안전이 우선이므로 초보자는 USB 전원 전구나 12V LED 램프를 이용한 테스트를 추천합니다.
4. 파이썬으로 전등 제어 코드 작성하기
이제 라즈베리파이에서 릴레이를 제어하는 간단한 코드를 작성해봅니다.
터미널에서 아래 명령으로 새 파일을 만듭니다.
nano light_control.py
그리고 아래 코드를 입력합니다.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
relay_pin = 17
GPIO.setup(relay_pin, GPIO.OUT)
try:
while True:
command = input("전등을 켜려면 ON, 끄려면 OFF를 입력하세요: ").strip().lower()
if command == "on":
GPIO.output(relay_pin, GPIO.HIGH)
print("전등이 켜졌습니다.")
elif command == "off":
GPIO.output(relay_pin, GPIO.LOW)
print("전등이 꺼졌습니다.")
else:
print("잘못된 입력입니다.")
except KeyboardInterrupt:
GPIO.cleanup()
파일을 저장하고 실행합니다.
python3 light_control.py
터미널에 ON 또는 OFF를 입력하면 릴레이가 작동하면서 전등이 켜지고 꺼지는 것을 확인할 수 있습니다.
5. 원격 제어: 웹 또는 스마트폰에서 조작하기
기본 동작이 확인되면, 다음 단계는 원격 제어입니다.
간단한 웹 서버를 통해 스마트폰에서도 전등을 제어할 수 있습니다.
아래는 Flask를 이용한 간단한 웹 제어 예시입니다.
sudo apt install python3-flask -y
이후 아래 코드를 작성합니다.
from flask import Flask, render_template_string
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
relay_pin = 17
GPIO.setup(relay_pin, GPIO.OUT)
GPIO.output(relay_pin, GPIO.LOW)
app = Flask(__name__)
html = """
<h1>라즈베리파이 스마트 전등 제어</h1>
<form action="/on"><button>전등 켜기</button></form>
<form action="/off"><button>전등 끄기</button></form>
"""
@app.route("/")
def index():
return render_template_string(html)
@app.route("/on")
def light_on():
GPIO.output(relay_pin, GPIO.HIGH)
return render_template_string(html + "<p>전등이 켜졌습니다.</p>")
@app.route("/off")
def light_off():
GPIO.output(relay_pin, GPIO.LOW)
return render_template_string(html + "<p>전등이 꺼졌습니다.</p>")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
웹 브라우저에서 라즈베리파이의 IP 주소와 포트 번호(예: http://192.168.0.10:8080)를 입력하면,
버튼 클릭만으로 전등을 켜고 끌 수 있습니다.
6. 동작 오류 시 점검할 부분
- 릴레이 모듈의 VCC와 GND 연결이 반대로 되어 있지 않은지 확인
- 전원 어댑터의 전류가 충분한지 (5V 3A 이상 권장)
- 파이썬에서
RPi.GPIO모듈이 설치되어 있는지pip3 install RPi.GPIO - Flask 서버 실행 시 방화벽이 포트를 차단하고 있지 않은지 확인
이러한 기본 점검만으로 대부분의 동작 오류는 해결됩니다.
7. 확장 아이디어 및 마무리
스마트 전등 제어는 IoT의 기초 개념을 실습하기에 완벽한 프로젝트입니다.
여기서 한 단계 더 나아가면 다음과 같은 기능으로 확장할 수 있습니다.
- 스마트폰 앱 연동 (Blynk, MQTT, Node-RED 등)
- 일정 시간 자동 제어 (예: 밤 10시에 자동으로 소등)
- 음성 제어 (Google Assistant, ChatGPT API, Alexa 연동)
- 센서 연동 (조도 센서로 자동 점등)
라즈베리파이로 전등을 제어하는 과정은 단순한 코딩 실습이 아니라,
실제 생활 속에서 기술을 체험하고 응용하는 훌륭한 IoT 입문 경험이 됩니다.
이 프로젝트를 완성했다면, 이제 당신은 스마트홈 구축의 첫걸음을 성공적으로 뗀 것입니다.