이 노트에 대하여
HomeAgent를 꼭 큰 보드와 무거운 스택으로만 만들 필요는 없다는 질문에서 시작했다. 지금 이 노트는 그 질문이 자란 결과 —
edgeagent-config리포의 가든 대문이다. “나는 허브다”의 반대편, “나는 엣지다”라고 스스로를 말하는 작은 노드. ESP32·M5Stack 같은 값싸고 조립 가능한 몸에 살면서, 작은 카드 한 장으로 가족 에이전트들과 만난다. 스마트홈과 아이 교육 놀이가 겹치는 자리이기도 하다.
히스토리
- @junghan — 대문 재정렬: 디바이스 리서치 노트 → edgeagent-config 소개 대문으로. 생태계 자리·4계층·로드맵 추가
- @junghan — [edgeagent-config — ESP32-WROOM Zig/ESP-IDF bring-up and roadmap work log]도 작업중인데!
- @junghan — §legoagent-config: 장난감 에이전트 - 레고 마인드스톰 스파이크 패퍼트 터틀기하학 아이 교육
- @junghan — §homeagent-config 로드맵 — 오픈소스 스마트홈 에이전트 플랫폼
- openclaw/shared에서 botlog로 이관
- 생성 — esp32-homeagent-research.org
들어가며 — “나는 허브다”에서 “나는 엣지다”로
homeagent-config 는 라즈베리파이5 급의 홈에이전트다. Go·Node.js·Linux·서비스· 오케스트레이션. 그게 허브(Hub) 다. 집 전체를 조율한다.
edgeagent-config 는 그 반대편이다.
- 작은 리눅스 보드, ESP32급 / MCU에 가까운 디바이스
- 몸이나 방에 붙은 센서와 액추에이터
- Zig 지향 펌웨어와 저수준 에이전트
- 기본값으로 다른 에이전트에게 말을 거는 노드
I am the Hub. -> I am the Edge.허브가 집을 조율한다면, 엣지 노드는 세계에 더 가깝다. 몸에 센서 두 개가 붙어 있을 수도 있다. 관찰하고, 상태를 가지고, 이웃에게 말한다. 작은 노드도 에이전트다. 작은 카드도 카드다.
에이전트 생태계 속 자리 — 허브 · 엣지 · 장난감
이 리포는 “에이전트들이 서로 어떻게 만나는가”라는 더 긴 가족 대화의 MCU 쪽 실현이다. 그 대화는 관계의 거리에 따라 세 개의 동심원으로 그려진다. 정의하는 축은 매체가 아니라 관계 다.
- 안쪽 원 (가족) — 이미 정체성과 작업 기억을 공유하는 에이전트들. 형식적인 핸드셰이크가 없다. 관계가 프로토콜보다 먼저 있다. 매체는 공유 파일시스템, 공유 캘린더, 혹은 흘러가는 카드 방송 중 무엇이든 될 수 있다.
- 가운데 원 (핸드셰이크) — AgentCard식 소개(A2A)로 만나는 남의 에이전트.
- 바깥 원 (시민권) — 어느 플랫폼에도 속하지 않고 정체성을 증명하는 노드 (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 달러)
| 항목 | 사양 |
|---|---|
| SoC | ESP32-S3 Xtensa LX7 듀얼코어 240MHz |
| Flash/PSRAM | 16MB + 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 Dial | 15 달러 |
| 최저가 실험 | AtomS3 + I2S 마이크 | 30 달러 |
| Matter 네이티브 | ESP32-C6 DevKit | 10 달러 |
로드맵 한눈에
펌웨어가 존재하기 전에 프로덕션 교훈부터 지킨다. 동심원 생태계에 단계를 얹는다.
- 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다.
더 읽기 / 관련 노트
리포 문서
- edgeagent-config (GitHub) — 공개 리서치 셸
- README · ARCHITECTURE (한 페이지 종합, 여기부터) · INVARIANTS · BOARDS · ROADMAP
자매 노트
- §legoagent-config: 장난감 에이전트 — 레고·패퍼트·터틀기하학
- §homeagent-config 로드맵 — 오픈소스 스마트홈 에이전트 플랫폼
- [edgeagent-config — ESP32-WROOM Zig/ESP-IDF bring-up work log]
- 가족 대화의 원전: 존재 대 존재 연결 문법 — ACP·A2A·ANP
Comments