Category (Click)
개발보드 덕질하기

Arduino Nano Matter 핸즈온 리뷰 & DHT11 예제 (feat. Home Assistant)

 차완기 - @6/12/2024, 1:52:00 AM

정답은 역시나 Matter.

LEXON MOD 프로젝트 중 일부 [링크]
평소 꿈이였던 스마트홈을 Home Assistant(이하 HA)를 통해 점점 실현해나가고 있는 요즈음입니다.
시중에서 돈으로 구할 수 있는 여러 센서들, 스위치들을 집안에 흩뿌리고 있는데요, 최근 들어서는 PCB부터 펌웨어까지 직접 만든 커스텀 IoT 기기를 HA에 연동시키는 재미에 빠져있습니다.
이러한 DIY 기기를 만들 때 마다 항상 고민되는 부분이 있는데요, 바로..
"통신은 어떻게 하지..?"
.. 였습니다.
HA에서 스마트 장치를 연결하기 위해 주로 사용하는 프로토콜에는 Wi-Fi 장치의 경우 MQTT, 저전력 장치의 경우 ZigBee 정도가 있습니다.
시중의 대부분의 IoT 기기는 이러한 방식으로 쉽게 사용할 수 있는데요, 문제는 DIY 기기들입니다.
MQTT를 사용하기에는 너무나도 많은 전력 소비와 골치아픈 JSON 처리에 머리부터 아파오고, ZigBee를 사용하기에는 MCU에서 ZigBee를 함께 지원하는 사례가 드물다 보니 깔끔하게 무언가를 만들기는 어려운 것이죠.
ESPHome을 어디다가 버려뒀냐고 이야기하신다면.. 편하게는 못사는 똥..믈리에라 그렇습니다 🫠
LEXON MOD 프로젝트 중 일부 [링크]
Rack Out of Dust 프로젝트 중 일부 [링크]
개인적으로 디버깅이 어려운 아두이노 개발환경인 아두이노 프레임워크를 불편해 하다 보니 ESP32의 공식 개발환경인 ESP-IDF에 손을 대보거나, 최근 들어서는 ZigBee를 지원하는 SoC(MCU)인 nRF52840을 역시나 공식 개발환경인 nRF Connect SDK에서 사용하게 되었습니다.
나름 두 프로토콜을 깊?게 사용해보며, 두 방법의 장단점을 분석해봤는데요,
우선 MQTT의 경우 네트워크 연결이 상당히 골치아팠습니다. 흉측한 이더넷 포트를 연결할 수는 없으니 보통 Wi-Fi를 사용하는데요, AP의 SSID와 패스워드를 하드코딩하는 것은 아름답지 않아(?) BLE로 접속 정보를 가져오도록 하는 편입니다. 안그래도 JSON 처리때문에 머리가 아픈데 BLE까지 신경써야하니 너무 번거로운것이죠.
한편, ZigBee는 주위의 열린 ZigBee 네트워크에 연결되는 방식이기 때문에 네트워크 연결에 신경을 쓰지 않아도 되는 편입니다. 그나마 복잡한 ZCL도 한 번 이해한다면 그 다음부터는 정말 편리하게 써먹을 수 있죠.
여기까지만 보면 ZigBee가 정말 좋아 보이지만, 문제는 그 다음입니다. HA에서는 ZigBee를 직접적으로 지원하지 않다 보니 ZigBee를 HA에서 친숙한 프로토콜인 MQTT 등으로 바꾸어 주는 게이트웨이를 사용해야 하는데요, 제가 주로 사용하는 Z2M은 DIY 장치를 만들 때 마다 이에 대한 정의 파일을 만들어야 해 이것이 여간 번거로운게 아니였습니다.
아니 그냥 QR 찍으면 뙀! 이거 안 돼?
애플이 정말 잘하는거 있잖아요.. 그냥 QR만 찍으면 알아서 해주는 프로토콜은 없을까요?
Wikipedia - Matter logo.jpg [링크]
짜잔~ 그 정답 바로 여기 있습니다
이미 지난 포스팅에서 Matter를 사용해야 하는 이유를 다룬 적이 있는데요, Matter에 대해 아주 간단히 이야기하자면 “여러 프로토콜을 지원하고, 제조사끼리 통합되며, 가장 편리한” 프로토콜(또는 표준)입니다.
자세한 내용은 위 포스팅을 참고해보세요!

Arduino Nano Matter

너무나도 행복한 나머지 서론이 길었네요
1달 쯤 전인 지난 5월 7일, Nano Matter의 프리뷰 버전이 출시되었다는 소식을 듣고 얼른 구매했습니다. 지금 와서 보면 정식 버전도 아닌걸 도대체 3개나 사서 어디에 쓰겠다는 건지 싶습니다 ㅋㅋㅋㅋ..
다음날인 8일 발송되어 잠시 설래었지만, 무려 3주간 미국을 여행하다가 5월 말이 되어 받아볼 수 있었습니다. 엄청나게 찌글어진건 덤..이구요.
보이시나요? 이 영롱한 Matter 마크!!
Matter 마크는 볼 때마다 멋지다는 생각이 듭니다. 참 잘만들었어요

사양 확인

언박싱을 하기 전..! Matter가 더 궁금하기는 하지만, 사양 정도는 확인해주는것이 예의겠죠 ㅋㅋ
간단히 정리해봤습니다.
Nano Matter Arduino docs - Board Architecture Overview [링크]
프로세서(SiP): MGM240SD22VNA
1x 32-bit Arm Cortex-M33 @ 78 MHz
802.15.4(Thread), Bluetooth LE 5.3 등
RAM: 256 kB
Flash: 1536 kB
GPIO: x22
PWM: x22
5개 채널 동시에 다른 주파수로 사용 가능
ADC: x22, 20 bit
D9, D10을 제외한 나머지 GPIO ADC 입력으로 사용 가능
DAC: x4, 8~12 bit
UART: x2
기본 Serial 객체는 USB Serial에 연결되어 있지만, 아두이노 우노(및 나노)와 다르게 0, 1번 핀은 Serial1로 분리되어 있음. 따라서 0, 1번 핀 USB 연결과 관련 없이 사용 가능.
I2C: x2
SPI: x2
SPI1은 0, 1번핀의 UART와 함께 사용할 수 없음.
기타
논리 전압: 3.3 V
외부 전원 전압: 5 V
GPIO 소싱(high) 전류: 40 mA
GPIO 싱킹(low) 전류: 28 mA

Pinout

Nano Matter Arduino docs - Pinout [링크]
최근에 아두이노에서 출시된 개발보드들은 대부분 기본 UART 객체인 Serial로 USB Serial(VCP)을 사용했는데요, Nano Matter는 UART0이 디버거의 USB to UART 브릿지를 통해 PC와 연결되어 있었습니다. 덕분에 0번, 1번 핀은 독립적인 UART1을 사용해 0, 1번 핀을 자유롭게 사용할 수 있을 것 같습니다.
STM의 Nucleo보드나 Nordic의 DK 등에서 자주 보던 방식이다 보니 조금 반갑네요 ㅋㅋ
MGM240SD22VNA 데이터시트 중 일부 [링크]
소소한 점으로 메인 IC인 MGM240SD22VNA는 SiP(System in Package) 형태인데요, 안테나가 내장되어 있다고 합니다. DIY 할 때 매인 SiP로 선정하면 선정하면 꽤 괜찮을것 같네요.
어..? 그러고 보니..
Arduino PRO Nicla Sense ME
야 너두?

Unboxing

항상 보던 아두이노의 구성품입니다.
앞서 짧게 언급한 바와 같이 제가 구매한 개발보드는 출시 초기의 “커뮤니티 프리뷰” 버전입니다. 프리뷰 버전임을 이야기하는 스티커가 뒤에 붙어있는데요, 너무 추노마크처럼..못생겨서 뜯어주었습니다.
그나저나 Renesas에 Silicon Labs까지 써먹는 지금까지도 Arduino의 Atmel 사랑은 어디 안가나봅니다. 디버깅 칩으로 SAMD11을 써먹었네요 ㅋㅋ
+
어떻게든 납땜없이 연결하려고 몸부림치다가 결국 납땜했습니다 ㅋㅋㅋㅋㅋㅋ

Matter 준비

Matter를 사용하기 위해서는 아래 환경이 강제됩니다.
IPv6 지원 내부망, 스마트폰
스마트폰 제조사의 보더 라우터
Matter는 IPv6를 기반으로 모든 패킷을 TCP/UDP로 전송합니다.
따라서 공유기에서 IPv6를 지원해야 하고, Matter 기기 연결을 위한 스마트폰 역시 IPv6를 지원해야 합니다. (IPv6 미지원 기기로 테스트했을 때 연결이 불가능했습니다)
다음으로 스마트폰 제조사의 보더 라우터가 필요합니다.
안드로이드의 경우 Google의 Nest 시리즈, 애플의 경우 HomePod 또는 Apple TV가 필요합니다. 저의 경우 Google Nest Hub 2를 이미 가지고 있었지만, 보유중인 안드로이드 스마트폰이 IPv6를 지원하지 않아 Apple HomePod mini를 구매했습니다. 이중지출

DHT11 Matter 온습도 센서 예제

아두이노에서 제공하는 Matter 기본 예제를 참고해 간단한 온습도 센서 예제를 만들어 보았습니다.

결선

Nano Matter
DHT11
3.3V
VCC
GND
GND
D13
OUT

예제 코드

예제 테스트

코드를 업로드한 후, 시리얼 모니터를 실행하면 링크 하나가 튀어나옵니다.
이 링크를 웹 브라우저에서 열아주면 QR 코드가 나오는데요, 이걸 스마트폰의 카메라 앱이나 Matter 장치 추가 버튼 등을 통해 인식시키면 Matter를 통해 연결이 진행됩니다.

Home Assistant 연결

만약 Home Assistant에 SkyConnect와 같은 Thread 지원 장치가 있다면 다른 플렛폼에서 추가한 Matter 장치를 공유받을 수 있습니다.
공식 문서를 참고해 타사의 보더 라우터들이 선호하는 네트워크로 설정되었는지 확인한 후,
스마트폰의 스마트홈 어플리케이션에서 Matter 장치 옵션을 연 후 장치 공유를 위한 코드를 받아 메모합니다.
그 후 Home Assistant로 돌아와 기기 및 서비스통합구성요소 추가하기Matter 기기 추가이미 사용 중 입니다 → 코드 입력
정상적으로 등록되면 위와 같이 다른 플렛폼에서 등록한 Matter 장치가 HA에도 등록됩니다.

마치며..

도대체 Matter는 언제 공개되고 상용화가 될 지 항상 궁금했었는데요, 문득 정신을 차린 지금 아두이노에서 Matter를 지원할 만큼 제가 모르던 사이에 계속 무언가가 진행되고 있었던 것 같습니다.
예제를 작성하며, Arduino의 기본 Matter API가 꽤나 쉽게 나왔다는 생각이 계속해서 들더라고요. 간단한 DIY 용도라면 Arduino Nano Matter가 딱일 것 같습니다
Nano Matter를 통해 Matter에 대한 개념을 조금 더 익힌 후, 본격적으로 nRF Connect SDK를 활용한 Matter 개발을 시작해 보겠습니다..!