취미/삽질

구글홈과 자작 IoT 기기 연동하기 (1)

Nix. 2022. 2. 7. 01:46

이사한지 1달쯤 되고나니 예전부터 해보고 싶었던 자취방의 완전한 IoT화를 해보고 싶어졌다.

구글홈을 불러서 불도 껐다켰다 하고, 아침 알람과 함께 블라인드도 알아서 걷어주고, 보일러나 에어컨을 집에 들어가기전에 미리 밖에서 작동시킨다던가, 온습도나 미세먼지 센서랑 연동해서 가습기랑 공청기를 돌린다거나....

솔직히 좀 움직이면 되는거라 별로 쓸 데는 없을 것 같은데 완성하면 간지는 날 것 같다.

집에서 쓰고 있는 구글 홈 미니

 

서버 셋팅 방법

다음과 같은 방법을 고려해 보았다. 내가 택한 방법은 2번.

  1. Firebase 서버 (구글 오피셜)
    • https://developers.google.com/assistant/smarthome/codelabs
    • Smart Home Washer 예제를 참고하면 좋을 것 같다. 구글 홈이 바로 Firebase에 연결되기에 IFTTT가 불필요하다. 와이파이 디바이스가 Firebase 서버에 접속해서 변수 변화를 감지하여 작동한다.
  2. IFTTT + 개인 웹 서버
    • IFTTT로 개인 웹서버에 GET 또는 POST 메시지를 보내 변수를 변경하고, 와이파이 디바이스가 해당 웹서버에 접속해서 변수 변화를 감지해 작동한다. 나는 이미 내 서버가 있어서 Firebase 프로젝트 생성하기 귀찮아 이 방법을 택했다.
  3. IFTTT + 로컬 디바이스 서버
    • 와이파이 디바이스에서 MicroPython을 활용해 로컬 서버를 열고 IFTTT가 해당 서버로 메시지를 보내는 방법이다. 별도의 서버가 필요 없는 점이 유리하지만, 아무래도 전력 소비가 좀 더 클 것으로 예상해 배터리로 작동하기는 곤란할 것 같다.
  4. IFTTT + Blynk
    • IoT를 위한 서버를 제공해주는 서비스인 것 같다. 아래 adafruit도 비슷한듯.
  5. IFTTT + Adafruit IO

 

시스템 설계

  1.  서버
    • IFTTT + 개인 웹서버
  2. 허브
    • 와이파이 기능을 갖춘 ESP8266 MCU와 RF통신 모듈을 포함한다.
    • 항상 전원에 연결되어 있다.
  3. 디바이스
    • RF통신 모듈로 허브와 통신해 명령을 수행한다.
    • 배터리로 작동한다.

허브를 둬서 다소 번거로운 구조인데, 전력 문제로 이렇게 설계하였다. ESP8266의 와이파이 기능을 활성화할 시, 18650 배터리가 하루이틀만에 방전될 정도다. 일정 간격으로 센서를 읽어서 서버에 올리고 바로 다시 절전모드로 대기할 수 있는 기기가 아니라, 실시간으로 명령에 반응해야하는 IoT 기기면 아무리 머리를 굴려봐도 계산이 안 나온다. (스위치봇은 건전지 하나로 몇 달씩 간다는데 대체 어떤 방법을 쓰는지 의문이다....)

 

MCU 선정

  1. 허브용 ESP8266 (와이파이 기능 탑재)
    • ESP-12F : ESP-01은 GPIO핀이 하나뿐이라 별로.. ESP-12, ESP-12E의 개선판이다.
    • NodeMCU : 좀 비싼데 usb 핀으로 쉽게 개발이 가능하다. 쓸데없는 칩이 전력을 더 먹으니, 개발용으로만 사용하고 실사용은 ESP-12F 추천.
  2. 디바이스용 AVR
    • ATTiny13A : software SPI 통신을 활용해 NRF24 RF통신 모듈을 조작한 대단한 사람이 있다. 1kb의 매우 작은 메모리의 한계로 인해 통용되는 SPI Library를 뜯어 진짜 핵심만 우겨넣어야 한다.... 할 수만 있다면 베스트.
    • ATTiny2313 : 13A보다 GPIO핀이 널널해 하드웨어 SPI 통신이 가능하고, 메모리도 늘어서 속이 시원해진다. 자존심을 조금 버리면 편해진다.

아두이노가 가장 흔하기는 한데, 개인적으로 용도에 딱 맞는 미니멀한 MCU를 쓰는걸 좋아해서 AVR을 선택했다.

 

 

암튼 이제 부품 선정하고 준비하는 단계라 좀 더 진행되면 다음 포스팅을 할 생각인데, 바빠서 좀 늦어질수도...