ESP8266 개발 · 5 min read · Jan 20, 2026

ESP8266용 네트워크 애플리케이션 개발하기: 리눅스에서 Mongoose 사용하기

ESP8266 칩을 위한 네트워크 애플리케이션 개발을 시작하는 방법에 대해 논의해 보겠습니다. 리눅스에서 Mongoose Embedded Web Server를 사용할 것입니다. 저는 우분투를 사용할 것이지만, 모든 것은 다른 리눅스 배포판에 쉽게 적용될 수 있습니다.

누가 누군가

이 기사를 읽기 시작했으므로, 리눅스, ESP8266 및 Mongoose에 대해 알고 있다고 가정합니다. 그래서 짧은 소개만 하겠습니다.

ESP8266

Expressif에서 개발한 통합 WiFi가 있는 저렴한 칩입니다. 더 자세한 내용을 알고 싶다면 공식 사이트를 확인하세요.

Mongoose

Mongoose는 40kB 이하의 코어를 가진 완전한 다중 프로토콜 라이브러리입니다. Cesanta에서 개발했습니다. Cesanta 사이트에서 더 많은 정보를 찾아보세요.

리눅스

정말요? :-)

ESP8266을 컴퓨터에 연결하기

좋습니다. 먼저 ESP8266 칩을 컴퓨터에 연결해야 합니다. 여러 가지 방법으로 할 수 있습니다.

NodeMCU

NodeMCU 모듈이 있는 경우, 온보드 UART-USB 변환기를 사용하여 모듈을 USB를 통해 컴퓨터에 연결하기만 하면 됩니다. KISS!

외부 UART-USB 변환기로 연결하기

ESP 모듈에 내부 UART-USB 변환기가 없는 경우 외부 변환기가 필요합니다. 많은 종류가 있으니 구글링해 보세요.

리눅스와 호환되는 변환기를 선택하세요(기본적으로 대부분의 변환기가 호환됩니다) 그리고 3.3V 핀이 있는지 확인하세요. 기억하세요: 대부분의 UART-USB 변환기는 3.3V와 5V 핀을 모두 가지고 있지만, ESP를 5V 핀에 연결해서는 안 됩니다. 이 장치는 전압에 내성이 없으며 모듈이 손상될 수 있습니다.

이제 연결합니다 (ESP -> 변환기):

VCC -> 3.3V

GND -> GND

RX0 -> TX (RX 아님)

TX0 -> RX

CH_PD -> 3.3V

아두이노로 연결하기

UART-USB 변환기가 없지만 3.3V 핀이 있는 아두이노가 있다면 쉽게 연결할 수 있습니다:

  1. USB를 통해 아두이노를 컴퓨터에 연결합니다.
  2. 아두이노의 RESET을 GND에 연결합니다: 호스트 프로세서를 비활성화해야 하므로 UART-USB 모듈만 필요합니다.
  3. ESP를 연결합니다 (ESP -> 아두이노)
    1. VCC -> 3.3V
    2. GND -> GND
    3. RX0 -> RX0 (TX 아님)
    4. TX0 -> TX
    5. CH_PD -> 3.3V

연결 확인하기

연결이 정상이라면 ESP는 새로운 tty 장치로 나타납니다. 일반적으로 NodeMCU와 UART-USB 변환기를 통해 연결된 ESP는 /dev/ttyUSBx (x = 0, 1, 2 등)로 나타나고, 아두이노 버전은 /dev/ttyACMx (x = 0, 1, 2 등)으로 나타납니다.

dmesg | grep usb 명령어를 사용하여 장치를 찾을 수 있습니다.

예를 들어, NodeMCU를 연결한 후 다음과 같은 내용을 볼 수 있습니다:


[  1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0

보시다시피, NodeMCU는 이제 /dev/ttyUSB0로 사용할 수 있습니다.

최종 확인으로, 어떤 터미널을 사용하여 새 장치에 연결해 보세요. 저는 picocom을 사용할 것입니다. 이것은 경량 터미널입니다. 우분투에서는 다음과 같이 설치할 수 있습니다:

sudo apt install picocom

시도해 보세요:

picocom /dev/ttyUSB0 -b 115200

모든 것이 정상이라면, picocom 출력에서 “ 터미널 준비 완료 ”를 볼 수 있어야 합니다.

“접근 거부” 오류 수정하기

picocom이 “접근 거부”라고 말하면, 일반적으로 현재 사용자가 dialout 그룹의 구성원이 아니라는 의미입니다: 리눅스에서 직렬 포트에 접근하려면 사용자가 이 그룹의 구성원이어야 합니다.

다음 명령어를 실행하세요:

sudo usermod -aG docker $USER

명령어를 실행한 후 로그아웃하고 다시 로그인한 다음 ESP에 다시 연결해 보세요. “접근 거부”가 사라져야 합니다.

Mongoose 빌드하기

최신 Mongoose 릴리스를 여기에서 다운로드하세요.

Mongoose는 ESP8266 및 RTOS SDK에 대한 예제를 함께 제공됩니다. 튜토리얼 및 샘플 코드는 여기에서 찾을 수 있습니다.

참고: ESP8266에는 두 가지 버전의 SDK가 있습니다. 첫 번째는 비운영 체제(non-OS)이고 두 번째는 RTOS 기반입니다. 이 기사에서는 후자를 사용할 것입니다. 두 버전의 차이를 알고 싶다면 구글링하거나 공식 포럼의 이 답변을 읽어보세요.

예제를 빌드하기 위해 두 가지 옵션이 있습니다:

  1. 도커를 사용하고 준비된 도커 이미지를 사용합니다.
  2. SDK 및 툴체인을 컴퓨터에 설치합니다.

도커 사용하기

이 방법이 더 간단하고 더 나은 방법이라고 생각합니다. Cesanta의 도커 이미지는 ESP용 Mongoose를 빌드하는 데 필요한 모든 것을 포함하고 있습니다(그리고 Mongoose만이 아니라 모든 ESP 애플리케이션도 포함됩니다). 따라서 로컬에 소프트웨어를 설치할 필요가 없으며, 친구 및 동료와 코드를 쉽게 공유할 수 있어 그들이 귀하의 펌웨어를 빌드하고 정확히 동일한 결과를 얻을 수 있습니다.

도커 설치 가이드는 여기에서 확인할 수 있습니다. 시도해 보세요. 정말 간단하며, 리눅스에 도커 저장소를 추가하고 일반 프로그램처럼 apt로 설치하면 됩니다.

도커가 설치되면 mongoose/examples/ESP8266_RTOS 폴더로 이동하여 build.sh를 실행하세요.

첫 번째 빌드에서는 도커가 필요한 이미지를 다운로드합니다. 인터넷 속도에 따라 시간이 걸릴 수 있습니다. 그러나 build.sh가 완료되면 ./bin 폴더에 두 개의 .bin 파일이 생성됩니다.

그것이 펌웨어입니다. 당신은 해냈습니다!

로컬 SDK 사용하기

도커가 너무 간단하다면 또는 어떤 이유로 로컬에 설치된 도구를 사용하고 싶다면 그렇게 할 수도 있습니다.

조금 더 어렵고 지루하지만, 복잡한 것은 아닙니다. 특히 Cesanta가 당신을 위해 몇 가지 도구를 만들었고, 소스에서 빌드할 필요가 없기 때문에 더욱 그렇습니다.

작동 방식은 다음과 같습니다:

  1. 이 리포지토리에서 ESP RTOS SDK를 클론합니다. 예제 메이크파일은 /opt/ESP8266_RTOS_SDK 폴더에서 이를 찾으므로, 클론한 리포지토리를 이 폴더에 넣거나 예제를 빌드하기 전에 경로를 수정할 수 있습니다(아래 참조).
  2. 이 공개 폴더에서 xtensa-lx106-elf.tar.bz2를 다운로드합니다.
  3. xtensa-lx106-elf.tar.bz2 파일을 압축 해제합니다. 예를 들어, /opt 폴더에:

sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

  1. PATH 변수를 수정합니다. 예를 들어, 툴체인을 /opt 폴더에 압축 해제한 경우 다음 명령어를 사용하세요:

export PATH=/opt/xtensa-lx106-elf/bin:$PATH

(이 명령어를 .bashrc 또는 .profile 폴더에 추가하여 시스템 재부팅 후에도 변경 사항을 유지하는 것이 좋습니다.)

이제 다음 명령어를 실행하세요:

$ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # 여기에 SDK 경로를 입력하세요
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0

이제 모든 것이 올바르게 설치되었다면 ./bin 폴더에 펌웨어가 생성될 것입니다.

당신은 다시 해냈습니다!

ESP 플래싱하기

ESP8266을 플래싱하기 위해 사용할 수 있는 도구가 많이 있습니다. 우리는 esptool을 사용할 것입니다. 사용하려면 이 리포지토리를 클론하고 esptool.py의 경로를 PATH 변수에 추가하세요(선택 사항이며, 편리합니다).

이제 picocom을 연결 해제하세요(아직 연결되어 있다면, 힌트: Ctrl+A; Ctrl+D를 눌러 종료하세요) 그리고 다음을 실행하세요:

esptool.py --port /dev/ttyUSB0 --baud 230400 \  
   write_flash --flash_mode=dio --flash_size=4m \  
   0x00000 ${BIN_PATH}/eagle.flash.bin \  
   0x20000 ${BIN_PATH}/eagle.irom0text.bin \  
   0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin

중요한 참고 사항: 모듈이 NodeMCU가 아닌 경우 플래싱하기 전에 GPIO0을 접지해야 합니다(접지하면 모듈이 플래싱 모드로 전환됩니다). 플래싱 후 GPIO0의 접지를 해제하고 ESP를 재시작하세요.

오류가 발생하지 않았다면 다음과 같은 출력을 볼 수 있습니다:

Connecting...  

Erasing flash...  

Took 0.58s to erase flash block  

Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...  

Erasing flash...  

Took 2.02s to erase flash block  

Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...  

Erasing flash...  

Took 0.11s to erase flash block  

Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...  

Leaving...

준비 완료! 이제 장치가 귀하의 펌웨어로 플래싱되었습니다.

첫 결과

이제 “Mongoose” WiFi 네트워크가 나타나는 것을 볼 수 있어야 합니다. 예제는 AP를 설정합니다. 비밀번호 “Mongoose”를 사용하여 연결한 후, http://192.168.4.1/로 이동하면 “Hello, world” 인사 페이지를 볼 수 있습니다.

축하합니다! ESP8266에서 웹 서버를 실행했습니다!

다음 단계

다음 단계는 여러분에게 달려 있습니다. 설명된 예제를 시작점으로 사용할 수 있습니다.

그의 user_main.c 파일을 살펴보세요. WiFi 액세스 포인트를 설정하고 웹 서버를 시작합니다. AP 모드를 스테이션 모드로 쉽게 변경하고(귀하의 WiFi 네트워크에 연결) Mongoose API를 사용하여 원하는 것을 구현할 수 있습니다. 이것은 Mongoose를 사용하는 일반적인 방법이므로, 다른 Mongoose 예제를 사용하여 프로그램을 빌드하고 ESP 장치에서 http, tcp, udp, mqtt 및 더 많은 기능을 사용할 수 있습니다.

Espressif 문서(예: 이 문서)를 사용하여 ESP8266 WiFi 모듈(및 WiFi만이 아님)을 제어하는 방법을 배우고, Mongoose 문서를 통해 Mongoose 기능을 탐색하세요.

펑크는 죽지 않았다!

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.