아두이노 나노도 사용 가능하며, 더 많은 LED 픽셀을 구동하려면 아두이노 메가를 추천합니다.
라즈베리 파이 3 모델 B (Raspberry Pi 3 Model B)
1
네오픽셀 스트립 (NeoPixel strip)
1
WS2812B 계열의 주소 지정 가능한 LED 스트립이면 모두 사용 가능합니다.
앱 및 온라인 서비스
아두이노 IDE
아마존 웹 서비스 AWS Lambda
아마존 알렉사 알렉사 스킬 키트 (Alexa Skills Kit)
아마존 웹 서비스 AWS IoT
프로젝트 개요
주소 지정 가능한 RGB LED 스트립의 무한한 색상 효과와 애니메이션 기능에 매료되어, 몇 년 전 아두이노 보드용 라이브러리인 ALA(Arduino Light Animations)를 개발했습니다. 이제 알렉사를 통해 음성으로 실내 조명과 효과를 제어할 수 있게 되었습니다.
시스템 아키텍처
이 프로젝트는 여러 클라우드 및 하드웨어 구성 요소가 유기적으로 연결된 구조입니다.
아마존 알렉사: 커스텀 알렉사 스킬(Light Strip)이 음성 상호작용 모델을 정의하고, 명령(인텐트)을 람다 함수로 전달합니다.
AWS Lambda: 알렉사로부터 메시지를 수신하여 IoT 서비스로 상태 업데이트를 전송하는 파이썬 스크립트입니다.
AWS IoT: '싱크(Thing Shadow)'를 저장하여 RGB 스트립의 상태를 표현합니다. 섀도우가 업데이트될 때마다 구독 중인 MQTT 클라이언트(라즈베리 파이)에 알림이 전송됩니다.
라즈베리 파이: 아마존 IoT 서비스에서 MQTT 메시지를 수신하는 클라이언트를 실행합니다. 다른 한편으로는 USB 포트를 통해 아두이노 보드에 전원을 공급하고 명령을 전송합니다.
아두이노: 라즈베리 파이로부터 USB 시리얼 포트를 통해 명령을 수신하여 ALA 라이브러리로 LED 스트립을 구동합니다. 우노, 나노, 메가 보드 모두 사용 가능합니다.
WS2812B RGB LED 스트립: 각 LED를 개별적으로 제어할 수 있는 주소 지정형 스트립으로, 아름답고 다채로운 라이트 애니메이션을 구현합니다.
각 구성 요소 자체는 복잡하지 않지만, 서로 연결된 조각이 많습니다. 제안된 구조를 따라 견고한 기반을 다진 후 다음 단계로 진행하시길 권장합니다. 프로젝트를 두 개의 하위 프로젝트로 나누어 설명합니다.
1단계: 웹 기반 LED 애니메이션 제어 (라즈베리 파이 + 아두이노)
첫 번째 부분은 Hackster.io의 "Web-Controlled LED Animations with Raspberry Pi and Arduino" 프로젝트에서 다룹니다. 라즈베리 파이, 아두이노 보드, WS2812B LED 스트립을 연결하는 단계를 안내합니다. 이 단계를 완료하면 스마트폰이나 PC의 웹 브라우저에서 LED 애니메이션을 제어할 수 있게 됩니다.
2단계: 알렉사 음성 제어 추가
두 번째 부분(본 문서)에서는 앞서 구축한 시스템에 아마존 알렉사를 이용한 음성 제어 기능을 추가합니다. 전체 체인을 올바르게 설정하기 위해 여러 단계를 순차적으로 실행해야 하니, 지침을 주의 깊게 따라주세요.
AWS IoT 설정
하드웨어 부분이 완료되었다면 이제 클라우드로 이동합니다. AWS IoT 플랫폼을 사용하여 인터넷에서 '싱(Thing)'을 관리합니다.
디바이스 섀도우(Device Shadow)를 사용할 것입니다. 이는 싱의 상태 사본과 원하는 변경 사항을 포함합니다. 라즈베리 파이는 이 섀도우의 변경 사항('델타')을 발행하는 알림 피드를 구독합니다. 자세한 내용은 AWS IoT 플랫폼 및 API 문서를 참조하세요.
IoT 싱(Thing) 생성
AWS 콘솔에 로그인합니다. 계정이 없다면 무료 계정을 생성하세요.
우측 상단에서 미국 동부(버지니아 북부) 또는 EU(아일랜드) 리전을 선택하세요.
'IoT'를 검색하여 AWS IoT 서비스를 선택하고, Get Started 버튼을 클릭해 소개 튜토리얼을 닫습니다.
보안 정책 생성: Secure > Policies 메뉴에서 Create a Policy 클릭 후 다음 정보 입력:
Name: LightStripPolicy
Action: *
Resource: *
Effect - Allow: 체크
Create 클릭
IoT 싱 생성:
Manage > Things 메뉴에서 Register a Thing > Create a single thing 클릭
Code Editor 버튼 클릭 후 LightStrip/alexaskill/lightstrip_skill.json 파일 내용 붙여넣기
Save Model > Build Model 클릭 (수 분 소요)
Skill Information 버튼으로 설정 페이지 복귀
Configuration 메뉴에서:
Service Endpoint Type: AWS Lambda ARN 선택
앞서 기록한 Lambda 함수 ARN 붙여넣기
기본값 유지 후 Save 클릭
알렉사 스킬과 Lambda 함수 연결
Lambda 함수 페이지로 돌아가 우측 Add triggers 목록에서 Alexa Skills Kit 선택
설정:
Application Id: 앞서 기록한 Skill ID 입력
Add > Save 클릭
완료 및 테스트
프로젝트가 완료되었습니다. 다음 음성 명령으로 테스트해 보세요:
"Open Light Strip"
"Turn on"
"Set brightness to 20 percent"
"Set brightness to 50 percent"
"Set color to red"
"Set color to turquoise"
"Turn off"
"Run an exciting animation"
"Run a relaxing animation"
더 고급 상호작용도 가능합니다:
나: 알렉사, Open Light Strip
알렉사: LightStrip에 오신 것을 환영합니다 - LED 스트립이 파란 빛으로 빛납니다
나: 애니메이션 실행해줘
알렉사: 편안한 애니메이션을 원하시나요, 신나는 애니메이션을 원하시나요?
나: 편안한 걸로
알렉사: 알겠습니다 - LED 스트립에 무작위 애니메이션이 표시됩니다
나: 다음 애니메이션
알렉사: 알겠습니다 - 또 다른 무작위 애니메이션이 표시됩니다
개선 및 확장 아이디어
부팅 시 자동 실행
lightstrip.py 스크립트가 부팅 시 자동으로 시작되도록 설정하면, 라즈베리 파이 전원 켤 때마다 수동 실행할 필요가 없습니다. systemd 서비스나 crontab @reboot를 활용하세요.
애니메이션 추가 및 조정
Light Strip 스킬에는 이미 20가지 애니메이션 변형이 정의되어 있습니다. ALA 라이브러리를 사용하면 애니메이션 프리셋, 색상 팔레트, 속도를 조합해 나만의 애니메이션을 쉽게 만들 수 있습니다. ala_controller.py 스크립트 80번째 줄 부근의 애니메이션 설정 리스트를 수정하거나 확장하세요.