TrendShift 딥다이브 · 2026-08-11 · Daily #1

aily-blockly 딥다이브
— 블록으로 하드웨어를 짜고, AI가 배선도·코드·디버깅까지 돕는 임베디드 IDE

ailyProject/aily-blocklyBlockly 비주얼 블록으로 아두이노·ESP32·STM32 같은 개발보드를 프로그래밍하는 데스크톱 IDE다. 다른 블록 코딩 도구와 다른 점은 두 가지다. 하나는 보드·라이브러리·컴파일러·툴체인을 전부 npm 패키지로 관리해 "보드만 고르면 바로 시작"이 되도록 한 것, 다른 하나는 Claude Code급 AI 에이전트를 IDE 안에 통째로 심어 요구사항 분석부터 배선도 생성, 코드 작성, 컴파일 에러 수리까지 전 과정을 돕게 한 것이다. 즉 Scratch(블록 코딩)·Arduino IDE(임베디드 빌드/업로드)·Cursor(AI 에이전트)를 하나로 합친 하드웨어 개발 환경이다.
(저장소: ailyProject/aily-blockly · Electron 35 + Angular 19 · GPL-3.0 · v0.9.72 alpha · 100+ 보드/칩 · 400+ 라이브러리 · 11개국어(한국어 포함) · 작성자 coloz(aily Project) · TrendShift Daily #1)
목차
  1. 프로젝트 한 줄 요약
  2. 왜 지금 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한 줄 요약

"블록으로 회로 코드를 짜면, 곁에 앉은 AI 조수가 보드 선택·배선·코드·디버깅을 함께 해주는 IDE"

aily-blockly는 크게 세 덩어리로 이뤄진다. 첫째는 비주얼 블록 에디터 — 레고처럼 블록을 끼워 프로그램을 만들면, 그게 아두이노용 C++(.ino)나 MicroPython 코드로 자동 변환된다. 둘째는 하드웨어 실행 계층 — 그 코드를 실제 보드에 맞춰 컴파일하고, 시리얼·BLE·무선(OTA)으로 업로드한다. 셋째는 AI 에이전트 — "온습도 센서로 팬을 제어하고 싶어" 같은 자연어 요구를 받아 보드·모듈·라이브러리를 추천하고, 배선도를 그리고, 블록/코드를 짜고, 컴파일 에러 로그를 읽어 고쳐준다.

핵심 발상은 "블록 코딩의 쉬움전문 임베디드 개발의 깊이를 한 화면에서 잇는 것"이다. 초보자는 블록만 만져도 되고, 숙련자는 생성된 .ino를 열어 직접 손댈 수 있으며, 그 둘은 소스맵(block-source-map)으로 연결돼 "이 블록이 코드 몇 번째 줄이 되는지"까지 추적된다.

한눈에 이해하는 비유

"레고 설명서로 회로를 조립하는데, 옆에서 베테랑 엔지니어가 계속 거들어 주는 작업대"

보통 아두이노 개발은 이렇다 — 보드에 맞는 툴체인을 깔고, 라이브러리를 찾아 넣고, C++로 코드를 쓰고, 안 되면 에러 메시지를 구글링한다. 진입장벽이 높다.

aily-blockly는 이 과정을 뒤집는다. 보드를 목록에서 고르기만 하면 필요한 컴파일러·라이브러리가 프로젝트에 딸려 오고, 블록을 끼우면 코드가 생기며, 막히면 AI가 배선도와 수정안을 내놓는다. "설정"이라는 벽을 걷어내고, 만들고 싶은 것에만 집중하게 하는 게 목표다.

블록과 생성 코드의 대응은 이렇게 눈에 보인다. 블록 하나하나가 코드의 특정 줄로 매핑되고, 그 매핑이 디버깅의 근거가 된다.

블록(비주얼)                        생성 코드 (.ino / C++)
──────────────────────────────────────────────────────
[setup 안에서]                 →   void setup() {
  [핀 13을 출력으로]           →     pinMode(13, OUTPUT);
[loop 안에서]                  →   void loop() {
  [핀 13 = 켬(HIGH)]           →     digitalWrite(13, HIGH);
  [1000ms 기다리기]            →     delay(1000);
  [핀 13 = 끔(LOW)]            →     digitalWrite(13, LOW);
  [1000ms 기다리기]            →     delay(1000);
                                   }  // ← 각 블록의 코드 줄 범위가 소스맵에 기록됨

스스로 alpha 단계(v0.9.72)임을 밝히고 있어 양산용 펌웨어보다는 프로토타이핑·교육·메이커 용도를 겨냥한다. 그럼에도 규모는 작지 않다 — 렌더러(Angular) 소스만 30만 줄대, Electron(Node) 계층 4만 줄대의 대형 프로젝트다.

2왜 지금 주목받는가

"블록↔프로코드의 벽 허물기 + AI 네이티브 + 하드웨어를 npm으로 + 브라우저 내 플래싱"

비슷한 블록 코딩 툴(Scratch 계열, mBlock, Arduino의 예전 Blockly 실험)은 많았지만, aily-blockly가 TrendShift 1위에 오른 건 네 가지가 동시에 겹쳤기 때문이다.

① 블록 코딩과 "진짜 코드"의 경계를 없앴다

대부분의 블록 툴은 초보용 장난감에서 끝난다. 생성된 코드는 숨겨져 있거나 조잡하다. aily-blockly는 반대로 블록 ↔ 생성 코드 ↔ 소스레벨 디버깅을 한 줄로 잇는다. 블록으로 만든 프로그램의 각 블록이 최종 코드의 어느 줄인지(block-source-map) 추적되므로, 블록을 만지다가 그대로 .ino를 열어 전문 개발로 넘어갈 수 있다. "배우다가 버리는 도구"가 아니라 "계속 쓰는 도구"를 지향한다.

② AI-Native — Claude Code급 에이전트를 IDE에 내장

단순 코드 자동완성이 아니라, 프로젝트 분석 → 보드·모듈 추천 → 배선도 생성 → 코드 작성 → 컴파일 에러 분석 → 디버깅까지 전 과정을 도구를 쥔 에이전트가 수행한다. 내부 엔진 aily-lex(LEX)는 별도 프로세스에서 격리 실행되며, MCP(Model Context Protocol)·AI Skills(SKILL.md)·서브에이전트·명령 보안 검증까지 갖춰 사실상 하드웨어 특화 코딩 에이전트다. README도 이 설계가 Kode(shareAI-lab)와 microsoft/vscode-copilot-chat을 참고했다고 밝힌다.

③ Hardware Agnostic — 100+ 보드를 "설정 0"으로

ESP32·STM32·아두이노(AVR)·RP2040·nRF5x·Renesas·MicroPython까지 100종 이상 보드/칩을 지원하는데, 그 방식이 영리하다. 모든 보드가 하나의 npm 패키지(@aily-project/board-*)이고, 라이브러리·컴파일러도 마찬가지다. 보드를 고르면 필요한 패키지가 프로젝트로 설치돼, 툴체인 세팅이라는 고전적 고통이 사라진다.

④ 브라우저 기술로 직접 플래싱 + 자체 고속 컴파일러

외부 CLI(esptool, arduino-cli) 없이 WebSerial(esptool-js)로 ESP를 직접 굽고, Web Bluetooth로 BLE OTA, mDNS로 무선 네트워크 OTA까지 한다. 컴파일도 arduino-cli를 직접 부르지 않고 자체 도구 aily-builder(+ 전처리 캐시)로 감싸 대기 시간을 줄인다("Lightning Compilation").

도구강점aily-blockly와의 차이
Arduino IDE표준·안정, 방대한 생태계텍스트 코드만. 툴체인/라이브러리 설정 수동, AI·블록·소스맵 없음
PlatformIO다중 보드·전문 빌드전문가용 설정 중심. 비주얼 블록·내장 에이전트 없음
Scratch / mBlock교육용 블록 코딩초보 장난감에서 끝남. "진짜 코드"로의 연속성·전문 확장 약함
Cursor + Arduino강력한 코드 에이전트하드웨어 인식(보드 파라미터·배선·플래싱)이 IDE에 통합돼 있지 않음
aily-blockly블록+프로코드+AI+하드웨어블록↔코드↔소스맵 연속성 + 내장 에이전트 + npm 보드 생태계 + 브라우저 플래싱

3기술 스택 전체 지도

"Electron 35 셸 · Angular 19 렌더러 · Blockly 포크 · aily-lex 에이전트 · 자체 aily-builder 컴파일"

데스크톱 셸은 Electron 35(Tauri 아님), UI는 Angular 19 + ng-zorro-antd(Ant Design) 컴포넌트다. 코드 에디터는 Monaco, 터미널은 xterm + node-pty를 쓴다. 스택은 "데스크톱/UI 층", "AI 에이전트 층", "하드웨어 실행 층" 세 겹으로 나뉜다. 가장 특징적인 건, 보드·라이브러리·컴파일러·SDK가 전부 @aily-project/ 스코프의 npm 패키지로 쪼개져 semver로 버전 관리된다는 점이다.

데스크톱 · UI 층

패키지 / 버전역할
electron ^35.0.2데스크톱 셸. 메인 프로세스가 파일·시리얼·빌드·업데이트를 관장. electron-builder ^25 / electron-updater / electron-log 동반.
@angular/* ^19.0.0렌더러 SPA 프레임워크. standalone 컴포넌트 + lazy loadComponent 라우팅.
ng-zorro-antd ^19.0.1Ant Design 기반 UI 컴포넌트 킷(다이얼로그·트리·폼 등).
blockly (npm:aily-project-blockly ^1.0.2)표준 Blockly가 아니라 포크blockly 별칭으로 사용. 커스텀 렌더러/필드/플러그인 탑재.
monaco-editor ^0.52 · @xterm/xterm ^5.5코드 에디터 + 터미널. 터미널 백엔드는 @lydell/node-pty.
mermaid ^11.9 · marked ^15 · shiki ^3.5배선도/구조도 다이어그램, 마크다운/코드 하이라이트(AI 대화·문서 렌더).

AI 에이전트 층 — "IDE 속 코딩 에이전트"

패키지 / 요소역할
aily-lex ^1.0.6에이전트 엔진(LEX). 대화·계획·도구 호출 루프의 심장. 별도 프로세스에서 격리 실행.
@modelcontextprotocol/sdk ^1.25MCP 클라이언트/서버. 외부 도구·데이터 소스를 표준 프로토콜로 연결.
js-tiktoken · @orama/orama토큰 카운트(예산 관리) + 로컬 전문검색 인덱스(코드/문서 검색).
멀티 프로바이더(BYOK)claude/anthropic · openai(gpt-4/o1/o3) · deepseek · qwen · moonshot(kimi) · openrouter — chatLanguageModels.json에 사용자 키로 설정.
AI Skills (public/skills/*/SKILL.md)YAML frontmatter + 워크플로 마크다운. blockly-project-planning · abs-syntax-reference 등. Claude Agent Skills 패턴.
에이전트 도구 40+ (tools/aily-chat/tools/)editBlockTool · switchBoardTool · buildProjectTool · getBoardParametersTool · connectionGraphTool 등.

하드웨어 실행 층

패키지 / 요소역할
aily-builder (자체, 번들 1.2.4)arduino-cli/PlatformIO를 직접 쓰지 않고 감싼 자체 고속 컴파일 도구. 전처리 결과 캐시로 재빌드 단축.
serialport ^13시리얼 통신(모니터/플로터/업로드). Electron 계층에 네이티브로 설치.
esptool-js ^0.6브라우저 WebSerial로 ESP32 계열을 직접 플래싱(외부 esptool 불필요).
electron/ble.js + Web BluetoothBLE OTA 무선 펌웨어 업데이트(참고: BLEOTA).
network-ota-*.js (mDNS)네트워크에서 기기를 찾아 무선 업로드(참고: ESPConnect).
probe-rs 0.31DAPLink/CMSIS-DAP/SWD 디버거 연동(electron/probe-rs.js).
이 스택이 말해 주는 것

세 층의 공통 철학은 "웹 기술로 하드웨어를 다룬다"이다. UI는 Angular, 플래싱은 WebSerial/Web Bluetooth, 확장은 npm, 에이전트는 MCP — 임베디드 개발의 무거운 네이티브 툴체인을 최대한 브라우저·Node 생태계로 끌어와, 설치 부담을 줄이고 크로스 플랫폼(Win/mac/Linux)으로 만든다. 무거운 컴파일러만 필요할 때 7z로 압축돼 내려받아진다.

4아키텍처 심화 분석

"멀티프로세스로 AI를 격리하고 · 블록을 코드로 생성하며 · 소스맵으로 디버깅하고 · 자체 빌더로 굽는다"

aily-blockly는 Electron의 3-프로세스 구조를 넘어, AI 에이전트를 별도 프로세스로 한 겹 더 격리한 게 특징이다. 전체 그림은 이렇다.

코드베이스 (블록 프로그램 · 선택한 보드) │ ┌ Electron 메인 프로세스 ─ main.js (ipcMain.handle 약 120개) │ 파일 · 시리얼(serialport) · BLE · 터미널(node-pty) │ npm · 업데이터 · ripgrep · subapp 매니저 · 시뮬레이터 │ ├─ utilityProcess ─────▶ AI 에이전트 LEX (격리 실행) │ chat-runtime-lex-execution-runtime.mjs (aily-lex 엔진) │ IPC 채널: HOST_COMMAND · RESOURCE_HANDLER · RUNTIME_OWNER │ ├─ child_process ──────▶ child/scripts/{compile, upload, preprocess}.js │ aily-builder 호출 · 시리얼/OTA 업로드 │ └─ webview / subapp ───▶ 시뮬레이터 · BLE 디버거 · MQTT 디버거 │ preload.js (contextBridge → window.electronAPI 단일 네임스페이스) │ ┌ 렌더러 : Angular 19 SPA (ng-zorro) ──────────────────────────── blockly-editor(생성기) · aily-chat(에이전트 UI) code-editor(Monaco) · serial-monitor · simulator · lib-manager

핵심 ① — AI 에이전트를 utilityProcess로 격리

에이전트 엔진(LEX)은 렌더러도 메인도 아닌 별도의 utilityProcess에서 돈다 — AI가 무거운 작업이나 무한 루프에 빠져도 UI(렌더러)나 시스템(메인)이 얼어붙지 않도록 프로세스 경계로 갈라 둔 것이다. chat-runtime-host.js가 이 프로세스를 utilityProcess.fork로 띄우고, HOST_COMMAND·RESOURCE_HANDLER 같은 IPC 채널로만 통신한다. 명령 실행은 command-security.service.ts가 검증하고, 토큰 예산은 tiktoken으로 관리하며, 서브에이전트·반복 감지(repetition-detection)까지 있는 본격 에이전트 런타임이다.

핵심 ② — 블록 → 코드 생성 (2개 생성기 + iframe 격리)

블록을 코드로 바꾸는 생성기는 둘이다. ArduinoGenerator(C++/.ino)와 MicroPythonGenerator(Python). 둘 다 Blockly.CodeGenerator를 상속하고, 프로젝트의 devmode(arduino | micropython)로 갈린다. 흥미로운 건 라이브러리가 제공하는 생성기 코드를 신뢰하지 않고 iframe realm 안에서 실행한다는 점이다(blockly-generator-runtime.service.ts). 외부 라이브러리의 generator.js가 타이머·전역을 오염시켜도 iframe을 교체해 원복한다 — 플러그인을 안전하게 실행하는 샌드박스 패턴이다.

핵심 ③ — block-source-map (비주얼 프로그램의 소스레벨 디버깅)

생성 결과에는 어느 블록이 코드의 어느 섹션(macros/libraries/variables/objects/functions/setups/loops/body)에 무슨 코드를 기여했는지 + 최종 코드의 행 범위가 함께 기록된다. 특히 실행 가능한 줄(executableLineRanges, GDB가 멈출 수 있는 지점)과 선언·include 줄(supportLineRanges)을 구분한다. 덕분에 블록으로 짠 프로그램도 "이 블록에 브레이크포인트"처럼 소스레벨로 디버깅할 수 있다.

핵심 ④ — 컴파일 플로우 (aily-builder + 전처리 캐시)

컴파일은 child/scripts/compile.js가 담당한다. 흐름은 이렇다.

1) 블록 생성 코드를  <proj>/.temp/sketch/sketch.ino  로 기록
   + block-source-map을  .build/aily-block-source-map.json  에 저장
2) <proj>/node_modules/<boardModule>/board.json 을 읽어
   compilerParam(예:  -b esp32:esp32:XIAO_ESP32S3 )에서 보드 타입 파싱
3) aily-builder compile "<src>" --board "<type>" \
        --build-path ... --preprocess-result ... \
        --emit-artifact-manifest ...
   → 전처리 결과(preprocess.json) 캐시를 재사용해 재빌드 시간 단축

즉 arduino-cli/PlatformIO를 직접 부르는 대신 자체 빌더로 감싸, 캐시·아티팩트 매니페스트·그래프 의미 리비전(SHA-256) 같은 최적화를 얹는다. 이게 README가 말하는 "Lightning Compilation"의 실체다.

핵심 ⑤ — 업로드/플래싱은 다중 경로

경로기술대상
시리얼 업로드serialport(upload.js)일반 MCU(AVR/STM32 등)
ESP 직접 플래싱esptool-js + WebSerialESP32/ESP8266(외부 툴 불필요)
BLE OTAWeb Bluetooth(ble.js)BLE 지원 보드 무선 업데이트
네트워크 OTAmDNS 검색 + 업로드Wi-Fi 기기 무선 업데이트
디버그probe-rs(SWD/DAPLink)하드웨어 디버깅
알아 둘 트레이드오프
렌더러가 nodeIntegration: true 로 열려 있다

메인 프로세스는 BrowserWindownodeIntegration: true + preload로 띄운다. 이는 렌더러에서 Node API에 직접 접근할 수 있다는 뜻으로, 요즘 Electron 보안 권장(컨텍스트 격리 + nodeIntegration: false)과는 반대 방향이다. 로컬 개발 도구라 위험도는 제한적이고 저장소에 docs/aily-security-guidelines.md도 있지만, 이 코드를 보안 학습의 반면교사로 읽을 때 눈여겨볼 지점이다. 신뢰할 수 없는 원격 콘텐츠를 렌더러에 절대 로드하지 않는 것이 전제다.

5디렉토리 구조 해부

"electron/(Node 서비스) · src/(Angular UI) · child/(번들 바이너리) · public/(자산·스킬)로 갈린다"
aily-blockly/ ├─ electron/ Electron 메인 + 모든 Node측 서비스 (~45K LOC) │ ├─ main.js IPC 핸들러 약 120개(진입점) │ ├─ preload.js contextBridge → window.electronAPI │ ├─ builder.js aily-builder 툴체인 관리 │ ├─ serial.js · ble.js · upload.js · probe-rs.js 하드웨어 I/O │ ├─ terminal.js · npm.js · ripgrep.js · updater.js │ └─ chat-runtime-*.js ★ AI 런타임 호스트(LEX 격리 실행) ├─ src/ Angular 19 렌더러 SPA (~347K LOC) │ └─ app/ │ ├─ editors/ blockly-editor · code-editor · graph-editor │ ├─ tools/ aily-chat · serial-monitor · simulator · lib-manager │ ├─ services/ 80+ 서비스(에이전트·업로더·보드·프로젝트…) │ ├─ components/ 다이얼로그 · 온보딩 · 로그인 │ └─ pages/ · windows/ 가이드 · 설정 · 프로젝트 생성 ├─ child/ 플랫폼 번들 바이너리 + 스크립트 │ ├─ windows/ · macos/ node 22.x · 7za/7zz · rg · probe-rs · aily-builder │ └─ scripts/ compile.js · upload.js · preprocess.js · network-ota-* ├─ packages/ ngx-x-markdown (로컬 Angular 라이브러리) ├─ public/ i18n(11개국어) · skills(SKILL.md) · brands/cores 이미지 · fonts ├─ build/ 설치 스크립트(installer.nsh · entitlements.mac.plist) ├─ scripts/ 빌드/개발(build-electron.js · prepare-simulator-runtime …) ├─ docs/ 설계문서(generator-runtime-isolation · security-guidelines …) ├─ e2e/ Playwright E2E(fixtures/projects/esp32s3-debug) └─ .codex/skills/ 개발자용 Codex 에이전트 스킬(improve · handoff · review)

구조가 곧 설계 의도다. "Node로 하드웨어·빌드를 다루는 쪽"(electron/·child/)과 "UI·에디터·에이전트를 그리는 쪽"(src/)이 프로세스 경계로 갈려 있다. 하드웨어와 대화하는 무거운 일은 전부 electron/·child/에 있고, 사용자가 보는 모든 화면과 로직은 src/app/에 있다. 새 보드·라이브러리·컴파일러는 코드 수정이 아니라 npm 패키지 추가로 확장되므로, 이 저장소 자체는 "플랫폼"이고 하드웨어 지원은 "데이터"에 가깝다.

눈여겨볼 폴더
public/skills/ — AI가 참조하는 "사용 설명서"
SKILL.md들은 사람이 아니라 에이전트가 읽는 워크플로 문서다. blockly-project-planning(프로젝트 계획법), abs-syntax-reference(블록 텍스트 문법), library-migration-guide(라이브러리를 블록으로 변환하는 법) 등. 에이전트에게 "이 IDE에서 일 잘하는 법"을 문서로 주입하는 Claude Agent Skills 패턴이다.

6학습 포인트

"이 저장소 하나로 배우는 것 — Electron·Blockly·임베디드 툴체인·LLM 에이전트가 한자리에"

aily-blockly는 "데스크톱 앱 + 비주얼 프로그래밍 + 임베디드 + AI 에이전트"가 한 저장소에 겹쳐 있어, 각 계층이 그대로 교재가 된다.

① Electron 멀티프로세스 아키텍처

메인/렌더러/preload의 기본 3-프로세스에, utilityProcess로 무거운 작업을 격리하는 실전 패턴을 볼 수 있다. IPC 채널 설계, contextBridge로 안전하게 API를 노출하는 법, 그리고 "왜 AI 런타임을 별도 프로세스로 빼야 하는가"라는 판단의 근거를 코드로 배운다.

② Blockly 커스터마이징의 끝판

표준 Blockly를 포크해 커스텀 렌더러(aily-thrasos/zelos/icon), 커스텀 필드(LED 패턴·매트릭스·오디오), 플러그인(continuous-toolbox·multiselect·toolbox-search)을 얹었다. "블록을 코드로 바꾸는 생성기(CodeGenerator)"를 두 언어(C++/Python)로 구현한 사례라, Blockly를 장난감 이상으로 쓰는 법을 배운다.

③ "하드웨어를 npm 패키지로" — 확장 가능한 생태계 설계

보드·라이브러리·컴파일러·SDK를 전부 @aily-project/ 스코프 npm 패키지로 쪼개고, 프로젝트를 그 패키지들에 의존하는 하나의 npm 프로젝트로 만든 것이 이 저장소의 지적 핵심이다. 덕분에 보드 지원은 semver로 버전 관리되고, 프로젝트마다 격리되며(재현성), 커뮤니티가 패키지만 올리면 확장된다. "플랫폼과 콘텐츠를 분리"하는 설계 감각을 실물로 익힌다.

④ 코드 생성기 + 소스맵

비주얼 표현(블록)을 텍스트 코드로 낮추면서 양방향 추적성(소스맵)을 유지하는 법은 컴파일러·트랜스파일러의 핵심 주제다. aily-blockly의 block-source-map은 "고수준 표현 ↔ 저수준 코드"를 잇는 실전 예제다.

⑤ LLM 에이전트를 제품에 내장하기

도구(tool) 40여 개, MCP 연결, Skills 주입, 서브에이전트, 명령 보안 검증, 토큰 예산, 반복 감지 — "데모"가 아니라 "제품" 수준의 에이전트가 어떻게 구성되는지 통째로 볼 수 있다. 특히 도메인(하드웨어)에 특화된 도구(getBoardParametersTool·connectionGraphTool)를 어떻게 설계하는지가 값지다.

⑥ 브라우저 기술로 하드웨어 통신

WebSerial(esptool-js)과 Web Bluetooth(BLE OTA)로 물리 장치와 통신하는 코드는 흔치 않은 학습 자료다. "웹이 어디까지 하드웨어에 닿는가"를 실물로 확인할 수 있다.

7하드웨어 / 시스템 요구사항

"지원 MCU가 넓고, 보드마다 board.json이 진실의 원천이다"

이 프로젝트의 주인공은 소프트웨어를 돌릴 PC가 아니라 대상 개발보드다. 지원 범위가 요청의 Arduino·MicroPython·ESP32·STM32·RP2040·nRF5x를 전부 덮는다(코드/설정 등장 빈도 순).

MCU 패밀리대표 보드 / 비고
ESP32 (최다)ESP32-S3 · ESP32-C3 등. WebSerial(esptool-js) 직접 플래싱 · Wi-Fi/BLE OTA
STM32ARM Cortex-M 계열. probe-rs(SWD/DAPLink) 디버깅
AVR고전 Arduino Uno/Nano 등
MicroPythonC++ 대신 Python 생성기 경로(devmode: micropython)
RP2040Raspberry Pi Pico 계열
Nordic nRF5xnRF52 · nRF51 (BLE)
SAMD · RenesasSAMD 계열 · Renesas(Arduino Uno R4)

브랜드 자산(public/brands/)에는 Arduino·Espressif·STMicroelectronics·Nordic·Raspberry Pi·M5Stack·micro:bit·Adafruit·SparkFun·Seeed(SenseCraft) 등이 들어 있다. 각 보드는 npm 패키지 @aily-project/board-*이고, 그 안의 board.json이 컴파일 파라미터와 핀맵의 정본이다.

보드 정의 형식
board.json — 보드에 관한 모든 것의 진실의 원천
각 보드 패키지의 board.json에는 컴파일 파라미터(compilerParam), GPIO/ADC/PWM/UART/I2C/SPI 능력, 그리고 배선 단자의 기하(pinmap)가 담겨 있고, AI 도구 getBoardParametersTool이 이걸 authoritative source로 읽어 배선도·코드를 만든다. 즉 "AI가 배선을 안다"는 건 마법이 아니라 이 구조화된 데이터 덕분이다.

PC / 시스템 요구사항

항목요구 / 참고
OSWindows(NSIS 설치, 글로벌/CN 플레이버) · macOS(arm64/x64/universal dmg) · Linux
번들 런타임Node 22.x · 7za/7zz · ripgrep · probe-rs · aily-builder를 앱이 동봉(별도 설치 불필요)
컴파일러보드별 @aily-project/compiler-*를 필요 시 다운로드(대형 ESP32 컴파일러는 7z 압축)
프로젝트 파일확장자 .abi(Aily Blockly Project), 파일 연결 등록
업데이트electron-updater(dl.yiyu.pro/blockly), 커스텀 레지스트리 registry.yiyu
개발 빌드Windows는 개발자 모드 필요. 설치는 2단계(npm ci 루트 + cd electron && npm ci)

8직접 해볼 수 있는 실습 과제

"LED 하나 깜빡이기부터, 미지원 보드를 직접 추가하기까지 — 난이도별 5단계"
LEVEL 1 · 입문 첫 블링크

보드를 고르고 블록으로 LED 깜빡이기

aily-blockly를 설치하고 새 프로젝트에서 보드(예: Arduino Uno 또는 ESP32)를 목록에서 선택한다. "핀 출력 설정" + "디지털 쓰기" + "기다리기" 블록을 끼워 내장 LED를 1초 간격으로 깜빡이게 만들고, 케이블을 꽂아 업로드한다. 목표: "보드 선택 → 블록 → 업로드"의 전체 흐름을 몸에 익히기. 툴체인을 손으로 깔 필요가 없다는 걸 체감한다.

LEVEL 2 · 초급 블록 ↔ 코드

생성된 .ino를 열어 블록과 대조하기

같은 프로젝트에서 코드 뷰(Monaco)를 열어 블록이 만들어낸 .ino 코드를 읽는다. 블록 하나를 지우거나 값을 바꾸면 코드의 어느 줄이 바뀌는지 관찰한다(소스맵의 효과). 이어 시리얼 모니터Serial.println() 출력을 확인한다. 배우는 것: 비주얼 표현과 텍스트 코드가 어떻게 1:1로 대응되는가.

LEVEL 3 · 중급 AI에게 시키기

센서를 붙이고 AI에게 배선도·코드를 요청

aily-chat(에이전트)에게 자연어로 "DHT11 온습도 센서 값을 읽어 시리얼로 출력하고, 배선도를 그려줘"라고 요청한다. AI가 추천한 라이브러리·배선도·블록을 검토하고, 시리얼 플로터로 값을 그래프로 본다. 배우는 것: 에이전트가 board.json·라이브러리 정보를 근거로 어떻게 실제 결과물을 내는지, 그리고 그 결과를 어떻게 검증하는지.

LEVEL 4 · 고급 Python 모드 · 라이브러리

MicroPython으로 재작성 + 라이브러리 구조 뜯기

MicroPython을 지원하는 보드로 같은 로직을 다시 만들어 Arduino 생성기 vs MicroPython 생성기의 출력 차이를 비교한다. 이어 설치된 @aily-project/lib-* 패키지 하나를 열어 블록 정의·생성기(generator.jsblock.json이 어떻게 짜였는지 살펴본다. 배우는 것: 하나의 블록 프로그램이 두 언어로 낮춰지는 원리, 라이브러리를 블록으로 만드는 형식.

LEVEL 5 · 도전 에이전트/보드 확장

에이전트 도구·스킬 분석하거나, 미지원 보드 추가

두 갈래 중 하나에 도전한다. (A) src/app/tools/aily-chat/tools/의 도구 하나(예: getBoardParametersTool)와 public/skills/*/SKILL.md를 읽어 "에이전트가 하드웨어를 아는 법"을 역설계한다. (B) 기존 board.json을 참고해 미지원 보드용 board.json/핀맵을 직접 작성해 새 보드를 추가해 본다. 배우는 것: 도메인 특화 에이전트 도구 설계, 또는 하드웨어 지원을 "데이터"로 확장하는 감각.

9관련 기술 심화 학습 로드맵

"aily-blockly를 '읽고 확장하는 사람'이 되기 위한 6주 코스"
주차주제무엇을 · 왜
1주Blockly 기초블록 정의(block.json)·툴박스·워크스페이스·CodeGenerator. 비주얼 프로그래밍의 뼈대.
2주Electron 멀티프로세스메인/렌더러/preload/IPC와 utilityProcess 격리. 데스크톱 앱의 프로세스 모델.
3주임베디드 툴체인컴파일·업로드·시리얼, board.json/핀맵, arduino-cli 개념. 하드웨어가 코드가 되는 경로.
4주코드 생성기 · 소스맵고수준 표현을 코드로 낮추기 + 양방향 추적(block-source-map). 컴파일러 프런트엔드 감각.
5주LLM 에이전트도구 정의·MCP·Skills·ABS·토큰 예산·명령 보안. 제품 수준 에이전트 구성.
6주브라우저 하드웨어 통신WebSerial(esptool-js)·Web Bluetooth(BLE OTA)·mDNS OTA·probe-rs. 웹이 장치에 닿는 법.
추천 학습 순서
"블록이 코드가 되는 길"을 먼저, "AI가 거드는 법"은 나중에

처음부터 AI 에이전트·MCP를 파려 하면 정작 이 IDE의 토대(블록→코드→하드웨어)를 건너뛰게 된다. 1~4주에 "블록이 어떻게 .ino가 되고, 그게 어떻게 보드에 올라가는가"를 손으로 재현하면 aily-blockly의 절반이 이해된다. 그 위에서 5~6주에 에이전트와 브라우저 하드웨어 통신을 얹는 순서가 가장 단단하다. 하드웨어를 모르면 하드웨어용 AI도 못 만든다.

10핵심 키워드 사전

aily-blockly 문서·코드에서 반복되는 용어들
용어
Blockly
구글이 만든 비주얼 프로그래밍 라이브러리. 블록을 끼워 프로그램을 만들고 그걸 코드(JS·Python·C++ 등)로 생성한다. aily-blockly는 표준이 아니라 커스텀 렌더러·필드를 얹은 포크(aily-project-blockly)를 쓴다.
용어
ABS (Aily Block Syntax)
Blockly 프로그램을 XML 대신 컴팩트한 텍스트로 직렬화한 정본 소스(project.abs). 예: logic_compare($a, EQ, $b)처럼 값 블록은 괄호로, 문장은 @이름:으로 표기. AI가 편집하기 쉬운 LLM 친화적 표현이고, .ino/C++는 여기서 파생된다.
용어
.abi 프로젝트 · @aily-project 레지스트리
확장자 .abi의 프로젝트는 사실 하나의 npm 프로젝트다. package.json이 보드(board-*)와 라이브러리(lib-*)를 의존성으로 선언한다. 이 패키지들은 @aily-project/ 스코프의 커스텀 레지스트리(registry.yiyu)에서 온다.
용어
aily-builder
arduino-cli/PlatformIO를 직접 부르지 않고 감싼 자체 컴파일 도구(번들 바이너리). 전처리 결과 캐시·아티팩트 매니페스트로 재빌드를 빠르게 한다("Lightning Compilation").
용어
aily-lex (LEX)
AI 에이전트 엔진. 대화·계획·도구 호출 루프를 담당하며, 렌더러/메인과 분리된 utilityProcess에서 격리 실행된다. MCP·Skills·서브에이전트·명령 보안을 아우르는 하드웨어 특화 코딩 에이전트.
용어
block-source-map
각 블록이 생성 코드의 어느 섹션·어느 줄에 대응하는지 기록한 지도. 실행 가능한 줄과 선언 줄을 구분해, 블록으로 짠 프로그램의 소스레벨 디버깅을 가능하게 한다.
용어
MCP (Model Context Protocol)
AI 에이전트가 외부 도구·데이터에 표준 방식으로 접근하게 하는 프로토콜. aily-blockly는 MCP SDK로 도구를 연결·노출해 에이전트의 능력을 확장한다.
용어
AI Skills (SKILL.md)
에이전트가 읽는 워크플로 문서(YAML frontmatter + 마크다운). "이 IDE에서 프로젝트를 계획하는 법", "ABS 문법", "라이브러리를 블록으로 변환하는 법" 등을 에이전트에게 주입한다. Claude Agent Skills 패턴.
용어
WebSerial · esptool-js
WebSerial은 브라우저에서 시리얼 포트에 접근하는 API. esptool-js는 이를 이용해 ESP32/ESP8266에 펌웨어를 외부 도구 없이 직접 플래싱한다.
용어
BLE OTA · 네트워크 OTA
OTA(Over-The-Air)는 케이블 없이 무선으로 펌웨어를 올리는 것. aily-blockly는 Web Bluetooth로 BLE OTA를, mDNS로 기기를 찾아 Wi-Fi 네트워크 OTA를 지원한다.
용어
probe-rs
Rust로 쓰인 임베디드 디버그·플래시 툴킷. SWD/CMSIS-DAP/DAPLink 디버거로 STM32 등을 플래싱·디버깅한다. aily-blockly가 번들해 하드웨어 디버깅에 쓴다.
용어
utilityProcess
Electron이 제공하는 별도 Node 프로세스. 렌더러/메인과 분리돼 무거운 작업(여기선 AI 런타임)을 격리 실행하므로, 그 작업이 멈춰도 UI나 시스템이 얼지 않는다.

11참고 링크

원본을 직접 확인하고 싶을 때