코디와 함께 만든 R2D2 🤖 8편
출처: Dev.to
Episode 8: 완전한 드로이드
“포스가 너와 함께하리라. 언제나.” 🌟
전체 승무원들이 작업실에 모여 있다. 한 솔로는 팔짱을 끼고, 루크는 씩씩하게 웃으며, C‑3PO는 손을 꼭 잡고 억제된 불안감을 드러낸다. 프린세스 레이아의 메시지가 OLED에 반복 재생되고 있다 — 텍스트만으로 재현된 것이지만, 말은 정확하다: “도와줘, 오비‑완 케노비.”
그리고 중앙에, 돔이 천천히 회전하고 파란‑흰색 LED가 숨을 쉬며, 스피커에서 조용한 환경 휘슬이 흐른다 — R2‑D2.
오비‑완: 조용히 “일곱 개의 에피소드. 일곱 개의 시스템. 이제 드로이드는 거의 완성됐어. 남은 건 하나, 최종 통합이야. 모든 시스템이 병렬로 동작을 멈추고 하나의 일관된 전체로 작동하기 시작하는 순간. R2‑D2가 부품들의 집합이 아니라 은하계 최고의 드로이드가 되는 순간 말이야.”
R2‑D2가 한 번 삑 소리를 낸다. 자신감 넘치고, 준비됐다.
오비‑완: “그리고… 포스. 와이파이.”
한 솔로가 코웃음한다.
한: “와이파이? 아주 신비롭군.”
🗂️ SIPOC — 완전한 드로이드
| 공급자 | 입력 | 프로세스 | 출력 | 고객 |
|---|---|---|---|---|
| 당신(제작자) | “모든 시스템을 통합하고 와이파이 원격 명령 인터페이스 추가” | Codey Deep Think 모드가 전체 아키텍처를 설계 후 코드 작성 | 모든 시스템이 통신하는 통합 상태 머신, 원격 명령용 와이파이 엔드포인트 | 완전한 R2‑D2 — 하나의 펌웨어, 모든 시스템이 조율된 형태 |
| ESP32‑S3 N16R8 | 16 MB 플래시, 8 MB PSRAM, 듀얼‑코어, 와이파이 | 듀얼‑코어 운영: 코어 0은 와이파이/네트워킹, 코어 1은 실시간 센서/모터/오디오 루프 | 와이파이가 실시간 제어 루프를 방해하지 않는 부드러운 동작 | 모든 R2‑D2 시스템 — 프로세서 시간 부족 없음 |
| Codey Deep Think 모드 | 복합 다파일 통합 프롬프트 | 응답에 시간이 더 걸리며 전체 아키텍처를 먼저 고민 | 시리즈 중 가장 깔끔하고 구조적으로 일관된 코드 | 장기 유지보수성 |
| 최종 배선도 | 7개 시스템 부품 목록 | Codey가 모든 연결, 보호 회로, 전원 레일을 포함한 마스터 다이어그램을 그림 | 완전한 R2‑D2 구축을 보여주는 단일 PDF | 작업실 벽 — 당신의 제작 로그 중 최고의 보석 |
최종 부품 목록 — R2‑D2의 모든 조각 🔧
C‑3PO가 일곱 에피소드를 기다리며 이 목록을 읽는 듯한 표정을 짓는다.
C‑3PO: “여덟 개의 영광스러운 — 때로는 무서운 — 에피소드에 걸쳐 축적된 완전한 재고 목록이야:”
| 부품 | 추가된 에피소드 | 용도 |
|---|---|---|
| ESP32‑S3 N16R8 | 5 | 두뇌 — 모든 시스템이 여기 연결 |
| SSD1306 OLED 128×64 | 5 | 홀로그램 디스플레이 — I2C (GPIO8/9) |
| NeoPixel 링 12 LED | 3 | 돔 라이트 — GPIO6 (레벨 시프터) |
| HC‑SR04 초음파 | 4 | 거리 감지 눈 — GPIO9/10 |
| PIR HC‑SR501 | 4 | 움직임 감지 — GPIO2 (인터럽트) |
| SG90 서보 | 6 | 돔 회전 — GPIO14 (레벨 시프터) |
| DC 기어 모터 × 2 | 6 | 휠 구동 — L298N 통해 |
| L298N 모터 드라이버 | 6 | 모터 제어, 5 V 레일 제공 |
| DFPlayer Mini | 7 | 오디오 재생 — UART2 (GPIO16/17) |
| 스피커 4Ω/8Ω | 7 | 음성 출력 |
| microSD 카드 (FAT32) | 7 | 오디오 파일 0001–0007.mp3 |
| 74AHCT125 레벨 시프터 | 3/6 | NeoPixel + 서보: 3.3 V → 5 V |
| 470Ω 저항 | 3 | NeoPixel 데이터 보호 |
| 1kΩ 저항 | 7 | DFPlayer RX 보호 |
| 100Ω 저항 | — | (버저, 현재 제거) |
| 100µF 커패시터 | 3 | NeoPixel 전원 디커플링 |
| 10µF 커패시터 | 7 | DFPlayer 전원 필터링 |
| 전압 분배기 (10k + 20k) | 5 | HC‑SR04 ECHO + PIR 출력: 5 V → 3.3 V |
| 9V 배터리 또는 2S LiPo | 6 | 모터 전원 레일 |
| USB 케이블 | 전체 | 프로그래밍 + 로직 전원 |
C‑3PO: “R2‑D2. 부품들로, 브레드보드 위에. 나는 이게 인상적이면서도 약간은 섬뜩하다고 생각한다.”
R2‑D2가 자부심 섞인 삑 소리를 낸다.
Deep Think 모드: 가장 현명한 길 🧠
요다가 의자에 몸을 기댄다.
요다: “이 프롬프트는 복잡하구나. 건드려야 할 파일이 많고, 통합해야 할 시스템도 많다. 그래서 — Deep Think 모드를 사용해야 한다. 시간이 더 걸리지만 결과는 더 현명해진다.”
루크: “Deep Think 모드가 뭐죠?”
요다: “Plan 모드의 형님이다. 단순히 계획만 하는 게 아니라 먼저 아키텍처를 깊게 분석한다. 엣지 케이스를 고려하고, 시스템 간 충돌을 찾아낸다. 그런 다음에야 코드를 쓴다.”
Codey에서 모드 드롭다운을 클릭하고 Deep Think(Pro 기능)를 선택한다. 그리고 최종 통합 프롬프트를 입력한다:
FINAL R2-D2 INTEGRATION — Deep Think mode
We have these existing header files for the ESP32-S3 N16R8:
- animations.h (NeoPixel dome: GPIO6 via 74AHCT125)
- sensors.h (HC-SR04: GPIO9 TRIG / GPIO10 ECHO; PIR: GPIO2)
- display.h (SSD1306 OLED: I2C SDA=GPIO8 / SCL=GPIO9 — NOTE: conflict!)
- motion.h (Servo: GPIO14; L298N: GPIO25-27, GPIO32-34)
- voice.h (DFPlayer Mini: UART2 TX=GPIO17 / RX=GPIO16)
- sounds.h (LEDC buzzer: now removed, GPIO freed)
CONFLICT TO RESOLVE:
HC-SR04 TRIG uses GPIO9. OLED I2C SCL also uses GPIO9.
These cannot share! Remap one of them.
Suggestion: Move HC-SR04 TRIG to GPIO11, ECHO to GPIO12.
Update sensors.h and the wiring diagram accordingly.
NEW FEATURE — Wi-Fi remote control:
Use ESP32-S3 Wi-Fi to create a simple HTTP server.
Endpoints:
GET /status → JSON with distance, motion, dome angle, current sound
GET /command/forward → drive forward for 2 seconds
GET /command/backward → drive backward for 2 seconds
GET /command/left → turn left for 1 second
GET /command/right → turn right for 1 second
GET /command/stop → stop motors immediately
GET /command/sound/N → play sound N (1-7)
GET /command/dome/N → move dome to angle N degrees
Use WiFiAP mode (R2-D2 creates its own access point):
SSID: "R2-D2"
Password: "beepboop"
Run HTTP server on Core 0. Real-time systems on Core 1.
FINAL r2d2-main.ino:
- Resolve the GPIO conflict
- Add wifi.h header for Wi-Fi + HTTP server
- Clean unified loop with clear comments
- All systems operational
- Serial output at 115200 showing all state transitions
Please think through the architecture fully before writing.
Deep Think 모드 분석 (Codey 응답)
[Deep Think analysis in progress...]
Architecture review:
1. GPIO CONFLICT IDENTIFIED:
GPIO9 cannot serve both HC-SR04 TRIG and I2C SCL.
Resolution: Remap I2C to SDA=GPIO4, SCL=GPIO5 (available on ESP32-S3).
This avoids touching sensors.h; only display.h changes:
Wire.begin(4, 5