1편에서는 Windows Terminal에 Arduino CLI 환경을 구성하고 Espressif의 Arduino-ESP32 Core를 설치하는 방법을 알아보았습니다.
이번에는 실제 ESP32-WROOM-32E 프로젝트를 대상으로 컴파일, firmware 업로드, Serial Monitor, 라이브러리 관리를 수행해 보겠습니다.
그리고 Arduino CLI를 사용하는 중요한 이유 중 하나인 반복적인 컴파일 시간을 줄이는 방법도 함께 살펴보겠습니다.
1. 테스트용 ESP32 프로젝트 만들기
예를 들어 다음 위치에서 프로젝트를 만들어 보겠습니다.
mkdir C:\Arduino\ESP32Test
cd C:\Arduino\ESP32Test
Arduino CLI에는 새로운 스케치를 만드는 기능도 있습니다.
arduino-cli sketch new ESP32Test
다음과 같은 프로젝트가 생성됩니다.
C:\Arduino\ESP32Test
└── ESP32Test
└── ESP32Test.ino
ESP32Test.ino에 간단한 코드를 작성합니다.
void setup() {
Serial.begin(115200);
Serial.println("ESP32-WROOM-32E started");
}
void loop() {
Serial.println("Hello from ESP32");
delay(1000);
}
2. ESP32-WROOM-32E용으로 컴파일하기
프로젝트 폴더로 이동합니다.
cd C:\Arduino\ESP32Test\ESP32Test
이제 다음 명령으로 컴파일합니다.
arduino-cli compile --fqbn esp32:esp32:esp32 .
마지막의 .은 현재 디렉터리를 의미합니다.
즉 현재 폴더에 있는 Arduino 프로젝트를 다음 보드 설정으로 컴파일하라는 의미입니다.
esp32:esp32:esp32
전체적인 과정은 다음과 같습니다.
ESP32Test.ino
│
↓
Arduino CLI
│
↓
Arduino-ESP32 Core
│
↓
Compiler
│
↓
Firmware
Arduino IDE에서 Verify 버튼을 누르던 작업을 명령 한 줄로 수행한 것입니다.
3. ESP32에 firmware 업로드하기
먼저 연결된 COM 포트를 확인합니다.
arduino-cli board list
ESP32가 COM5에 연결되어 있다고 가정하겠습니다.
컴파일된 firmware를 업로드하려면:
arduino-cli upload -p COM5 --fqbn esp32:esp32:esp32 .
를 실행합니다.
컴파일과 업로드를 연속해서 실행할 수도 있습니다.
arduino-cli compile --fqbn esp32:esp32:esp32 .
arduino-cli upload -p COM5 --fqbn esp32:esp32:esp32 .
Arduino IDE에서 하던:
Verify
↓
Upload
과정이 두 개의 명령으로 바뀐 것입니다.
4. Serial Monitor 사용하기
Arduino IDE를 열지 않고 ESP32가 보내는 Serial 메시지를 확인할 수도 있습니다.
arduino-cli monitor -p COM5
baud rate가 115200이라면 다음과 같이 지정합니다.
arduino-cli monitor -p COM5 --config baudrate=115200
앞서 작성한 프로그램이 실행되고 있다면 다음과 같은 메시지가 나타납니다.
ESP32-WROOM-32E started
Hello from ESP32
Hello from ESP32
Hello from ESP32
...
따라서 기본적인 ESP32 개발 과정 전체를 Windows Terminal 안에서 처리할 수 있습니다.
Code 수정
↓
Compile
↓
Upload
↓
Serial Monitor
↓
Code 수정
↓
...
5. Arduino CLI에서 라이브러리 검색하기
Arduino CLI에서는 Arduino IDE의 Library Manager에 해당하는 기능도 사용할 수 있습니다.
현재 설치된 라이브러리를 확인하려면:
arduino-cli lib list
특정 라이브러리를 검색하려면:
arduino-cli lib search "Adafruit SHT31"
라이브러리를 설치하려면:
arduino-cli lib install "Adafruit SHT31 Library"
라이브러리 index를 업데이트하려면:
arduino-cli lib update-index
설치된 라이브러리를 업데이트하려면:
arduino-cli lib upgrade
따라서 Board Manager뿐 아니라 Library Manager의 작업도 대부분 Terminal에서 수행할 수 있습니다.
6. Arduino CLI의 중요한 장점 — 반복 컴파일 줄이기
규모가 큰 ESP32 프로젝트에서는 컴파일 시간이 무시하기 어려워집니다.
예를 들어 프로젝트가 다음과 같은 구조라고 생각해 보겠습니다.
Main Firmware
│
├── WiFi
├── BLE
├── HTTPClient
├── Sensor Library
├── Display Library
└── 기타 Libraries
첫 번째 빌드에서는 프로젝트에 필요한 여러 소스 파일과 라이브러리, Core를 컴파일해야 합니다.
개념적으로 보면:
Application source ──→ Compile ──┐
ESP32 Core ──────────→ Compile ──┤
WiFi ────────────────→ Compile ──┤
BLE ─────────────────→ Compile ──┤→ Link → Firmware
Sensor Library ──────→ Compile ──┤
Other Libraries ─────→ Compile ──┘
프로젝트가 클수록 시간이 오래 걸립니다.
그런데 실제 firmware 개발에서는 모든 파일을 매번 수정하지 않습니다.
대부분은:
센서 처리 코드 한 부분 수정
↓
컴파일
↓
테스트
↓
조건문 수정
↓
컴파일
↓
테스트
처럼 일부 application code만 반복적으로 변경합니다.
ESP32 Core나 사용 중인 라이브러리는 그대로인 경우가 많습니다.
이런 경우 변경되지 않은 부분의 기존 컴파일 결과를 재사용할 수 있다면 전체 빌드 시간을 크게 줄일 수 있습니다.
7. Build Cache와 증분 빌드
첫 번째 컴파일에서는 필요한 파일들을 정상적으로 컴파일합니다.
FIRST BUILD
Application ─────────→ Compile
ESP32 Core ──────────→ Compile
WiFi ────────────────→ Compile
BLE ─────────────────→ Compile
Sensor Library ──────→ Compile
↓
Link
↓
Firmware
그 과정에서 재사용할 수 있는 빌드 결과가 남습니다.
이후 라이브러리나 ESP32 Core에 변화가 없고 application source 일부만 변경되었다면 개념적으로:
NEXT BUILD
Modified source ─────→ Compile ──┐
│
ESP32 Core ──────────→ Reuse ───┤
WiFi ────────────────→ Reuse ───┤
BLE ─────────────────→ Reuse ───┤→ Link → Firmware
Sensor Library ──────→ Reuse ───┘
와 같은 방식으로 불필요한 반복 컴파일을 줄일 수 있습니다.
따라서 라이브러리 자체가 변경되지 않았다면 매번 모든 라이브러리를 처음부터 다시 컴파일하는 작업을 줄일 수 있습니다.
ESP32처럼 Core와 라이브러리가 큰 플랫폼에서는 이런 차이가 반복적인 firmware 개발 과정에서 상당히 중요합니다.
8. Build Path를 유지하기
반복적인 개발에서는 build directory를 명시적으로 지정하는 것도 유용합니다.
예를 들어:
arduino-cli compile `
--fqbn esp32:esp32:esp32 `
--build-path .\build `
.
PowerShell의 ` 문자는 명령을 다음 줄로 이어 쓰기 위한 것입니다.
한 줄로 작성하면:
arduino-cli compile --fqbn esp32:esp32:esp32 --build-path .\build .
입니다.
프로젝트 구조는 다음과 같이 관리할 수 있습니다.
ESP32Project
│
├── ESP32Project.ino
│
├── source files
│
└── build
├── object files
├── libraries
└── firmware binaries
동일한 build directory를 유지하면 반복적인 개발에서 기존 빌드 결과를 관리하기도 쉬워집니다.
9. 언제 다시 컴파일되는가?
물론 모든 상황에서 이전 결과를 그대로 사용할 수 있는 것은 아닙니다.
다음과 같은 변화가 있으면 관련 소스가 다시 컴파일될 수 있습니다.
Library source 변경
ESP32 Arduino Core 변경
Board 설정 변경
Compiler option 변경
FQBN 변경
Build directory 삭제
Build/Cache 정리
예를 들어:
esp32:esp32:esp32
에서 다른 보드 설정으로 변경하면 기존 빌드 결과를 그대로 사용할 수 없는 부분이 생깁니다.
따라서 CLI를 이용한 반복 빌드의 핵심은 동일한 개발환경을 유지하면서 변경된 부분만 효율적으로 다시 빌드하는 것입니다.
10. 여러 ESP32에 같은 firmware 업로드하기
CLI의 또 다른 장점은 자동화입니다.
예를 들어 여러 ESP32 보드가 각각 다음 포트에 연결되어 있다고 가정하겠습니다.
COM5
COM6
COM7
PowerShell에서 다음과 같이 처리할 수 있습니다.
$ports = @("COM5", "COM6", "COM7")
foreach ($port in $ports) {
Write-Host "Uploading firmware to $port"
arduino-cli upload `
-p $port `
--fqbn esp32:esp32:esp32 `
.
}
한 번 컴파일한 firmware를 여러 동일한 보드에 순차적으로 업로드하는 작업을 자동화할 수 있습니다.
이는 한두 개의 개발보드를 테스트할 때보다 여러 개의 동일한 제품을 제작하는 단계에서 더욱 유용합니다.
11. Arduino CLI가 특히 유용한 경우
Arduino CLI는 단순한 프로젝트에서는 Arduino IDE보다 오히려 불편하게 느껴질 수도 있습니다.
하지만 다음과 같은 상황에서는 장점이 분명해집니다.
- ESP32 firmware를 자주 수정하고 컴파일하는 경우
- 규모가 큰 프로젝트에서 반복 빌드 시간을 줄이고 싶은 경우
- 동일한 firmware를 여러 보드에 업로드하는 경우
- 개발환경과 보드 옵션을 명령으로 명확하게 관리하고 싶은 경우
- PowerShell이나 Python으로 firmware 작업을 자동화하려는 경우
- Git이나 CI/CD 시스템과 firmware build를 연결하려는 경우
- 제품 생산 과정에서 firmware 업로드를 자동화하려는 경우
특히 개발보드 수준을 넘어 실제 하드웨어 제품을 제작하기 시작하면 CLI의 활용도가 높아집니다.
12. Arduino IDE와 CLI의 차이
Arduino IDE와 Arduino CLI는 서로 경쟁하는 도구라기보다 목적이 조금 다릅니다.
Arduino IDE는 사람이 직접 개발하기 편한 환경입니다.
코드 작성
→ 버튼 클릭
→ 컴파일
→ 업로드
→ Serial Monitor
반면 Arduino CLI는 반복 가능하고 자동화 가능한 개발환경을 만드는 데 강점이 있습니다.
Source Code
↓
Arduino CLI
↓
Incremental Build
↓
Firmware
↓
Automatic Upload
↓
Device Test
따라서 초기 개발 단계에서는 Arduino IDE를 사용하다가 프로젝트가 커지면서 CLI를 함께 사용하는 방법도 좋습니다.
13. 정리
ESP32-WROOM-32E를 사용하는 일반적인 프로젝트라면 Arduino CLI 개발 흐름은 생각보다 단순합니다.
환경을 한 번 설정한 뒤 실제 개발에서 반복적으로 사용하는 핵심 명령은 몇 개뿐입니다.
컴파일:
arduino-cli compile --fqbn esp32:esp32:esp32 .
업로드:
arduino-cli upload -p COM5 --fqbn esp32:esp32:esp32 .
Serial Monitor:
arduino-cli monitor -p COM5 --config baudrate=115200
그리고 반복적인 개발에서는:
arduino-cli compile --fqbn esp32:esp32:esp32 --build-path .\build .
처럼 build path를 관리할 수 있습니다.
Arduino CLI의 진짜 장점은 단순히 Arduino IDE를 열지 않아도 된다는 데 있지 않습니다.
더 중요한 것은 개발 과정을 명령으로 정의할 수 있다는 점입니다.
이를 통해 변경되지 않은 Core와 라이브러리의 빌드 결과를 활용해 반복 작업을 효율화하고,
코드 수정
↓
증분 빌드
↓
Firmware 생성
↓
업로드
↓
테스트
라는 개발 사이클을 빠르게 반복할 수 있습니다.
그리고 이 과정을 PowerShell, Python 등의 스크립트와 결합하면 결국 ESP32 firmware의 빌드부터 여러 제품에 대한 업로드와 테스트까지 자동화하는 개발·생산 환경으로 확장할 수 있습니다.
Arduino 프로젝트가 단순한 실험을 넘어 실제 제품 개발 단계로 발전하고 있다면 Arduino CLI를 익혀둘 가치가 충분합니다.
#ArduinoCLI #ESP32 #아두이노 #펌웨어개발 #JLCPCB
___________________________________________________________________________
이 글이 도움이 되셨다면 제 홈페이지(댓글에 링크)를 방문해 보세요.
홈페이지에서는 다음과 같은 다양한 콘텐츠를 만나실 수 있습니다.
· 기술 블로그와 학습 자료
· pcb 제작 강의와 최신 소식
· ESP32와 IoT 하드웨어 프로젝트
· KiCad PCB 설계 템플릿 (Github, Gumroad)
· 펌웨어 개발
배우고, 만들고, 함께 성장하는 메이커들을 위한 공간으로 계속 발전시켜 나가겠습니다.
'DIY Electronics' 카테고리의 다른 글
| 약 2달러의 Wi-Fi 6 ESP32 모듈 등장 — ESP32-C61-MINI-1 / MINI-1U 사용 가이드 (2) | 2026.09.02 |
|---|---|
| STM32에 ESP32-E22를 연결할 수 있을까? (1) | 2026.08.12 |
| ESP32-E22와 ESP32-H21 완전 정리 (1) | 2026.08.12 |
| 시제품 케이스 문제 해결 (2) | 2026.08.05 |
| ESP32-S31 등장! 차세대 RISC-V ESP32는 무엇이 달라졌을까? (1) | 2026.07.31 |










