
글쓴이: Denis Nuțiu
최근 저는 AliExpress에서 약 4달러에 NodeMCU 보드를 하나 구매했습니다. 이유는 단 하나였습니다. 사람들이 ESP8266에 대해 그렇게 열광하는 이유가 무엇인지 직접 확인해보고 싶었기 때문입니다.
NodeMCU란 무엇인가?
NodeMCU는 오픈소스 IoT 플랫폼입니다. Espressif Systems의 ESP8266 Wi-Fi SoC 위에서 동작하는 펌웨어와, ESP-12 모듈을 기반으로 한 하드웨어로 구성되어 있습니다.

출처: ESP8266 Datasheet
Arduino UNO와 비교하면, ESP8266은 CPU 성능과 가격 면에서 확실히 앞서 있습니다. 구체적으로 속도는 500% 더 빠르고, 가격은 82% 더 저렴하며, 무엇보다 Wi-Fi 연결 기능까지 기본으로 탑재하고 있습니다.
Espressif 공식 웹사이트를 방문했을 때는 방대한 문서와 자료가 제공되어 놀랐습니다. 예를 들어, 안드로이드 애플리케이션을 통해 ESP8266에 Wi-Fi 연결을 지시할 수도 있습니다. 앱이 SSID와 비밀번호를 패킷 형태로 전송하면, ESP8266이 이를 스니핑하여 자동으로 네트워크에 접속하는 방식입니다. 이 기능은 SmartConfig라고 불리며, Texas Instruments가 처음 고안했습니다.
이 글에서는 Espressif RTOS SDK에서 제공하는 SmartConfig 예제를 설정하고 실행하는 과정을 단계별로 안내합니다.
준비물
1단계: 개발용 VirtualBox 환경 설정
- VirtualBox를 다운로드하고 Ubuntu Server를 설치합니다. 비교적 간단하지만, 익숙하지 않다면 검색이나 그래픽 단계별 가이드를 참고하세요. OS 설치 경험 자체가 유용한 스킬이 됩니다.
팁: VirtualBox에서 디스크를 선택할 때는 '동적 할당(Dynamically Allocated)' 방식으로 최소 50GB 이상 설정하세요. 나중에 골치 아픈 일을 크게 줄여줍니다. - 가상 머신 내부에서 인터넷 접속이 가능한지 확인하고 DNS 서버를 구성합니다.

머신 우클릭 → 설정(Settings) → 네트워크(Network)
DNS 서버는 아래 예시처럼 설정할 수 있습니다.
dns-nameservers 8.8.8.8 8.8.4.4
Google에 ping이 정상적으로 응답한다면 준비 완료입니다!
(선택 사항) OpenSSH와 Samba 서버를 설치합니다. 이후 작업이 훨씬 편리해집니다.
(선택 사항) 포트 포워딩을 활성화합니다. 가상 머신에 직접 SSH 접속하려면 포트 포워딩이 필요합니다. 예를 들어 호스트 머신의 2222번 포트를 가상 머신의 22번 포트로 매핑하는 식입니다.

포트 포워딩 활성화: 설정(Settings) → 네트워크(Network) → 포트 포워딩(Port Forwarding)
포트 포워딩이 설정되었다면, 호스트 머신에서 아래처럼 가상 머신으로 SSH 접속할 수 있습니다.

FIG1: ssh -p 2020 denis@localhost
참고: Windows 사용자라면 가상 머신에 SSH 접속할 때 PuTTY가 필요합니다.
- NodeMCU를 연결한 뒤 다음 명령어를 실행합니다.
tail -f /var/log/kern.log
정상이라면 디바이스가 /dev/ttyUSB0로 인식된 로그를 확인할 수 있습니다. 아무 변화가 없다면 가상 머신에 USB 장치를 추가해야 합니다. USB 추가 후에는 장치를 분리했다가 다시 연결하세요.

USB 추가: 설정(Settings) → 포트(Ports) → USB
여기까지 잘 따라오셨다면 축하합니다! 이제 SDK를 컴파일하고 SmartConfig 예제를 실행할 준비가 끝났습니다.
2단계: SDK 컴파일 및 보드 플래싱
- 필요한 패키지를 설치합니다. 이 정보는 SDK의 readme.md 파일에서도 확인할 수 있습니다.
sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial sed git unzip bash help2man wget bzip2 libtool-bin
새 폴더를 만들고 이동합니다.
mkdir Development && cd Development오픈 SDK를 클론합니다.
git clone --recursive https://github.com/pfalcon/esp-open-sdk.gitmake를 실행합니다.
make주의: 이 단계는 상당히 오래 걸립니다. 인내심을 가지고 기다려 주세요. 제 가상 머신에서는 약 50분이 걸렸습니다. 실행 전 반드시 인터넷에 연결되어 있고 DNS가 올바르게 설정되어 있는지 확인하세요. Google 접속이 차단된 지역이라면 다른 사이트로 ping 테스트를 하면 됩니다.

성공적인 ping 명령: $ ping medium.comping이 정상이면 창을 최소화하고 좋아하는 드라마 한 편을 보고 와도 좋습니다. 약 40분 후 돌아오세요. 단, 컴퓨터가 절전 모드로 전환되지 않도록 주의하세요.
SDK 빌드가 완료되면 PATH에 경로를 추가하라는 메시지가 표시됩니다. 다음 명령어로 처리할 수 있습니다.
echo 'export PATH=/home/denis/Development/esp-open-sdk/xtensa-lx106-elf/bin:$PATH' >> ~/.profile
이 명령은 해당 문자열을 ~/.profile 파일 끝에 추가합니다. 이제 아래 명령을 실행해 보세요.
xtensa-lx106-elf-gcc --version
버전 정보가 정상 출력되면 준비 완료입니다!
보드를 테스트합니다.
NodeMCU를 연결하고 lsusb를 실행해 장치가 인식되는지 확인한 뒤, esptool.py chip_id를 실행하세요. 보드의 칩 ID가 표시될 것입니다.

esptool.py chip_idESP8266_RTOS_SDK를 클론합니다.
git clone https://github.com/espressif/ESP8266_RTOS_SDK.gitSDK 경로와 BIN 경로를 환경 변수로 등록합니다.
echo 'export SDK_PATH=/home/denis/Development/ESP8266_RTOS_SDK' >> ~/.profileecho 'export BIN_PATH=/home/denis/Development/ESP8266_RTOS_SDK/bin' >> ~/.profileSmartConfig 예제를 컴파일합니다.
cd /home/denis/Development/ESP8266_RTOS_SDK/examples/smart_config/chmod +x ./gen_misc.sh./gen_misc.sh질문에는 기본값으로 답하다가 SPI_SIZE_MAP 항목에서만 4를 입력하세요. NodeMCU의 플래시 용량이 32Mbit(= 4MB)이기 때문입니다. SPI_SPEED는 3(80MHz)로 선택해도 됩니다.
컴파일이 성공하면 다음과 같은 결과가 출력됩니다.
!!!SDK_PATH: /home/denis/Development/ESP8266_RTOS_SDKBIN_PATH: /home/denis/Development/ESP8266_RTOS_SDK/bin No boot needed.Generate eagle.flash.bin and eagle.irom0text.bin successully in BIN_PATHeagle.flash.bin — — — →0x00000eagle.irom0text.bin — →0x20000!!!보드에 펌웨어를 플래싱합니다.
cd $BIN_PATHesptool.py erase_flashesptool.py write_flash 0x00000 $BIN_PATH/eagle.flash.bin 0x20000 $BIN_PATH/eagle.irom0text.bin 0x3FC000 $BIN_PATH/esp_init_data_default.bin플래싱 후 보드를 재부팅하면 LED 깜빡임 없이 조용히 대기 상태로 진입하는 것이 정상입니다.
3단계: 스마트폰 앱으로 Wi-Fi 연결하기
- Android 애플리케이션
- iPhone 애플리케이션

안드로이드 기기에서 캡처한 화면
앱을 실행한 뒤, 스마트폰이 Wi-Fi 공유기(AP)에 연결되어 있는지 확인하고 비밀번호를 입력한 후 확인 버튼을 누릅니다. 잠시 후 ESP8266이 자동으로 해당 네트워크에 접속될 것입니다. 여기까지 왔으면 성공입니다. 끝까지 따라와 주셔서 축하드립니다!
마무리하며
ESP8266-RTOS-SDK로 더 많은 것을 개발해 보고 싶다면 공식 웹사이트를 방문해 보세요. 방대한 자료와 문서를 만날 수 있으며, SDK 폴더 안에 포함된 다른 예제들도 살펴볼 것을 추천합니다.
긴 글을 읽어 주셔서 감사합니다. 저에게 연락하고 싶으시다면 Twitter(@MetonymyQT)로 메시지를 보내 주세요.
참고 자료
- ESP8266 Overview
- ESP8266 Resources
- FreeRTOS Website
무료로 코딩을 배워보세요. freeCodeCamp의 오픈소스 커리큘럼은 이미 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 지금 바로 시작해 보세요.