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

아두이노에 Home Assistant 설치하고 LED 껐다켜보기 (feat. Arduino UNO Q)

 차완기 - @11/3/2025, 12:35:00 AM

아두이노 (Home Assistant 돌아감)

지난 포스팅에서 Arduino UNO Q를 간단하게 다뤄본 후 시간이 날 때 마다 응용해보기로 했습니다.
우선은 SBC인 이상 서버를 굴려야겠죠. 마침 GPIO도 있겠다 Home Assistant가 딱이겠습니다. 이번 포스팅에서는 아두이노에 Home Assistant를 설치(!!!)하고 내장된 GPIO를 활용해 LED를 껐다가 켜는 간단한 예시를 소개해보겠습니다.
라즈베리파이 일자리 한번 뺏어봅시다.

개요

UNO Q는 SBC파트와 MCU 파트로 나뉘어져 있습니다. (사실 MPU가 정확하지만 편의상 SBC라 하겠습니다) SBC 파트에서는 App Lab에서 만든 App의 Python 코드를 실행하고 RPC라는 징검다리를 통해 Python 코드와 MCU측 C++코드가 서로 통신합니다. 이때 SBC의 App은 각각이 Docker 컨테이너로 분리되어 실행됩니다.
일단 docker가 있으니 docker compose 방식으로 Home Assistant와 MQTT 브로커의 설치가 가능하고, SBC의 Python 코드에서 mqtt client로 브로커에 접속해 discovery를 날려주면 HA와 Python 코드 간의 통신이 가능합니다. Python 코드와 MCU는 RPC를 통해 연결되어 있으니 HA → MQTT → Python(SBC) → MCU 경로로 데이터를 던져줄 수 있습니다.

Home Assistant+MQTT 브로커 설치

그럴듯한 계획을 새웠지만 정작 HA가 설치되지 않으면 망해버립니다. (사실 망할뻔했습니다) 우선 HA가 잘돌아가는지 테스트해봅니다.
HA의 공식 자료를 참고해 Docker Compose yaml 파일을 만들고, docker compose up!
eMMC에 Wi-Fi 성능도 좋지 않은 만큼 한참 걸립니다.
이때 기도를 해야하는데요, 기도가 부족하면 16GB의 eMMC 공간이 부족해 설치가 불가능합니다.
기도가 간절했는지 저장공간 597MB 남기고 아슬아슬하게 실행됬습니다. 신이든 토발즈든 아무나 붙잡고 꼭 기도하세요.
{IP}:8123로 접속하면 HA UI가 보입니다. 야호!
펼쳐서 코드 보기
실행이 잘 되는 것을 확인했으니 꺼버리고 MQTT 브로커를 추가합니다. 저는 mosquitto를 사용했습니다. HA와 브로커를 하나의 네트워크로 묶어줘야합니다.
펼쳐서 코드 보기
다음으로 mosquitto 설정을 추가합니다. 너무나도 귀찮아서 패스워드 없이 로그인하도록 했습니다.
배포 때리고 mosquitto의 로그를 잠시 째려봅니다. 별 오류 없으면 HA로 넘어갑니다.
MQTT를 추가합니다. compose에서 같은 네트워크로 묶어줬기 때문에 IP 대신 컨테이너의 이름만 써주면 됩니다.
브로커에 잘 연결되었는지 간단히 테스트해봤습니다. 잘 되네요.

App 컨테이너-MQTT 브로커간 네트워크 연결

앞서 잠시 언급했듯 App Lab의 App은 Docker 컨테이너 위에서 돌아갑니다. 즉, MQTT 브로커 컨테이너와 소통하기 위해서는 네트워크로 묶어줘야합니다.
Arduino App Lab에서 만들어진 App 컨테이너의 네트워크(home-assistant_default)에 브로커(db356e147d1c)를 연결시켰습니다. 이름을 비슷하게 지어서 햇갈리네요 ㅋㅋㅋ.. 물론 그 반대로 앞서 만든 HA용 docker compose 네트워크에 App 컨테이너를 연결시켜도 괜찮습니다.
App 컨테이너에 들어가서 mosquitto 이름으로 접속이 가능한지 확인해봅니다. 컨테이너에 ping같은 명령어가 없어서 wget으로 확인했습니다.

SBC측 Python 코드 작성

그런거 없다고 합니다. UNO Q의 Debian trixie이 너무 최신이라 그런가봅니다 ㅋㅋ...
어쩔 수 없이 paho-mqtt를 활용해 쌩으로 discovery 구문을 날려주기로 했습니다.
펼쳐서 코드 보기
ChatGPT를 채찍질해 mqtt discovery쪽 코드를 뽑아냈습니다.

MCU측 C++ 코드 작성

펼쳐서 코드 보기
Blink 예제를 그대로 활용했습니다. 영상 촬영이 쉽도록 2번핀 LED를 켜도록 했습니다.
잘 되네요.

마무리

파업 직전;;;
UNO Q와 동일하게 Cortex-A53 쿼드코어 구성으로 만들어진 Home Assistant 하드웨어가 있듯이 UNO Q에서 HA를 굴리는건 큰 문제는 없었습니다. 딱 하나 eMMC 공간이 큰 문제였죠. 나중에 32GB 모델이 나오면 이 문제도 해결되지 않을까 합니다. 나중에 App Lab 브릭에 Home Assistant가 추가될지도 모르겠습니다.
물론 UNO Q에 HA를 설치해 사용하는데에 이점이 전혀 없기 때문에 ㅋㅋ.. 그냥 똥찍어먹어봤더니 배는 부르더라 뭐 이겁니다