ESP8266 모듈을 사용한 IoT 보드 제작기 – 1

예전부터 IoT 스위치를 하나쯤 만들까 하는 생각은 계속 하고 있었지만, 실제로 행동에 옮긴 것은 이번이 처음이다.

해외에서 유명한 Wemo나, 국내 통신사들이 판매하고 있는 스위치들의 경우, 스위치 본체만 필요한 것이 아니라 대부분 Base Station을 필요로 한다. 쉽게 이야기해서 중간에 메세지를 처리해 줄 Message Broker를 사용자의 환경에 설치해야 한다는 단점을 가진다는 것이다.

거기에 더해 Broker와 Client 사이의 통신을 E2EE(End-to-end encryption)로 처리하지 않아 평문으로 정보를 보내는 경우도 왕왕 있었다. 물론 개인 사설망에서 폐쇄된 네트워크를 사용한다면 문제가 없겠지만, 내 정보가 남에게 유출될 수 있는 MITM(Man-in-the-middle) 공격의 기능성이 0%라고 할 수는 없다.

위와 같은 두 가지 문제점 때문에 나는 Google IoT Core를 사용했다. Google IoT Core는 트래픽양을 기준으로 250MB 미만은 요금을 부과하지 않아 위와 같은 목적으로 개인 사용자가 간단한 프로젝트에 이용하기에 적합하다.

또한 IoT Core의 Message Broker와 Client 사이에 E2EE 연결을 설정하기에도 간편하고, 무엇보다도 가정에 설치하는 Base Station보다 훨씬 신뢰성이 높다.
사용자가 스위치를 조작함에 있어 기존 상용 제품들은 스마트폰 어플리케이션을 이용하는 방식을 활용하였는데, 이는 귀찮기도 하고(…) 무엇보다 앱의 UI/UX가 너무 구린 것이 많아서 Amazon Dash Button과 유사한 버튼 스위치를 하나 만들었다.
Github Repo

70 x 30mm (WxH)에 모든 부품을 구겨넣느라 패턴이 많이 더러워진 감이 없잖아 있지만, 일단 완성했다는 데에 의의를 두자.
버튼 스위치 보드에는 ESP8266과 보안 스토리지 IC인 ATECC508A, DS1337 RTC, AT42QT1010 Touch Sensor IC를 사용하였다.
NCV8161의 경우 3.3V LDO Regulator로, Quiescent Current가 약 18uA(Standby시는 0.1uA) 수준이라 저전력 회로에 적합하다. 버튼 스위치 보드의 경우 560mAh Li-Po 배터리를 사용하므로 IC들의 대기전류 소모량을 통해 계산해본 결과 약 100uA이므로, 배터리의 자가방전전류까지 포함한다면 약 서너 달은 너끈히 충전 없이도 사용 가능할 것이다.
RTC가 들어간 덕에 ESP8266을 주기적으로 킬 필요가 없어졌다(내장 RTC를 사용할 경우 정밀도도 떨어지고, 무엇보다도 deepsleep 기능을 이용하면 오버플로우로 인해 약 35분 간격으로 깨어나게 된다).

펌웨어로는 Mongoose OS를 사용했는데, 영 Documentation이 잘 기술되어 있지 않아 고생을 좀 많이 했다.
OS에서 제공하는 라이브러리를 사용하게 되면 PWM Max Frequency가 10kHz로 고정된다거나 하는 문제가 있어 Espressif에서 제공하는 RTOS SDK의 라이브러리를 사용하였다.

아직 PCB가 도착하기 전이므로, 도착 후 제작 이후에 내용을 추가할 예정이다.