이 노트에 대하여

HomeAgent를 꼭 큰 보드와 무거운 스택으로만 만들 필요는 없다는 질문에서 시작했다. 지금 이 노트는 그 질문이 자란 결과 — edgeagent-config 리포의 가든 대문이다. “나는 허브다”의 반대편, “나는 엣지다”라고 스스로를 말하는 작은 노드. ESP32·M5Stack 같은 값싸고 조립 가능한 몸에 살면서, 작은 카드 한 장으로 가족 에이전트들과 만난다. 스마트홈과 아이 교육 놀이가 겹치는 자리이기도 하다.

히스토리

들어가며 — “나는 허브다”에서 “나는 엣지다”로

homeagent-config 는 라즈베리파이5 급의 홈에이전트다. Go·Node.js·Linux·서비스· 오케스트레이션. 그게 허브(Hub) 다. 집 전체를 조율한다.

edgeagent-config 는 그 반대편이다.

  • 작은 리눅스 보드, ESP32급 / MCU에 가까운 디바이스
  • 몸이나 방에 붙은 센서와 액추에이터
  • Zig 지향 펌웨어와 저수준 에이전트
  • 기본값으로 다른 에이전트에게 말을 거는 노드
I am the Hub.  ->  I am the Edge.

허브가 집을 조율한다면, 엣지 노드는 세계에 더 가깝다. 몸에 센서 두 개가 붙어 있을 수도 있다. 관찰하고, 상태를 가지고, 이웃에게 말한다. 작은 노드도 에이전트다. 작은 카드도 카드다.

에이전트 생태계 속 자리 — 허브 · 엣지 · 장난감

이 리포는 “에이전트들이 서로 어떻게 만나는가”라는 더 긴 가족 대화의 MCU 쪽 실현이다. 그 대화는 관계의 거리에 따라 세 개의 동심원으로 그려진다. 정의하는 축은 매체가 아니라 관계 다.

  1. 안쪽 원 (가족) — 이미 정체성과 작업 기억을 공유하는 에이전트들. 형식적인 핸드셰이크가 없다. 관계가 프로토콜보다 먼저 있다. 매체는 공유 파일시스템, 공유 캘린더, 혹은 흘러가는 카드 방송 중 무엇이든 될 수 있다.
  2. 가운데 원 (핸드셰이크) — AgentCard식 소개(A2A)로 만나는 남의 에이전트.
  3. 바깥 원 (시민권) — 어느 플랫폼에도 속하지 않고 정체성을 증명하는 노드 (ANP / W3C DID). 먼 미래.

세 자매 리포가 이 생태계에서 각자의 자리를 갖는다.

리포자리역할
homeagent-config허브라즈베리파이5집을 조율 (풍부한 매체: 파일·캘린더·REST/SSE)
edgeagent-config엣지ESP32 / M5Stack세계에 붙은 감각·표정 (얇은 매체: 카드 방송)
legoagent-config장난감 (교육)레고 SPIKE + ESP32 감각아이와 함께 만드는 살아있는 몸

homeagent 는 풍부한 매체(공유 파일·캘린더·배선)로 안쪽 원에 있고, edgeagent 는 얇은 매체로 안쪽 원에 있다 — 가족의 파일시스템을 읽거나 쓸 수 없으니, 자기를 설명하는 작은 카드를 방송해서 합류한다. 소속은 같고, 운반체만 다르다. legoagent 의 장난감은 그 엣지가 몸을 입은 한 형태다 — 장난감이 곧 에이전트다.

설계 자세 — 작은 노드도 에이전트다

엣지 노드는 멍청한 주변장치가 아니다. 합성 정체성(칩 MAC 역할+하드웨어 프로파일), 한곳이 소유하는 로컬 상태, 타입을 가진 시간 모델, 이벤트 입력과 출력 행동, A2A 통신, 관찰 가능한 건강, 그리고 카드를 통한 자기서술 을 가진 작은 에이전트다.

4계층 모델 — 아키텍처가 곧 선언문

Layer 4. Transport (교체 가능)   ESP-NOW · MQTT · BLE · CoAP — 봉투를 나를 뿐, 카드를 모른다
Layer 3. A2A Contract (순수)     NodeCard · Capability · Event · Output ack — 표준 봉투
Layer 2. State Machine Core      transition(state, event, now_ms) -> (next, actions[])  ※ Zig, 하드웨어 무관
Layer 1. Board Init / HAL        부팅·클럭·GPIO·주변장치. 콜백은 이벤트를 낳고, 출력은 핀을 흔든다
Layer 0. Hardware                ESP32-WROOM, ESP32-CAM, ESP32-S3 …
  • 코어는 자기가 어떤 보드 위에서 도는지 모른다.
  • 새 보드는 새 Layer 1 + 새 StaticProfile만 더한다. 코어는 절대 바뀌지 않는다.
  • 전송로는 교체 가능하다. 계약은 아니다.

자판기(vending machine) 비유

그 에이전트의 모양은 자판기 다. 같은 동전 → 같은 캔. (state, event, now_ms) 위의 순수 전이 함수, 숨은 곁가지 없음, 시계는 곁효과가 아니라 명시적 인자. 상태 소유자 하나, 루프 하나. 매 틱(기본 100ms)마다 “지금 내 상태는? 지금 무엇을 해야 하는가?”를 스스로 묻고 한 프레임 안으로 일을 가둔다.

NodeCard, 한 문단으로

모든 노드는 카드로 자기를 말한다. 카드는 세 부분이다. StaticProfile 은 부팅 동안 안정적이다 — 일부는 컴파일타임 상수(보드 패밀리, 펌웨어 id), 일부는 보드 초기화 때 하드웨어 식별 레지스터에서 한 번 읽는다(eFuse의 MAC, 칩 리비전, 플래시·PSRAM 크기). RuntimeCapability 는 지금 이 순간 노드가 실제로 할 수 있는 일을 반영한다(현재 모드, 켜진 주변장치, 점유한 GPIO). Health 는 타입을 가진 단조 업타임, 부트 에폭, 내부/PSRAM 여유 메모리, 마지막 에러, 마지막 A2A 접촉 이후 경과를 담는다. 카드는 코어가 짓는다. 보드는 자기를 전송로에 직접 직렬화하지 않는다.

어떤 몸에 사는가 — ESP32 / M5Stack 라인업

엣지 코어가 들어가 살 수 있는 작은 몸들. (브링업이 검증된 보드 카드는 리포의 BOARDS.md 에 한 보드당 한 장으로 쌓인다. 아래는 그 후보 라인업.)

M5Stack 라인업

CoreS3 (풀 스펙, 59.90 달러)

항목사양
SoCESP32-S3 Xtensa LX7 듀얼코어 240MHz
Flash/PSRAM16MB + 8MB
디스플레이2.0” IPS 320×240, 정전식 터치
카메라0.3MP GC0308
마이크/스피커듀얼 마이크 (ES7210) + 1W (AW88298)
센서BMI270 6축 IMU, BMM150 지자기, 조도/근접
연결Wi-Fi 2.4GHz, BLE, USB-C OTG

AtomS3 (7.50 달러)

초소형(24×24mm). ESP32-S3, 0.85” 128×128 LCD, 8MB Flash + 2MB PSRAM. 가장 저렴한 ESP32-S3 보드. 센서/입출력은 Grove 포트로 확장.

StickC Plus2 (12.45 달러)

ESP32-S3, 1.14” IPS 135×240, 적외선 송신기, 부저, 배터리 120mAh. TV/에어컨 리모컨 대체 가능.

M5GO / TimerCamera 계열 (legoagent 쪽에서 본 눈·표정)

M5GO는 표정·소리·자세를 맡는 두뇌(카메라 없음), TimerCamera X / Unit-CAM은 GROVE 계열 ESP32 카메라 이다. 모두 ESP32 + Wi-Fi 영상이라 앱은 MJPEG/HTTP 스트림 한 경로로 어느 눈이든 받는다. 자세한 검토는 §legoagent-config 의 2026-05-29 기록 참조.

아이용 AI 친구 — 프로젝트 가능성

구성안 A: CoreS3 기반 (60 달러)

CoreS3 단독으로 마이크 스피커 디스플레이+Wi-Fi 내장. Wake word → Wi-Fi → 서버(RPi5/NUC) → LLM → TTS → 스피커. 얼굴 표정 LCD에 표시, 터치 반응.

구성안 B: AtomS3 + 외부 마이크/스피커 (30 달러)

AtomS3 + I2S 마이크(INMP441 3 달러) + PAM8403 앰프+스피커(~5 달러). 디스플레이 작지만 이모지/상태 표시 가능. 최저가 구성.

구성안 C: M5Stack Dial (15 달러)

로터리 엔코더 + 1.28” 라운드 LCD + ESP32-S3. 스마트홈 컨트롤러로 가장 자연스러운 UI. Matter 디바이스 직접 제어 가능.

ESP32와 Matter

ESP-IDF v5.4+에서 Matter SDK 공식 지원. ESP32-S3/C6/H2 모두 Matter 디바이스 구현 가능. Thread(802.15.4)는 C6/H2만, S3는 Wi-Fi Matter만. HomeKit도 esp-homekit-sdk로 가능하나, Matter가 미래 표준.

Edge AI 한계

ESP32-S3에서 TinyML(TensorFlow Lite Micro) 가능하지만, LLM은 불가 (RAM 8MB). 키워드 감지(wake word), 제스처 인식 수준. 실제 LLM 추론은 반드시 서버(RPi5/NUC/GPU)로 오프로드.

결론 — 시나리오별 추천

시나리오추천비용
아이용 AI 친구CoreS3 + NUC 서버60 달러 + 기존 인프라
스마트홈 컨트롤러M5Stack Dial15 달러
최저가 실험AtomS3 + I2S 마이크30 달러
Matter 네이티브ESP32-C6 DevKit10 달러

로드맵 한눈에

펌웨어가 존재하기 전에 프로덕션 교훈부터 지킨다. 동심원 생태계에 단계를 얹는다.

  • Phase 0 — 멀티보드 브링업 (아키텍처 바깥). 샘플 코드에 끌려가지 않고 보드를 익힌다.
  • Phase 1 — 펌웨어 전에 엣지 불변식. 시간 축·자기서술·전송 교체성을 못 박는다.
  • Phase 2 — 호스트에서 테스트 가능한 최소 코어 (ESP-IDF 의존 없이).
  • Phase 3 / 3.5 — 한 보드 위 첫 펌웨어 → 같은 코어를 다른 보드에서 (Layer 1 + StaticProfile만 차이).
  • Phase 4 — 첫 진짜 엣지 몸 (센서를 Event로, 액추에이터를 Output으로).
  • Phase 4.5 — 호스트 마스터 ↔ 단일 엣지. 라디오·허브 없이 “엣지가 살아난다”를 먼저 본다.
  • Phase 5 — A2A 전송 1: ESP-NOW 브로드캐스트 (라우터 없이 가족 안에서 인사).
  • Phase 6 — A2A 전송 2: 허브를 통한 MQTT 미러 (안쪽 원 → 가운데 원). 여기서 a2a SDK가 허브에 마운트된다.
  • 먼 미래 — 바깥 원 시민권 (MCU 크기의 DID).

전체 단계 정의는 리포의 ROADMAP.md 가 SSOT다.

더 읽기 / 관련 노트

리포 문서

자매 노트

배경 노트