스마트홈1. Wemos D1 mini DIY LED 구글어시스턴트로 음성제어하기 – Raspberry Pi 4B, Home Assistant, ESPHome

Wemos D1 mini와 같은 ESP8266 보드로 DIY 기기를 만드는데 관심을 가지고 있었고, 자연스레 이 기기들을 연동시켜 사용할 수 있도록 스마트홈을 구축하고 싶어졌다. 작업한 내용을 내가 참고할 겸, 비슷한 작업을 하실 분들에게 도움이 되지않을까 싶어 정리해둔다.

Part 1. Home Assistant 설치

스마트홈 서버로 사용할 라즈베리 파이(4B 4GB)를 구입했다. 좀 시끄럽더라도 쿨링이 잘 되는 걸 선호해서 팬이 달린 케이스도 같이 구입. 유튜브에 영상들을 몇 개 봤는데 Home Assistant가 공짜고 기능도 좋아보여서 선택.

설치방법이 친절하게 나와있는 installation guide를 따라 삼성 evo plus 128GB 마이크로SD카드에 이미지를 올리고 USB에 네트워크 설정 파일을 넣어서 첫번째 부팅을 시행. 첫 부팅에 설치가 진행되고 최대 20분까지 걸린다고 한다.

https://www.home-assistant.io/getting-started/

공유기에서 내부 IP 접속 목록을 보니 homeassistant라는 녀석이 새로 생겼다. 해당 IP:8123 이라고 브라우저에 치니 설치에 성공한 것 같다! (octoprint 설치할때는 엄청 고생했는데 이건 쉽게 되네)

기본 정보를 모두 입력하니 아무것도 없는 대시보드가 뜬다! 이제 IoT 기기들을 하나씩 연결시켜나갈 예정.

Part 2. ESPHome으로 Wemos D1 mini 버튼에 연결

Wemos D1 mini는 ESP8266 칩을 이용하기 때문에 Home Assistant와 연동시키기 위해서 능력자분이 만든 ESPHome 애드온을 HA에서 설치해준다. Supervisor -> Add-on Store -> 목록에서 ESPHome 선택 후 설치

설치후 watchdog와 show in sidebar 활성화 시키면 왼쪽 사이드바에 ESPHome이 뜬다

우측하단 더하기 아이콘을 눌러 차근차근 따라가면 새로운 노드(하나의 Wemos 모듈을 노드라고 보면 됨)가 생성된다.

ESPHome이 말도 안되게 좋다고 느낀 점이 OTA(over the air) update가 가능하다는 것이었다. 지금까지 Wemos를 가지고 만지작 거릴 때 USB선으로 컴퓨터에 연결해 아두이노IDE로 코드를 컴파일해서 올리는 방식이었는데, 첫 플래시만 올려두면 이후 업데이트는 원격으로 된다!

1. 데이터 통신이 되는 USB 케이블을 찾는다. (충전용으로 나온 케이블들 중에 데이터 통신이 안 되는 게 많음. 꼭 확인!)
2. 라즈베리파이에 Wemos D1 Mini를 꽂는다
3. ESPHome 설치했던 화면에서 Restart 시켜준다.
이렇게 하고나면 우측상단에 연결방식 선택 옵션에 OTA 말고 USB 방식이 생긴다

연결 방식을 USB로 선택하고 업로드. 부팅이 잘 되었다는 메세지가 뜨면 이제 라즈베리파이에서 뽑아서 원하는 곳에 두고 전원을 꽂으면 된다.

시행착오 끝에 Input을 받는 가장 간단한 예제를 구성해봤다.
1) 택트스위치의 한 쪽을 Ground, 다른 한 쪽을 D1 핀에 연결
2) ESPHome에서 노드의 Edit을 눌러서 맨 아래에 binary_sensor 내용을 작성. 보드에 내장된 internal pullup resistor를 이용하므로 회로를 단순화시킬 수 있다.
3) 업로드

4) Configuration -> Integrations -> 해당 노드를 등록
5) 이제 첫화면으로 와서 대시보드를 수정하면 스위치를 볼 수 있다.

6) 체크하고 continue를 하면 스위치에 적절한 카드를 추천해준다. Add to lovelace UI 선택
7) 스마트홈의 첫번째 요소가 이렇게 만들어졌다! 버튼을 누를 때마다 실시간으로 On Off를 왔다갔다 하는 것을 볼 수 있다.
이렇게 여러가지 Input과 Output을 만들어놓으면 서로를 연결시켜 이용하는 방식

Part 3. Automation을 이용해 버튼을 누르면 구글홈 미니가 TTS를 이요해 말을 하도록 구성

구글 홈/네스트 미니를 이용해서 음성 알림을 보내는 기능을 만들어보려고 한다. 여기부터는 설정 파일을 좀 건들여야 하는 듯. 우선 File editor부터 설치하고 Start 시킨 뒤 Web UI로 들어가자

좌측상단의 폴더 모양을 누르면 파일 목록이 뜨고, 그 중에서 automations.yaml 파일을 선택. 어떤 조건이 충족되면 어떤 행위를 하도록 설정하는 파일이다.

trigger는 어떤 동작이 일어났을 때 실행시킬지를 지정하는 부분. state의 한 종류인 binary_sensor.orange_switch가 off에서 on으로 바뀌는 상황에 실행하도록 했다.
action은 어떤 행위를 할지. http://tts.google_translate_say를 이용할 것이고, kitchen_speaker에서 정해진 message를 말함

우측상단 빨간 저장 버튼을 누른 뒤에 톱니바퀴를 눌러 Reload automations를 실행시켜 변경된 내용이 적용되도록 한다.

결과물은 이렇게! 벝은 발음이 특이하네 ㅎㅎ

Part 4. Wemos 기반 LED를 Home Assistant에서 제어하도록 설정

이번에는 기존에 blynk와 ifttt로 제어하던 전등을 Home Assistant로 제어하도록 펌웨어를 변경할 차례. Wemos를 라즈베리파이에 연결하자

같은 방식으로 yaml코드를 만드는데, 앞에서 binary_sensor를 이용한 것과 달리 이건 릴레이를 이용해 LED를 껐다켰다 하는 녀석이니까 switch로 지정. GPIO핀을 이용해서 릴레이를 작동하는 방식이니까 플랫폼은 gpio. USB를 이용해 업로드

이렇게 해서 일단은 HA 어플을 이용해 폰으로 LED 등을 껐다켰다 하는 중. 다음 단계로 Google Home Mini에 대고 말하면 Google Assistant가 전등을 껐다켰다 하도록 만들어줄 예정이다.

CC BY-NC-SA 4.0 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Leave a Comment

Time limit is exhausted. Please reload CAPTCHA.