구글 홈 + 라즈베리파이 연동으로 음성 제어 시스템 만들기
1. 프로젝트 개요
구글 홈(Google Home)과 라즈베리파이를 연동하면, 음성 명령으로 전등을 켜거나 끄고, 음악을 재생하거나, 집안의 다양한 기기를 제어할 수 있습니다.
이 시스템은 구글 어시스턴트의 음성 인식 기능과 라즈베리파이의 GPIO 제어 능력을 결합해 스마트홈 자동화의 핵심 구조를 직접 구현하는 것입니다.
예를 들어 “OK Google, 불 꺼줘”라고 말하면 구글 홈이 라즈베리파이로 신호를 보내 릴레이를 작동시키는 식입니다.
2. 필요한 준비물
이 프로젝트를 완성하려면 다음과 같은 구성 요소가 필요합니다.
- 라즈베리파이 4 (또는 3 이상)
- microSD 카드 (32GB 이상)
- 5V 3A 전원 어댑터
- Google Home 또는 Nest 스피커
- Wi-Fi 네트워크 환경
- 릴레이 모듈 (전등 제어용)
- 구글 계정 (Google Cloud Platform 접근용)
이외에도 Node.js 또는 Python 환경이 필요합니다. 초보자라면 파이썬 기반 연동이 가장 쉽습니다.
3. 라즈베리파이 기본 설정
먼저 라즈베리파이에 라즈베리파이 OS를 설치하고 네트워크를 연결합니다.
SSH 접속이 가능하도록 /boot 디렉터리에 ssh 파일을 생성해두면 원격으로 제어하기 편리합니다.
이후 필수 패키지를 업데이트합니다.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-flask -y
4. Google Assistant API 활성화
라즈베리파이가 구글 홈 명령을 이해하려면 Google Assistant SDK를 설정해야 합니다.
- Google Cloud Console에 접속
- 새 프로젝트를 생성
- Google Assistant API를 검색하여 활성화
- OAuth 클라이언트 ID 생성 (기기 유형은 Other 또는 Desktop App 선택)
- 인증 정보를 JSON 파일로 다운로드 (
client_secret_xxx.json) - 해당 파일을 라즈베리파이에 복사
이후 인증 절차를 진행해야 합니다. 터미널에서 아래 명령을 입력하세요.
pip3 install google-assistant-sdk[samples]
google-oauthlib-tool --client-secrets client_secret_xxx.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
명령을 실행하면 URL이 표시되며, 브라우저에서 구글 계정 인증 후 코드를 터미널에 붙여넣으면 설정이 완료됩니다.
5. 구글 홈과 라즈베리파이 연동하기
구글 홈 앱에서 라즈베리파이를 하나의 스마트 디바이스처럼 인식시키는 방법은 IFTTT(If This Then That) 서비스를 이용하는 것입니다.
- https://ifttt.com에 접속
- 구글 계정으로 로그인
- 새로운 Applet 생성
- “If This”에서 Google Assistant 선택
- 트리거 문장 입력 (예: “불 꺼줘”)
- “Then That”에서 Webhooks 선택
- Webhooks URL에 라즈베리파이의 Flask 서버 주소 입력 (예:
http://192.168.0.15:5000/lightoff)
이렇게 설정하면 구글 홈이 음성 명령을 인식할 때마다 라즈베리파이에 HTTP 요청을 전송하게 됩니다.
6. 파이썬으로 음성 명령 처리하기
이제 라즈베리파이에서 HTTP 요청을 받아서 실제 동작을 수행하는 코드를 작성합니다.
sudo pip3 install flask RPi.GPIO
이후 다음 코드를 작성합니다.
from flask import Flask
import RPi.GPIO as GPIO
app = Flask(__name__)
relay_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(relay_pin, GPIO.OUT)
GPIO.output(relay_pin, GPIO.LOW)
@app.route("/lighton")
def light_on():
GPIO.output(relay_pin, GPIO.HIGH)
return "전등이 켜졌습니다."
@app.route("/lightoff")
def light_off():
GPIO.output(relay_pin, GPIO.LOW)
return "전등이 꺼졌습니다."
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
이 코드를 실행하면 구글 홈 명령이 Webhooks를 통해 들어올 때마다 라즈베리파이가 해당 신호를 받아 릴레이를 작동시킵니다.
7. 실제 제어 예시: 전등 제어 시스템
IFTTT 설정 시
- “불 켜줘” →
/lighton - “불 꺼줘” →
/lightoff
로 연결하면, 구글 홈을 통해 음성으로 직접 제어할 수 있습니다.
“OK Google, 불 켜줘”
→ IFTTT가 Flask 서버로 요청 전송
→ 라즈베리파이의 GPIO가 활성화
→ 릴레이를 통해 전등이 켜짐
이 단순한 흐름이 스마트홈 자동화의 핵심 구조입니다.
8. 자주 발생하는 문제와 해결법
1. 구글 홈이 명령을 인식하지 못함
- IFTTT에서 설정한 문장이 실제 음성과 정확히 일치해야 합니다.
- 구글 홈 앱에서 올바른 계정이 연결되어 있는지 확인하세요.
2. Flask 서버에 접속이 안 됨
- 라즈베리파이와 구글 홈이 같은 네트워크에 있는지 확인
- 방화벽이 포트(5000)를 차단하고 있는지 점검
3. 릴레이가 반응하지 않음
- GPIO 핀 번호를 정확히 확인 (
BCM 모드기준) - 전원 공급이 충분한지 확인 (5V 3A 권장)
9. 확장 아이디어 및 마무리
라즈베리파이와 구글 홈의 연동은 단순히 전등 제어에 그치지 않습니다.
다음과 같은 확장 기능을 통해 완전한 스마트홈 시스템으로 발전시킬 수 있습니다.
- 조도 센서 연동 → 밝을 때 자동 소등
- 온습도 센서 연결 → “습도 알려줘” 음성 응답
- MQTT 프로토콜 도입 → 여러 기기 동시 제어
- Node-RED 기반 시각적 제어 인터페이스 구축
이 과정을 통해 단순한 음성 명령을 넘어, 집 전체를 자동화하는 IoT 시스템을 직접 만들 수 있습니다.
라즈베리파이는 작은 컴퓨터이지만, 구글 홈과 결합하면 그 가능성은 무한합니다.
한 번 구축해두면 매일 “OK Google” 한마디로 집안이 반응하는 진짜 스마트홈을 경험할 수 있습니다.