WEB 콘트롤 아두이노 AI 개발프로젝트 Part 1 - 아두이노 AI를 이용해서 말로 코딩하기

1부 · 아두이노 / 2부 · 웹 제어 (Human + AI Pair Programming)

아두이노도 대화로 만들었다

Arduino C++ Adafruit_SSD1306 EEPROM Claude

OLED가 달린 아두이노 나노 보드를 시리얼 명령으로 제어하는 코드를, 처음부터 끝까지 AI와의 대화만으로 만든 과정입니다. 1부에서는 하드웨어 쪽 — 가장 단순한 기능에서 시작해 EEPROM 저장까지 기능을 쌓아올린 기록을 다룹니다.



0. 왜 이 글을 쓰나 (Before You Start)

하드웨어 코드를 AI에게 시키는 건 왠지 더 어려울 것 같지만, 방식은 웹 개발과 크게 다르지 않았습니다. 핵심은 한 번에 완성형을 요구하지 않고 작동하는 가장 작은 단위부터 시작해서 기능을 하나씩 얹어가는 것이었습니다. 아래는 실제 대화 순서 그대로 재구성한 기록입니다.

이 프로젝트가 뭔가요? 아두이노 나노 + 128x32 OLED로 시리얼 명령(@led1 on 같은)을 받아 8개 출력 핀을 제어하고, 상태를 EEPROM에 저장해뒀다가 재부팅 시 복원합니다. 2부에서는 여기에 Node.js 서버를 붙여 브라우저로도 제어하는 이야기가 이어집니다.

1. 가장 작은 것부터 (Serial → OLED)

첫 요청은 일부러 아주 좁게 잡았습니다. "시리얼로 받은 텍스트를 OLED에 표시한다" — 딱 이것 하나만요. 배선, 라이브러리, 핀 번호 같은 하드웨어 맥락을 프롬프트에 구체적으로 넣어줄수록 AI가 헤매지 않습니다.

💬 실제 프롬프트 아두이노 나노 보드에 OLED 128x32를 연결한 상태이고 com port에 print input text를 입력하면 그 값을 OLED에 디스플레이 하는 프로그램을 만들어줘
✅ 결과물 (RESULT) 필요 라이브러리(Adafruit_SSD1306, Adafruit_GFX)와 배선표(SDA→A4, SCL→A5)까지 포함한 완성 코드를 받았습니다. 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개 순환 히스토리 버퍼
💡 Tip 01
하드웨어 제약(보드 종류, 화면 크기, 핀 개수)을 첫 문장에 명시하면 되돌아오는 코드의 정확도가 크게 오릅니다.
💡 Tip 02
기능이 뭔지 잘 모르겠으면 "이런 게 있는데 뭐야?"라고 먼저 물어보고, 설명을 들은 뒤 "그럼 그것도 넣어줘"로 이어가면 됩니다.

2. 결과물 — 핀 구성 (Hardware Map)

대화를 거듭하며 늘어난 명령어를 실제 나노 보드 핀에 매핑하면 이렇게 됩니다. 시리얼(D0/D1)과 OLED I2C(A4/A5)를 피해서 D2~D9를 출력 8개로, D13을 블링크 내장 LED로 씁니다.

[ARDUINO NANO 핀 매핑 정보]
• 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 저장됨

댓글

이 블로그의 인기 게시물

WEB 콘트롤 아두이노 AI 개발 프로젝트 Part 2 - 웹 제어 (Human + AI Pair Programming)