본문 바로가기
Hardware/MCU(Arduino,ESP8266)

와이파이 모듈 ESP8266-01의 모든것

by lovey25 2020. 6. 12.

ESP8266은 Espressif systems라는 중국 업체가 설계한 마이크로 컨트롤러로 2014년에 출시된 칩입니다. ESP8266은 단순히 와이파이 모듈의 역할뿐만 아니라 아두이노와 같이 자체적으로 프로그램을 구동할 수 있는 그런 컨트롤러입니다. ESP8266은 마이크로 칩의 이름이지만 인터넷 상에서는 많은 다른 부품들이 그러하듯 모듈화 된 보드의 이름으로 통용되고 있습니다.

ESP8266이라고 하면 원래는 위 사진에서 보듯 손톱보다 작은 저 칩을 얘기하는 겁니다. 그런데 저같이 아두이노를 취미로 하는 분들은 인터넷으로 쉽게 접하기를 아래와 같이 보드에 조립된 모듈을 ESP8622라고 알고 있는데요. 사실은 이건 ESP8622 칩을 기반으로 사용하기 쉽도록 만든 여러 가지 형태의 모듈 중에 하나입니다. 아래 사진은 ESP시리즈 중 가장 기본적인 형태인 ESP-01이라는 모듈입니다.

ESP-01은 외부 센서 신호를 읽게 하는 용도로 사용할 수 있는 GPIO 핀이 4개입니다. 원래 ESP8622는 17개의 GPIO 핀이 있는 칩인데 활용할 수 있는 핀 수가 많이 부족합니다. 그래서 GPIO 핀이 11개가 있는 ESP-12 모듈도 많이 사용됩니다.

출처: AliExpress, All ELECTRONICS MALL

ESP-01 모듈

이제 모듈에 초첨을 두고 좀 더 상세한 내용 알아보겠습니다.

기본 스펙

  • 동작전압: 3.3V
  • WIFI 지원 규격: 802.11 b/g/n
  • Wi-Fi Direct (P2P), soft-AP 모두 사용 가능
  • 802.11b 기준 출력은 +19.5 dBm
  • 보드에 안테나 내장되어 있고, 외부 안테나 연결도 가능
  • 사용 가능 온도 범위: -40℃ ~ 125
  • 저전력 32-bit CPU, 10-bit ADC 내장
  • SDIO 2.0, SPI, UART, STBC, 1 ×1 MIMO, 2 ×1 MIMO 사용 가능

spartkfun사이트에 ESP-01 모듈에 대한 특징을 한눈에 볼 수 있는 자료가 있어서 가져왔습니다. 웬만한 정보는 이 그림 한 장에서 다 얻을 수 있습니다.

이미지를 클릭하시면 원본 PDF가 열려요.

Datasheet, Manaual

부품에 대한 정보를 정확하게 알기 위해서는 Datasheet를 잘 살펴보는 게 중요하죠. ESP모듈은 제조사의 기술문서가 잘 작성되어 있어서 정보를 구하기 쉽습니다. 그리고 웹상에서 인지도가 있어 보이는 자료들을 모아 봤습니다.

먼저 공식 datasheet입니다. 버전 6.4에 2020년도 기준 최신 자료인 것 같습니다.

0a-esp8266ex_datasheet_en_v6_4.pdf
0.85MB

역시 공식 문서입니다. 그런데 SDK 버전이 2.x까지 해당하는 문서로 V3.0 이상 SDK에서는 별도 문서로 분리되었다고 합니다. 해당 문서에는 펌웨어 선택 시 참고할 수 있는 내용이 들어있습니다. 제조사 홈페이지에서 받은 AT펌웨어를 칩에 올릴 때 주소 값을 어떻게 세팅해야 하는지 어떤 펌웨어를 골라야 하는지 등의 정보를 확인할 수 있습니다.

2a-esp8266-sdk_getting_started_guide_en.pdf
3.74MB

AT명령어가 정리된 자료입니다. 역시 공식문서이며 여기에도 펌웨어 종류별로 크기 및 메모리 주소 값이 간략히 설명되어 있습니다.

4a-esp8266_at_instruction_set_en.pdf
0.65MB

펌웨어를 칩에 올릴 때 사용하는 프로그램의 사용법 등이 나와 있는 공식문서이고,

esp8266-sdk_application_note_firmware_download_protocol_en.pdf
0.35MB

그리고 공부할 때 참고할만한 자료입니다.

esp8266-technical_reference_en.pdf
3.35MB

마지막으로 공식문서는 아닌데 ESP시리즈 모듈의 사용법이 정리된 자료입니다.

esp8266_series_modules_user_manual_v1.1.pdf
1.08MB

그 외 정보를 확인할 수 있는 좋은 사이트들입니다.

포괄적으로 정보를 잘 모아둔 사이트 - https://nurdspace.nl/ESP8266

ESP8266 Github Wiki 페이지 - https://github.com/esp8266/esp8266-wiki

마지막으로 요건 좀 대단한 거 같은데, 이 분야에서 30년 이상 짬을 가지신 분이 집필하셨다고 합니다. ESP8266에 관한 모든 걸 집대성한 책입니다. 아래 링크로 가시면 받으실 수 있는데 가격이 0~20$까지 사는 사람 마음입니다. 400페이지가 넘는 방대한 양에 기초부터 활용까지 모든 내용이 들어있어서 돈 주고 봐도 아깝지 않을 자료입니다. 

 

Kolban's Book on the ESP32 & ESP8266

The definitive guide to programming on the ESP8266 and ESP32 processors.

leanpub.com

사용법

Hardware(회로 구성)

ESP-01 모듈을 사용하기 위해서 컴퓨터와 연결하는 방법을 먼저 알아보겠습니다. ESP-01 모듈는 컴퓨터와 직접 연결할 수 있는 USB 포트가 내장되어 있지 않습니다. 그래서 전용 어댑터를 구매하거나 USB to UART 보드를 이용해서 연결을 해야 하지만 만능인 아두이노만 있으면 이것도 해결할 수 있습니다. 아두이노는 USB to UART 모듈이 내장되어 있기 때문에 컴퓨터와 ESP-01 모듈을 이어주는 다리 역할을 하는 거죠.

그림과 같이 아두이노와 ESP-01 모듈을 연결해 줍니다. GND(1번)는 아두이노의 GND에 입력 전압(8번)은 아두이노의 3.3V출력 단자에 그리고 UART 단자는 Tx(2번)는 Tx끼리 Rx(7번)는 Rx끼리 연결합니다. UART 통신은 2개의 기기가 서로 통신을 할 경우 Tx와 Rx를 교차해서 신호를 주고받도록 하지만 이경우 아두이노는 단순히 연결해주는 역할만 하기 때문에 Tx와 Rx를 동일하게 연결합니다. 그런데 여기서 연결 시 주의할 점이 있습니다. ESP-01 모듈의 스펙에서 확인했듯 모듈의 동작 전원이 3.3V입니다. 하지만 아두이노는 5V에서 동작을 합니다. 그 얘기는 아두이노의 Rx 단자에서 ESP-01 Rx단자로 신호가 들어갈 때 High값을 3.3V보다 높은 5V로 쏴준다는 겁니다. 사용하는 시간이 짧으면 괜찮을 수 있지만 부품에 손상을 줄 수 있기 때문에 전압을 분배해서 3.3V의 전압으로 신호가 들어갈 수 있게 해 줍니다. 위 회로에서는 1kΩ, 2.2kΩ 저항으로 전압분배를 했습니다.  

Tx는 반대로 ESP-01에서 아두이노 쪽으로 3.3V의 전압이 High로 들어가기 때문에 전압분배가 필요 없습니다. 그리고 아두이노에서 High로 인식하는 전압이 제가 가진 아두이노 우노 보드에서 테스트해봤을 때 약 2.3V가 기준이 되었습니다. 그래서 별다른 조치 없이 Tx신호도 잘 인식할 수 있는 것 같습니다.

추가적으로 CHPD(4번)를 3.3V에 연결해줍니다. 칩을 활성화시켜주는 핀이라고 하네요.

마지막으로 모듈의 동작 모드를 선택해주는 핀 작업이 필요한데요. GPIO_0(5번, 회로도의 핑크색 와이어) 핀과 Reset(6번, 회로도의 흰색 와이어) 핀의 조합으로 만들어 줄 수 있습니다. 펌웨어를 교체하기 위한 다운로드 모드로 들어가기 위해서는 GPIO_0번 핀이 GND에 물려있는 상태에서 모듈을 리셋해주면 됩니다. 리셋은 Reset핀을 GND에 연결했다가 약 2초 정도 기다린 후에 다시 떼주면 모듈이 리셋됩니다. 그리고 AT명령어를 사용하기 위한 AT 모드로 들어가기 위해서는 GPIO_0핀을 GND에서 연결을 하지 않은 상태에서 모듈을 리셋합니다.

펌웨어 업데이트

ESP-01 모듈을 구매하면 대부분 옛날 펌웨어가 설치되어 있습니다. 펌웨어의 종류도 여러 가지가 있는데 그중에서 Al Thinker(AT)라고 하는 걸 많이 사용하는데, 이 펌웨어가 지금은 버전이 V1.7.3입니다. 펌웨어 버전이 올라가면 사용할 수 있는 AT명령어도 다양해지고 안정성이나 최적 화면에서도 많은 개선이 이루어졌기 때문에 우선 펌웨어를 업데이트해주는 게 좋겠죠.

대표적인 펌웨어 업데이트 사유로 UART 통신속도 조절을 들 수 있는데요. 왜냐하면 ESP-01의 기본 통신속도는 115200 bps이기때문인데요. 사용 편의상 아두이노와 SoftwareSerial로 연결해서 쓰는데 SoftwareSerial의 최대 속도는 57600 bps를 넘지 못한다고 해서 펌웨어를 업데이트를 해주는 거죠. 예전에는 통신속도를 9600 bps로 설정해놓은 펌웨어를 업로드시켰었는데 요즘 AT펌웨어는 통신속도를 변경할 수 있는 AT명령어가 있어서 그걸로 펌웨어를 교체하면 됩니다.

펌웨어 업로드를 위해서는 준비물이 필요한데요. 펌웨어를 입혀줄 소프트웨어와 펌웨어가 있어야 합니다. 먼저 아래 주소로 이동을 해서 AT펌웨어를 받아줍니다. "ESP8266 NonOS AT Bin V1.7.4" 펌웨어를 받아주시면 됩니다.

 

AT | Espressif Systems

1. Fix station connecting behavior after upgrading from an old version. 2. Fix wrong SSID query when the length of SSID is 32 bytes. 3. Optimize AT+CIUPDATE behavior.

www.espressif.com

다음으로 아래 주소에서 "Flash Download Tools"이라는 펌웨어를 ESP-01 모듈에 입혀줄 프로그램을 다운로드합니다. (펌웨어를 ESP-01 모듈에 입히는 작업을 펌웨어를 업로드한다 업데이트한다 다운로드한다 뭐 여러 가지 표현으로 사용할 수 있겠지만 제조사에서 프로그램 이름을 다운로드 툴이라고 지었으니 여기서부터는 펌웨어를 다운로드한다라는 표현을 사용하겠습니다.)

 

Tools | Espressif Systems

This ESP-Tuning Tool is a tool for monitoring touchpad readings. For a good TouchSensor design, it is necessary to monitor touchpad readings, such as raw count value, baseline value and deviation of the count value, for calibration and debugging, and, most

www.espressif.com

설치는 필요하지 않고 바로 실행할 수 있는 프로그램입니다. 실행을 하면 다음과 같은 창이 열립니다.

Developer Mode를 눌러주시면 됩니다. Fatory Mode는 여러 개의 ESP모듈에 한꺼번에 펌웨어를 다운로드해야 하는 경우에 사용하는 옵션입니다.

다음 창에서는 "ESP8266"을 선택해주면 아래와 같은 창이 열립니다. 

여기에서 ESP-01 모듈에 맞는 세팅값을 선택하고 필요한 펌웨어 파일과 각 파일의 주소 값을 지정해주고 Start버튼을 눌러주면 됩니다. 세팅값은 사진에 있는 옵션을 참고하시면 되는데요. 필요한 펌웨어 파일과 각 파일의 주소 값은 위에서 다운로드한 펌웨어 압출 파일 안에 있는 "README.dm"파일에서 확인할 수 있습니다. 파일을 열어보면 내용 중에 아래 내용이 있는데요.

### Flash size 8Mbit: 512KB+512KB
   boot_v1.2+.bin              0x00000
   user1.1024.new.2.bin       0x01000
   esp_init_data_default.bin  0xfc000
   blank.bin                     0x7e000 & 0xfe000

ESP-01 모듈은 8 Mbit 플래시 메모리가 탑재되어 있기 때문에 이 조합의 파일을 선택해 줘야 합니다. 녹색으로 하이라이트 된 부분에 필요한 파일의 경로를 하나씩 넣어주고 그 오른쪽에 README파일에 있는 주소를 입력해줍니다.

README파일에 boot_v1.2+.bin이라고 된 부분은 1.2 버전 이상의 boot 파일이면 다 된다는 의미인 것 같습니다. 다운로드한 최신 버전에는 "boot_v1.7.bin" 파일이 포함되어 있으니 그걸로 넣어주면 됩니다.

마지막으로 위에서 준비해둔 ESP-01 모듈을 연결한 아두이노를 컴퓨터에 연결하고 아두이노가 연결된 포트번호를 확인해서 마지막 부분에 적어줍니다. 저는 COM11 포트입니다.

이제 모든 준비는 끝났습니다. 마지막으로 "START"버튼만 눌러주면 다운로드가 시작되는데요. ESP-01 모듈에 펌웨어를 다운로드하기 위해서는 모듈을 다운로드 모드로 부팅을 시켜줘야 합니다. 위에서 설명한 회로도를 참고해서 ESP-01 모듈의 GPIO_0 포트가 GND에 연결된 상태에서 모듈을 리셋합니다. 그러면 ESP-01에 있는 파란색 LED가 짧게 깜빡하고 다운로드 모드로 진입합니다. 스타트를 눌러서 문제없이 펌웨어가 설치되고 있다면 프로그램 화면에 모듈 정보가 표시되면서 녹색바가 쑥쑥 자라납니다. 종료되면 그림처럼 "FINISH"가 보이게 됩니다.

그런데 만약 프로그램에서 별다른 반응이 없고 Command 창에서 로그가 아래와 같이 "....._____....._____.." 이런 모양만 계속 찍히고 있다면 ESP-01 모듈이 다운로드 모드로 집입 하지 못한 경우입니다. 이럴 땐 다시 Reset 와이어를 GND에 연결했다가 분리한 후 다시 시도를 합니다.

ESP-01모듈에 다운로드가 시작되지 못하고 대기에 빠져있는 상황 

통신속도 변경

펌웨어가 정상적으로 교체되었다면 AT명령어를 이용해서 펌웨어 업데이트 결과를 확인하고 ESP-01 모듈의 통신속도를 변경해보겠습니다.

먼저 AT 명령어를 사용하기 위해서는 ESP-01 모듈을 AT 모드로 부팅을 시켜줍니다.

이번에는 GND에 연결된 GPIO_0 와이어를 제거한 상태에서 모듈을 리셋합니다. 이번에도 파란색 LED가 깜빡이는 걸 확인하고 시리얼 모니터를 열어줍니다. 시리얼 모니터는 아두이노 IDE나 저처럼 VisualMicro같이 본인이 편한 아무 프로그램이나 사용하시면 되겠죠. 아두이노가 연결된 포트번호를 확인하고 연결합니다.

그리고 시리얼 모니터의 통신속도를 ESP-01 펌웨어의 기본 속도인 115200으로 설정합니다.

입력창에 "AT"라는 명령어를 입력하면 연결이 잘 되었다는 뜻으로 "OK"라는 메시지가 돌아옵니다. AT명령어는 모두 대문자로 입력해야 합니다. 이번엔 설치된 펌웨어 정보를 확인하는 명령어인 "AT+GMR"을 입력해보고 펌웨어 버전이 변경된 걸 확인합니다.

이번에는 통신속도를 변경해 보겠습니다. "AT+UART_DEF=57600,8,1,0,0"을 입력하고 뭐라고 깨진 글자가 회신되면 변경이 완료된 것입니다. 시리얼 모니터의 통신속도를 57600으로 변경하고 다시 "AT"를 날려보면 "OK"가 정상적으로 회신되는 것을 확인할 수 있습니다.

이상 ESP-01 모듈을 사용하기 위한 기본적인 내용을 모두 살펴봤습니다. AT명령어의 자세한 의미와 사용 가능한 AT명령어를 더 확인하시려면 데이터 시트를 참고하시고 여기까지 다 따라오셨다면 긴 포스팅 끝까지 읽어주셔서 감사합니다. 앞으로는 WIFI모듈을 이용해서 할 수 있는 것들 고민해서 계속 올리도록 하겠습니다.

 

끝!

728x90

댓글8

  • 너무어려워요 2020.11.17 19:28

    펌웨어 업데이트에서 bin 파일 업로드 하고 옆에 체크 박스 선택하니 @ 오른쪽에 0x00000이 뜨는게 아니라 그냥 빨간색으로 채워져 있는데 어떻게하나요 ㅠㅠㅠ
    답글

  • 흑흑 2021.05.14 10:58

    ESP-01에 사용한 펌웨어를 ESP-12E에 업로드 가능한가요?
    답글

  • 행인 2021.11.15 16:01

    좋은 정보 잘 보고 갑니다.

    감사합니다.
    답글

  • 로직 2021.11.23 05:41

    혹시 펌웨어 업데이트 후 AT 명령아가 응답이 없는 경우 어떤 일인지 아실까요?ㅠㅠ
    펌웨어 업데이트 하고 AT 테스트하는 코드 알려주실 수 있을까요? 제가 코드를 잘못 했나 싶어 비교해보고 싶습니다
    답글

    • Favicon of https://kwonkyo.tistory.com BlogIcon lovey25 2021.11.23 06:10 신고

      응답이 없는 경우는 글쎄요 통신속도가 맞지 않거나 연결에 문제가 있는등 여러가지가 있을수 있어서...
      그리고 AT 테스트하는 펌웨어는 제가 만든게 아니고 칩셋 제조사에서 제공하는 건데 본문에 링크 있습니다.