개요
결론적으로는 안드로이드 앱으로 ESP32와 연결된 LED를 켜고 끄는 아주 간단한 프로젝트입니다. 이번 프로젝트의 목표는 하드웨어를 제어하는 것이 아니라, 안드로이드 앱과 임베디드 시스템이 암호화된 웹 클라우드를 매개로 비동기적 통신 시스템을 구현하는 것이기 때문에 제어할 하드웨어 영역을 의도적으로 줄였습니다.
또한 단순한 장거리 통신은 WIFI를 사용하고 ESP32에서 HTTP 서버를 구축하여 구현할 수도 있지만, 아마존 웹 서비스(AWS)를 사용한 이유는 SDK에 보안과 통신을 담당하는 API가 이미 구현되어 있고, 또한 주요 언어, 플랫폼에 대해 제공되기 때문입니다. AWS C언어 SDK는 리눅스용이지만 ESP32 SDK에서 이미 포팅해서 제공하고 있었습니다. Android SDK 링크
제 블로그의 프로젝트 관련 포스트들은 모두 이용하는 제품이나 서비스에 대한 기본적인 이해를 가정하고 실제 구현을 목표로 하므로 기초적인 부분은 직접 공부해야 합니다.
처음엔 AWS IoT만 공부하면 될 줄 알았는데, AWS를 제대로 이용하려면 몇개의 서비스를 통합해야 하기 때문에, Cognito, IAM 등에 대해서도 공부하느라 약간 지연됐습니다. 이조차도 아직 잘 몰라서 계속 공부하는 중입니다.
어쨌든 전체적인 프로세스는 다음과 같습니다.
구성요소
1. ESP32-WROOM-32
2. 안드로이드 앱
3. 아마존 웹 서비스
1. ESP32 (Thing)
제어 대상에 연결되어 있고, 제어 대상의 최근 변경 상태를 자신의 non-volatile memory와 AWS IoT의 Thing Shadow에 저장합니다. 또한 Device Serial Number 기반의 토픽을 통해 명령을 수신(Subscribe)하고 결과를 송신(Publish)합니다. Shadow 업데이트, Publish, Subscribe는 모두 MQTT 프로토콜을 통해 수행됩니다.
2. 안드로이드 앱 (클라이언트)
회원가입->로그인->이메일 인증을 통해 가입된 사용가 ESP32 고유의 DSN과 default operation key를 등록했을 때만 AWS IoT를 통해 Thing에 접근할 수 있습니다. ESP32와는 반대로 DSN 기반의 토픽을 통해 명령을 송신(Publish)하고 결과를 수신(Subscribe)합니다. 역시 MQTT 프로토콜을 사용합니다.
3. 아마존 웹 서비스 (AWS)
Thing과 클라이언트 사이의 중재 역할을 합니다. 사실 Thing과 클라이언트는 서로 직접 연결되는 것이 아니라 AWS를 통해 비동기적으로 연결됩니다. 각 포스트에서 좀 더 자세히 설명하겠지만, 각 주체에 허용된 정책에 따라 토픽을 필터링 하여 적절한 주체에게 전달하는 역할을 합니다.
개발 순서
- 목적 / 요구사항 / 시스템 흐름
- 개발 환경
- ESP32 (1) : 시스템 흐름
- ESP32 (2) : MQTT 프로토콜과 정책, JSON 포맷
- ESP32 (3) : C언어에서 JSON 문서 분석하기
- ESP32 (4) : AWS_IoT_Client 객체
- ESP32 (5) : 콜백을 받기 위한 yield 함수
- ESP32 (6) : 기타 기능 및 소스 코드
- 어플리케이션 (1) : 시스템 흐름
- 어플리케이션 (2) : 정책 & 신뢰 관계
- 어플리케이션 (3) : CognitoCachingCredentialsProvider 객체
- 제어 어플리케이션 (4) : 보안 장단점, operation key를 사용한 이유
- 제어 어플리케이션 (5) : 소스 코드
동영상(주목해야할 점) 이메일 인증하고 회원가입하는 영상은 찍기 힘들어 뺐습니다.
- 최초 AWS IoT 서비스에서 사물 섀도우의 LED 상태를 true로 설정한 상태에서, LED Button(ESP32)과 컨트롤러(안드로이드 앱)는 AWS IoT에서 섀도우의 내용을 읽어온 후에 그 내용을 바탕으로 초기화를 수행한다.
- LED Button의 boot button을 누르면 LED가 토글되면서 AWS IoT의 사물 섀도우를 업데이트하고, 그 결과를 컨트롤러에게 발행(Publish)한다.
- LED Button 컨트롤러에서 ON/OFF 버튼을 누르면 LED Button이 토글되면서 AWS IoT의 사물 섀도우를 업데이트하고, 그 결과를 컨트롤러에게 발행(Publish)한다.
- LED Button 컨트롤러에서 operation key를 잘못 입력하면 LED Button는 구독한 명령을 무시해 버린다. 터미널과 LED Button 컨트롤러 메세지 창에서 확인 가능
- LED Button 컨트롤러에서 operation key 변경 과정
'프로젝트 > AWS LED Button (WIFI, AWS)' 카테고리의 다른 글
[AWS IoT 프로젝트] AWS LED Button 개발 환경 (0) | 2018.02.04 |
---|---|
[AWS IoT 프로젝트] AWS LED Button 목적 & 요구사항 & 시스템 흐름 (0) | 2018.02.04 |