WEB 콘트롤 아두이노 AI 개발프로젝트 Part 1 - 아두이노 AI를 이용해서 말로 코딩하기
아두이노도 대화로 만들었다
OLED가 달린 아두이노 나노 보드를 시리얼 명령으로 제어하는 코드를, 처음부터 끝까지 AI와의 대화만으로 만든 과정입니다. 1부에서는 하드웨어 쪽 — 가장 단순한 기능에서 시작해 EEPROM 저장까지 기능을 쌓아올린 기록을 다룹니다.
0. 왜 이 글을 쓰나 (Before You Start)
하드웨어 코드를 AI에게 시키는 건 왠지 더 어려울 것 같지만, 방식은 웹 개발과 크게 다르지 않았습니다. 핵심은 한 번에 완성형을 요구하지 않고 작동하는 가장 작은 단위부터 시작해서 기능을 하나씩 얹어가는 것이었습니다. 아래는 실제 대화 순서 그대로 재구성한 기록입니다.
이 프로젝트가 뭔가요? 아두이노 나노 + 128x32 OLED로 시리얼 명령(@led1 on 같은)을 받아 8개 출력 핀을 제어하고, 상태를 EEPROM에 저장해뒀다가 재부팅 시 복원합니다. 2부에서는 여기에 Node.js 서버를 붙여 브라우저로도 제어하는 이야기가 이어집니다.
1. 가장 작은 것부터 (Serial → OLED)
첫 요청은 일부러 아주 좁게 잡았습니다. "시리얼로 받은 텍스트를 OLED에 표시한다" — 딱 이것 하나만요. 배선, 라이브러리, 핀 번호 같은 하드웨어 맥락을 프롬프트에 구체적으로 넣어줄수록 AI가 헤매지 않습니다.
Serial.readStringUntil('\n')으로 한 줄씩 읽어 display.println()으로 뿌리는 가장 단순한 골격이었습니다.
기능을 하나씩 얹기
여기서부터는 "완성된 스펙을 한 번에" 요청하지 않고, 화면에 결과를 확인할 때마다 딱 한 가지씩만 추가 요청했습니다. 이렇게 하면 중간에 뭔가 잘못돼도 원인을 바로 찾을 수 있습니다.
-
PROMPT: led on text를 받으면 내부 led를 켜고 led off를 받으면 내부 led를 끄는 동작을 추가해줘
➡️ RESULT: LED_BUILTIN 제어 로직이handleCommand()함수로 분리되어 들어옴 -
PROMPT: LED를 다른 포트로 8개를 확장해서 8개 외부 출력을 만들고 각 포트의 명령을 만들어줘
➡️ RESULT:@led1~@led8패턴을 파싱하는parseLedCommand()함수 + 핀 배열 등장 -
PROMPT: 텍스트가 길 때 자동 스크롤 효과는 어떤 기능이야? (설명 요청) → 좋은 기능이네 그것도 넣어주는데 10줄이 넘으면 오래된 데이터는 표시 안함으로 해주고 LED on/off 시에도 히스토리 형태 유지 해줘
➡️ RESULT: 먼저 개념을 물어본 뒤 채택 —millis()기반 non-blocking 마퀴 스크롤 + 10개 순환 히스토리 버퍼
2. 결과물 — 핀 구성 (Hardware Map)
대화를 거듭하며 늘어난 명령어를 실제 나노 보드 핀에 매핑하면 이렇게 됩니다. 시리얼(D0/D1)과 OLED I2C(A4/A5)를 피해서 D2~D9를 출력 8개로, D13을 블링크 내장 LED로 씁니다.
• D2 ➡️ @led1 • D3 ➡️ @led2 • D4 ➡️ @led3 • D5 ➡️ @led4
• D6 ➡️ @led5 • D7 ➡️ @led6 • D8 ➡️ @led7 • D9 ➡️ @led8
• D13 ➡️ @int-led (2초 블링크) • A4(SDA) · A5(SCL) ➡️ OLED 128x32 (I2C)
최종 시리얼 명령어 표
| 명령 | 동작 | 비고 |
|---|---|---|
@led1 on / off |
D2 출력 제어 | EEPROM 저장됨 |
@led2 ~ @led8 |
D3~D9 출력 제어 | 동일 패턴 |
@int-led on / off |
내장 LED 2초 블링크 시작/중지 | EEPROM 저장됨 |

댓글
댓글 쓰기