Blynk는 최고의 IoT DIY 플랫폼이지만, 스마트홈은 글쎄..?
지난번에 스마트홈 관련 글을 쓰다 말아서, 뭔가 죄송스럽게 되었습니다. 그렇게 되어 버린 이유로 일단은 군대라는 특수한 환경 핑계를 대겠습니다. 그런데, 더 이상의 글을 포스팅하지 않은데는 사실 더 큰 이유가 있습니다. Blynk를 쓰다보니 커스터마이징이 어려워 제 스마트홈 프로젝트에 완벽하게 부합하지 않았습니다.
물론 Blynk는 대체가 어려운 최고의 IoT 플랫폼이라는 데는 동의합니다. 그러나 장치들끼리 유연하게 연동되어 작동하는 그런 형태의 IoT와는 조금은 거리가 있습니다. IoT를 일차원적으로 원격제어 / 모니터링 용도로만 사용하신다면 아주 좋습니다. 그렇지만 거기까지입니다.

A부터 Z까지, 스마트홈 플랫폼을 구축해보기로 한다.
초기 계획은 Raspberry Pi + MQTT 를 활용해서 구축을 하는 거였습니다. 그러나 모종의 이유로 MQTT를 공부하기 전에 ROS라는 걸 먼저 접했습니다. ROS는 MQTT와 비슷한 역할을 하는 친구입니다. 둘 다 노드를 기반으로 통신을 중계하는 프로그램 / 프로토콜 / 플랫폼의 개념입니다.

MQTT와 ROS의 차이점
MQTT는 IoT 부문에서 상당한 입지를 가지고 있습니다. 노드와 토픽 기반 통신 프로토콜을 제공하는 동시에 IoT 관련 기능에 좀 더 특화되어 있습니다. ROS는 이름이 일단 Robot Operating System의 약자입니다. 로봇 제어에 특화되어 있어, 로봇 작동을 제어하고, SLAM, 매핑, 시뮬레이션을 위한 각종 툴들을 제공합니다. 각자 지향하는 바가 다를 뿐이지 플랫폼으로서의 역할 자체는 비슷합니다.
High-Level Language, Low-Level Language.
스마트홈 프로젝트를 한다면 MQTT를 고르는 편이 어떤 면에서는 조금 더 현명해보입니다. 그렇지만 개인적으로는 ROS가 이것 저것 구현하기 쉽고, 익숙하고, 연식이 좀 더 된만큼 커뮤니티 규모도 더 크기에 굳이 ROS를 고르게 되었습니다. 프로그래밍 언어로 비교하자면 MQTT가 IoT에 특화되어 필요한 기능을 빠르게 구현할 수 있는, 파이썬같은 고급 언어 격입니다. ROS는 조금은 복잡하지만 원하는것을 더 잘 구현할 수 있는 저급 언어, C언어정도로 보면 되겠습니다.

ROS로 IoT 스마트홈 구현이 가능한 이유.
ROS가 IoT 스마트홈 구축 플랫폼으로도 기능할 수 있는 가장 큰 이유는 ROS가 이기종 디바이스 간의 통신을 지원하기 때문입니다. 이기종 디바이스 간의 통신이란 장치의 OS가 달라도, 장치의 프로세서가 달라도, 그들 간의 통신이 가능함을 뜻합니다. ROS는 리눅스에서, 웹에서, 심지어 아두이노에서도(제한적으로) 작동합니다. 이와 같은 특성은 IoT 스마트홈을 구축하기 위해서는 필수입니다. 만약 이기종 디바이스간 통신이 지원되지 않는다면 단순히 WiFi로 온도 값을 보내는 모듈을 구현하기 위해 리눅스가 돌아가는 시스템을 사용해야 하는데, 온도 값을 뿌려주는데 그 정도 사양의 하드웨어는 필요치 않습니다. 따라서 ROS로도 무리없이 IoT 스마트홈을 구현할 수 있겠습니다.
목표
우선 ROS로 스마트홈 구축하기 프로젝트는 거창한 계획을 가지고 있습니다. 달성할 목표를 하위 수준부터 나열해보도록 하겠습니다.
1. ROS로 조명 및 공조 시스템 제어하기 : 현실적인 목표입니다. 우선 하드웨어 자원이 많지 않아도 이정도까진 구현할 수 있을 것으로 보입니다. 웹서버를 구축해 플랫폼에 관계 없이 제어할 수 있도록 하겠습니다. 웹에서 제어를 할 수 있게 되면 PC, 태블릿, 스마트폰(안드로이드, iOS) 모든 환경에서 접근이 가능해집니다. 웹을 이용하면 윈도우 프로그램, 안드로이드/iOS 앱을 추가로 구현해야 할 필요가 없습니다.
2. 출입 통제 시스템 구현하기 : 이 스마트홈 시스템을 적용하고자 하는 곳은 1층 단독주택입니다. 대문에 아두이노를 장착해 자동문을 구현해보겠습니다.
3. CCTV + 침입자 감시 및 알림 구현하기 : 이부분이 가장 어렵습니다. 딥러닝 기반 사물인식(Object Detection)을 수행해야 하는데 제가 생각해둔 하드웨어들의 성능이 사물인식을 실시간으로 해낼 만큼 뛰어나지 못합니다. 라즈베리파이 + 구글 코랄(Google Coral)을 이용하면 성능이 낫다고는 하는데.. 일단 3단계 목표는 1, 2단계를 하며 생각해보겠습니다.
구성 계획
ROS IoT 스마트홈 프로젝트를 시작하기 전에 큰 목표를 소단위로 나누어 단계별로 구현해보겠습니다. 구현 단계는 목표에서 언급했듯 크게 3개의 Phase로 나누어집니다. 쉬우면서 필수적인 기능들을 먼저 구현하고, 어려우며 옵션의 느낌이 강한 기능을 후에 구현하겠습니다.
Phase 1 | ROS로 조명 및 공조 시스템 제어하기
1. 리눅스에서 ROS 환경 세팅하기
2. ROS 웹 Dashboard 구현
3. ROS와 웹 연동
5. ROS와 NodeMCU(ESP8266, ESP-12)연동
7. NodeMCU를 위한 모듈 설계하기
6. ROS로 NodeMCU 제어하기
8. 루틴 만들고 설정하기
Phase 2 | 출입 통제 시스템 구현하기
1. 웹 Dashboard 기능 추가(주거 상태 설정)
2. 침입자 발생시 사이렌 울리도록 구현
3. 대문에 보안 옵션 장착 후 ROS 연동
4. 크롬 알림 기능을 통해 침입자 감시 알림
Phase 3 | CCTV + 침입자 감시 및 알림 구현하기(안할 수도 있음)
1. 설치된 CCTV에서 값 받아오기 or 웹캠 CCTV 구현
2. OS에서 YOLO 사물인식(Object Detection) 을 통해 침입자 식별하기
3. 크롬 알림 기능을 통해 침입자 감시 알림 기능 추가
마무리
블로그에 올리는 모든 건 제 본업이 있는 상태에서 진행하는 프로젝트이다 보니 포스팅이 수월하지 않을 수 있습니다. 포스팅의 텀이 굉장히 길어질 순 있지만, 그게 포스팅 중단을 의미하는 것은 아닙니다. 인내심을 가지고 지켜봐 주시면 저도 최대한 제 프로젝트를 여러분과 공유하기 위해 노력하겠습니다. 감사합니다.
긴 글 읽어주셔서 감사합니다.
글이 도움이 되셨다면 왼쪽 아래의 공감버튼과 광고 클릭 부탁드립니다. 고마움을 표현할 수 있는 가장 쉬운 방법입니다.
질문이 있으시다면 댓글 남겨주세요. 실시간으로 답변 드리겠습니다.