본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 07. 23:23

Codey와 함께하는 R2-D2 제작 🤖 Ep.8

요약

R2-D2 제작 프로젝트의 마지막 단계로, ESP32-S3 기반의 모든 시스템을 하나로 통합하는 과정을 다룹니다. Codey의 Deep Think 모드를 활용하여 복잡한 아키텍처를 분석하고 Wi-Fi 원격 명령 인터페이스를 통합하는 방법을 설명합니다.

핵심 포인트

  • Deep Think 모드를 통한 시스템 아키텍처 심층 분석
  • ESP32-S3 기반의 통합 상태 머신(State Machine) 구축
  • Wi-Fi 엔드포인트를 활용한 원격 명령 인터페이스 추가
  • 복잡한 코드 통합 시 엣지 케이스 식별 및 충돌 방지

에피소드 8: 완성된 드로이드

"포스가 너와 함께하기를. 언제나." 🌟

_전체 크루가 워크숍에 서 있다. 팔짱을 낀 Han Solo. 활짝 웃고 있는 Luke. 불안함을 간신히 억누르며 두 손을 맞잡은 C-3PO. OLED 화면에는 Princess Leia의 메시지가 반복된다 — 텍스트로만 재현되었지만, 내용은 정확하다: "도와주세요, Obi-Wan Kenobi."

그리고 중앙에는 돔이 천천히 회전하고, 청백색 LED가 숨을 쉬듯 깜빡이며, 스피커에서는 조용한 앰비언트 휘파람 소리가 흘러나온다 — 바로 R2-D2이다.

OBI-WAN: 조용하게 "일곱 개의 에피소드. 일곱 개의 시스템. 그리고 이제, 드로이드가 거의 완성되었다. 이제 한 가지가 남았다 — 마지막 통합(Integration). 모든 시스템이 병렬로 작동하는 것을 멈추고 하나의 일관된 전체로서 작동하기 시작하는 순간이다. R2-D2가 단순한 부품들의 집합을 넘어 은하계 최고의 드로이드가 되는 순간 말이다."

R2-D2가 한 번 비프음을 낸다. 자신만만하게. 준비가 되었다는 듯이.

OBI-WAN: "그리고 그다음은 — 포스(The Force). Wi-Fi다."

Han Solo가 코웃음을 친다.

HAN: "Wi-Fi라니. 아주 신비롭군."

🗂️ SIPOC — 완성된 드로이드

공급자 (Suppliers)입력 (Inputs)프로세스 (Process)출력 (Outputs)고객 (Customers)
당신 (제작자)"모든 시스템 통합 + Wi-Fi 원격 명령 인터페이스 추가"Codey의 Deep Think 모드가 코드를 작성하기 전 전체 아키텍처를 계획함모든 시스템이 통신하는 통합 상태 머신(State Machine), 원격 명령을 위한 Wi-Fi 엔드포인트완성된 R2-D2 — 하나의 펌웨어로 모든 시스템이 조율됨
...

최종 부품 인벤토리 — R2-D2의 모든 조각 🔧

C-3PO가 이 목록을 읽기 위해 일곱 에피소드 동안 기다려온 사람 같은 태도로 데이터패드를 꺼낸다.

C-3PO: "영광스러웠던 — 때로는 공포스러웠던 — 여덟 에피소드 동안 축적된 전체 인벤토리입니다:"

부품 (Component)추가된 에피소드용도
ESP32-S3 N16R85두뇌 — 모든 시스템이 여기에 연결됨
...

C-3PO: "R2-D2. 부품 단위로. 브레드보드 위에. 저는 이것이 인상적이면서도 다소 불안하군요."

R2-D2가 마치 자랑스러워하는 듯한 비프음을 낸다.

Deep Think 모드: 가장 현명한 경로 🧠

Yoda가 의자에 자리를 잡고 앉는다.

YODA: "복잡한 프롬프트구나. 건드려야 할 파일이 많다. 통합해야 할 시스템도 많고. 이를 위해 — Deep Think 모드를 사용해야 한다. 시간이 더 걸리겠지만. 결과는 더 현명할 것이다."

LUKE: "Deep Think 모드가 뭐예요?"

YODA: "Plan 모드의 형님이다. 단순한 계획이 아니라 — 먼저 아키텍처 (Architecture)에 대한 심층 분석을 수행한다. 엣지 케이스 (Edge cases)를 고려할 것이다. 시스템 간의 충돌을 식별할 것이다. 오직 그 후에야, 코드를 작성한다."

Codey에서 모드 드롭다운을 클릭하고 Deep Think (Pro 기능)를 선택하세요. 그런 다음 최종 통합 프롬프트를 입력합니다:

최종 R2-D2 통합 — Deep Think 모드

우리는 ESP32-S3 N16R8을 위한 다음과 같은 기존 헤더 파일들을 가지고 있습니다:
...

Deep Think 모드 분석 (Codey의 응답)

[Deep Think 분석 진행 중...]

아키텍처 리뷰 (Architecture review):
...

생성된 wifi.h

// wifi.h — R2-D2 Wi-Fi 원격 제어
// ESP32-S3 액세스 포인트 (Access Point): SSID "R2-D2", 비밀번호 "beepboop"
// 포트 80의 HTTP 서버 — Core 0에서 실행
...

최종 r2d2-main.ino

// r2d2-main.ino — R2-D2 완성
// ESP32-S3 N16R8 | 모든 시스템 작동 중
// Core 0: Wi-Fi + HTTP 서버
...

최종 마스터 배선도 🧭

C-3PO가 심호흡을 하고, 상황에 걸맞은 격식을 갖추어 전체 배선도를 제시한다.

C-3PO: "최종 배선도입니다. 모든 부품. 모든 전선. 모든 보호 회로. 모든 전원 레일 (Power rail). PDF로 다운로드 가능합니다. 인쇄 가능하고, 액자에 넣을 수도 있죠. 저는... 진심으로 이것이 자랑스럽습니다."

R2-D2 완성 빌드 — 마스터 배선도
ESP32-S3 N16R8 | 모든 시스템
════════════════════════════════════════════════════════════════════

전원 레일 1 — 로직 (LOGIC) (USB 5V가 ESP32-S3에 의해 3.3V로 조절됨):
  USB 5V → ESP32-S3 VIN
  ESP32 3V3 출력 → (외부 연결 없음 — 3.3V는 내부적으로 유지됨)
  ESP32 GND → 공통 GND 레일

전원 레일 2 — 5V 주변 장치 (L298N의 9V로부터 내부 레귤레이터 사용):
  9V 배터리 (+) → L298N: VS
  9V 배터리 (−) → GND (ESP32 GND와 공통!)
  L298N 5V 출력 → 서보 (Servo) VCC (빨간색), 74AHCT125 VCC, DFPlayer VCC
  L298N GND → 서보 (Servo) GND, 74AHCT125 GND, DFPlayer GND

I2C BUS (충돌 해결됨: SDA=GPIO4, SCL=GPIO5):
ESP32 GPIO4 (SDA) ──── OLED SDA
ESP32 GPIO5 (SCL) ──── OLED SCL
ESP32 3V3 ──── OLED VCC (100µF 커패시터 (cap)를 통해 GND로 연결)

NEOPIXEL DOME (레벨 시프터 (level shifter)를 통한 5V 로직):
ESP32 GPIO6 ──── 74AHCT125 A1 ──── NeoPixel DIN
L298N 5V ──── NeoPixel 5V + 100µF 커패시터 (cap)+
GND ──── NeoPixel GND + 100µF 커패시터 (cap)−
(74AHCT125 Y1 출력과 NeoPixel DIN 사이에 470Ω 저항 연결)

HC-SR04 초음파 센서 (5V 센서, ECHO에 전압 분배기 (voltage divider) 적용):
ESP32 GPIO9 (TRIG) ──────────────── HC-SR04 TRIG
HC-SR04 ECHO (5V) ── 10kΩ ──┬──── ESP32 GPIO10
└──── 20kΩ ──── GND

PIR 모션 센서 (5V 출력, 전압 분배기 (voltage divider) 적용):
L298N 5V ──── PIR HC-SR501 VCC
GND ──── PIR HC-SR501 GND
PIR OUT (5V) ── 10kΩ ──┬──── ESP32 GPIO2
└──── 20kΩ ──── GND

서보 (SERVO) — 돔 회전 (레벨 시프터 (level shifter)를 통한 5V 신호):
ESP32 GPIO14 ──── 74AHCT125 A2 ──── 서보 신호 (주황색)
L298N 5V ──── 서보 VCC (빨간색)
GND ──── 서보 GND (갈색)

L298N 모터 드라이버 (MOTOR DRIVER):
ESP32 GPIO25 ──── L298N IN1
ESP32 GPIO26 ──── L298N IN2
ESP32 GPIO27 ──── L298N ENA (PWM)
ESP32 GPIO32 ──── L298N IN3
ESP32 GPIO33 ──── L298N IN4
ESP32 GPIO34 ──── L298N ENB (PWM)
L298N OUT1,2 ──── DC 모터 왼쪽
L298N OUT3,4 ──── DC 모터 오른쪽

DFPLAYER MINI 오디오:
L298N 5V ──── DFPlayer VCC + 10µF 커패시터 (cap)+
GND ──── DFPlayer GND + 10µF 커패시터 (cap)−
ESP32 GPIO17 ── (1kΩ) ─── DFPlayer RX
DFPlayer TX ──── ESP32 GPIO16
DFPlayer SPK1 ── 스피커 +
DFPlayer SPK2 ── 스피커 −

색상 코드 (마스터):
RED = 5V / VIN
ORANGE = 9V 배터리 레일 (battery rail)
PURPLE = 3.3V 로직 (logic)
BLACK = GND (공통 레일, common rail)
GREEN = NeoPixel 데이터 (레벨 시프팅 (level-shifted) 5V)
BLUE = 서보 신호 (Servo signal, 레벨 시프팅 (level-shifted) 5V)
YELLOW = 모터 방향 핀 (Motor direction pins, IN1-IN4)
WHITE = 모터 PWM 활성화 핀 (Motor PWM enable pins, ENA, ENB)
CYAN = I2C SDA (GPIO4)
PINK = I2C SCL (GPIO5)
BROWN = HC-SR04 TRIG (GPIO9)
VIOLET = 분압기 (divider)를 거친 HC-SR04 ECHO (GPIO10)
GREY = 분압기 (divider)를 거친 PIR 출력 (GPIO2)
MAROON = DFPlayer UART (TX=GPIO17, RX=GPIO16)

전체 연결 표 (COMPLETE Connection Table):
┌──────────────────────┬──────────────────────────────────────────┐
│ From (출발지) │ To (도착지) │
├──────────────────────┼──────────────────────────────────────────┤
│ USB 5V │ ESP32-S3 VIN │
│ 9V Battery (+) │ L298N VS │
│ 9V Battery (−) │ L298N GND + ESP32 GND (공통, common) │
│ L298N 5V │ Servo VCC, 74AHCT125 VCC, DFPlayer VCC │
│ ESP32 GPIO4 (SDA) │ OLED SDA │
│ ESP32 GPIO5 (SCL) │ OLED SCL │
│ ESP32 3V3 │ OLED VCC (+ GND로 연결된 100µF 커패시터) │
│ ESP32 GPIO6 │ 74AHCT125 A1 → (470Ω) → NeoPixel DIN │
│ ESP32 GPIO9 (TRIG) │ HC-SR04 TRIG │
│ HC-SR04 ECHO (5V) │ 10k+20k 분압기 (divider) → ESP32 GPIO10 │
│ L298N 5V │ PIR VCC │
│ PIR OUT (5V) │ 10k+20k 분압기 (divider) → ESP32 GPIO2 │
│ ESP32 GPIO14 │ 74AHCT125 A2 → 서보 신호 (주황색, orange) │
│ ESP32 GPIO25 │ L298N IN1 │
│ ESP32 GPIO26 │ L298N IN2 │
│ ESP32 GPIO27 (PWM) │ L298N ENA │
│ ESP32 GPIO32 │ L298N IN3 │
│ ESP32 GPIO33 │ L298N IN4 │

│ ESP32 GPIO34 (PWM) │ L298N ENB

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0