사물인터넷(IoT)2016. 3. 9. 12:00

ESP8266 은 가장 저렴하게 사용할 수 있는 아두이노를 위한 와이파이 모듈(?)이다. 아니, 아두이노를 위한다고는 썼지만 자체적으로도 CPU(32비트), 메모리, 입출력핀을 내장하고 있어서 아두이노 없이도 독립적으로 프로그래밍하여 작동이 가능하다. 간단하게 와이파이 연결을 위한 SoC 칩 이라고 보면 될 것 같다. 



ESP8266 모듈은 많은 종류가 있다. 가장 기본적인 ESP-01이 있고 메모리, 프로세서, GPIO핀의 갯수 등에 따라 다양한 종류가 있다. 스펙을 살펴보고 자신이 필요로 하는 용도의 것을 선택하면 된다. 이 글에서는 ESP-01을 이용한다. GPIO 단자가 2개 이기 때문에 와이파이를 통하여 다양한 제어를 원한다면 ESP-12E를 이용하면 된다.


하지만 아두이노 연결을 위해서는 소프트웨어 시리얼로 연결을 하는데 이는 Baud Rate를 19200bps 까지만 지원을 한다. 반면 ESP8266은 기본 115000bps로 통신을 한다. 물론 그대로도 사용할 수 있지만 사용하기가 까다롭다. 아두이노 소프트웨어 시리얼과의 원활한 연결을 위하여 ESP8266의 Baud Rate를 낮추어야 한다. 이는 펌웨어의 업그레이드로 가능하다. 


펌웨어 업데이트는 두 가지의 방법이 있는데 첫번째는 USB to UART 보드를 이용해서 펌웨어를 업데이트 하는 방법이 있고 ESP8266 이외에도 컴퓨터의 USB 포트에 꼽아 쓰는 UART 보드가 하나 더 필요하다. 두번째 방법은 아두이노와 직접 연결하여 업데이트 하는 방법이다. 하지만 여기에는 하나의 위험사항이 따른다. ESP8266은 기본적으로 3.3V 로 동작하지만 아두이노의 Tx, Rx 출력은 5V 출력이기 때문이다. 아두이노 우노에서는 3.3V, 5V 두가지 전원을 제공하지만 Tx, Rx 출력은 5V 고정이기 때문이다. 이 때문에 업데이트를 하려다 ESP8266 모듈이나 아두이노가 고장이 날 수도 있기 때문에 권장하고 싶지는 않다. USB to UART 모듈이 없는데 할 수 없이 고장의 위험을 감수하고 업데이트 하고 싶을때 하는 방법인 것이다.


하지만 이 글에서는 고장나면 하나 더 산다는 대인배(?)의 마음가짐으로 두 번째 방법으로 업데이트를 시도해 보려고 한다.(사실 구글링 해보면 바로 연결해서 업데이트 성공한 사람도 꽤 있고... 레벨 쉬프팅 회로를 구성하여 5V --> 3.3V로 신호를 다운시켜 안전빵으로 성공한 케이스도 많이 있다. 사실 이걸 권장) 보다 안전하게 업데이트를 하고 싶은 사람은 USB to UART 보드를 통한 첫번째 방법을 이용하길 바란다.


ESP8266 데이터시트(Datasheet)

ESP8266_Specifications_English.pdf



ESP8266 모듈(ESP-01)의 뒤면모습, 8개의 핀이 있다.


앞모습, 8개 핀의 각각의 기능은 위의 그림과 같다. 위와 같이 3.3V로 동작하며 GPIO Pin 2개, 통신을 위한 Tx, Rx 핀, RST(Reset), CH_PD(Chip Power Down) 핀으로 구성이 되어 있다.


아두이노와 ESP8266 과의 연결은 아래와 같이 한다.


Fritzing 파일

ESP8266Frimware_Update.fzz


연결

Arduino  /   ESP8266

Tx  ------- Tx

Rx  ------- Rx

GND ------ GND & GPIO 0 (GPIO0은 펌웨어 업데이트 시에만 꼽는다. 와이파이 테스트 시에는 뽑음)

3.3V ------ CH_PD & 3.3V (VCC)



하드웨어의 연결이 끝났으면 펌웨어를 ESP8266에 올리기 위한 프로그램을 다운로드 받고 펌웨어도 다운로드 받는다. 다음의 URL에서 다운로드 받거나 이 블로그에 올린 파일을 다운로드 받으면 된다.

프로그램 준비

1. 펌웨어 업데이트 툴 다운로드, 별도의 설치는 없으며 나의 경우엔 C 드라이브 바로 밑에 압축을 풀어주었다. 다운로드 폴더에서 바로 실행하면 안될 수 있음.

https://docs.google.com/file/d/0B3dUKfqzZnlwVGc1YnFyUjgxelE/edit

ESP8266_flasher_V00170901_00_Cloud Update Ready.zip


2. 펌웨어 다운로드, 압축을 풀어나오는 bin 파일을 업데이트 툴 풀어놓은 폴더에 같이 복사해 놓으면 된다.

https://docs.google.com/file/d/0B3dUKfqzZnlwdUJUc2hkZDUyVjA/edit

ESP8266_AT_V00180902_02_baudrate watchdog added.zip


3. ESP8266 개발 라이브러리(9600bps 전용), 아두이노 IDE Library 폴더에 복사

https://github.com/Diaoul/arduino-ESP8266

arduino-ESP8266-master.zip



펌웨어 업데이트는 다음의 순서대로 진행하면 된다.

펌웨어 업데이트 순서

1. 아두이노를 PC에 연결한다. 연결하면 PC의 몇 번 시리얼 포트에 연결되었는지 알기위해 나 같은 경우 아두이노 IDE를 실행하여 포트번호를 확인 하고 IDE를 닫았다. 나의 경우 COM3에 연결된 것을 확인.




2. 펌웨어 업데이트 프로그램(esp8266_flasher.exe)을 실행하고 Bin 버튼을 눌러 위에서 다운 받았던 펌웨어 파일을 선택해준다. COM 포트 번호가 잘 못 되었으면 고쳐준다.



3. Download 버튼을 누르면 펌웨어 업데이트가 진행된다. 맨 마지막에 'Leaving...' 메시지가 나오면 업데이트가 정상적으로 종료된 것이다.



펌웨어 업데이트 시 ESP8266 모듈에 위와 같이 파란불이 깜빡이면서 업데이트가 진행이 된다. 업데이트가 끝나면 파란불이 꺼진다.


ESP8266 작동 확인

펌웨어 업데이트가 완료 되었으면 기본적인 통신체크를 해서 정상적으로 통신이 되는지 확인한다. 먼저 아두이노의 전원을 뽑아서 전원을 꺼준다. 펌웨어 업데이트(업데이트 모드 진입)를 위하여 임시로 연결했던 GPIO0을 빼준다. 안빼면 통신이 안된다. 다시 아두이노를 PC와 연결한다.



위와 같이 AT 커맨드를 보냈을 때 OK 메시지가 나오면 펌웨어가 제대로 업데이트 되고 모든 것이 정상적으로 동작한다는 것을 의미한다.

AT 커맨드가 잘 된다면 펌웨어의 버전을 확인하는 AT+GMR 명령을 입력하면 위와 같이 펌웨어 버전정보를 ESP8266 에서 보내주게 된다.


참고, ESP8266 AT 커맨드 정리 사이트

http://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/#AT

ESP8266 - AT Command Reference.pdf



이것으로 ESP8266을 아두이노에 연결해서 사용하기 위한 펌웨어 업데이트 방법에 대해서 알아보았다. 다음 포스팅에서는 실제로 와이파이에 연결하여 활용하는 것을 해 보려고 한다.



■ 추가사항 (2016.11.25) : 이 글에 나오는 펌웨어 업데이트 방법 보다 아래 링크의 USB Serial 모듈을 이용해서 펌웨어를 업데이트 하는 것을 권장한다. 그리고 기왕 사려면 FT232RL 칩을 이용한 모듈을 추천한다.

[사물인터넷(IoT)] - ESP8266 와이파이 모듈 펌웨어 업데이트 (USB To TTL 모듈 이용)

[사물인터넷(IoT)] - ESP8266 에 NodeMCU 펌웨어 및 Lua 개발환경 설치하기


■ 추가사항 (2018.09.05) : http://deneb21.tistory.com/591 에 아두이노 IDE에 개발환경 만드는 방법을 올렸다.

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 오르비

    안녕하세요. 본 포스팅의 도움을 받고 있는 한 학생입니다.
    다름이 아니라 아두이노 나노와 ESP-12E를 통해 위와 같은 과정으로
    펌웨어 설치를 진행했습니다. 그 결과 펌웨어 설치 과정이 포스트의 스크린샷과 똑같이 진행된 것을 확인했습니다.
    하지만 문제는 그 다음에 발생했습니다. AT 명령어를 시리얼 모니터에 입력하였지만 AT를 포함하여 아무 글씨도
    화면에 나타나지 않습니다. 혹시 이와 같은 사례를 겪어보신 적 있나요? 있다면 조언해주시면 정말 감사하겠습니다.

    2016.05.26 20:47 [ ADDR : EDIT/ DEL : REPLY ]
    • 사실 이 방법은 제가 본문에 빨간글씨로 강조했다시피 권장하는 방법은 아닙니다. 아두이노나 와이파이 모듈이 고장날수 있습니다. 가능하다면 USB TO TTL 모듈을 통해서 업데이트 하시기 바랍니다. 제가 최근에 올린 글이 있습니다. http://deneb21.tistory.com/343 참고 하시기 바랍니니다. USB To TTL 모듈은 UART 또는 FTDI 라고도 불리며 쇼핑몰 검색하면 많이 나옵니다. 3.3V 지원되는걸로 꼭 구입하시구요...

      2016.05.26 20:54 신고 [ ADDR : EDIT/ DEL ]
    • 오르비

      감사합니다. 조언해주신대로 한 번 해보겠습니다. 좋은 밤 되십시오. :)

      2016.05.26 21:35 [ ADDR : EDIT/ DEL ]
    • 저도 지금 상황이 그런데 혹시 어떻게 해결하셨는지 알 수 있을까요?ㅠㅠ

      2020.07.11 19:39 [ ADDR : EDIT/ DEL ]
  2. 나르

    감사합니다!!

    2016.09.23 13:09 [ ADDR : EDIT/ DEL : REPLY ]
  3. 티포

    굉장히 설명을 잘 해놓으신것 같습니다.
    그런데 펌웨어 단계에서 진행이 안되고 계속 connecting.....만 뜨는데(파란불도 안들어옵니다)
    혹시 문제점을 알 수 있을까요???
    연결 상태는 다시 확인해보았고 혹시 꽂자마자 esp8266이 고장난건 아닌지.. 잘 모르겠습니다.

    2016.11.10 00:00 [ ADDR : EDIT/ DEL : REPLY ]
    • ESP8266 보드가 고장나지 않았다는 전제하에 저의 예측은 경험상 두 가지 입니다. 첫 째는 USB 단자의 전원부족, 둘째는 아두이노를 이용한 업데이트 보다는 USB UART 를 이용하는 것 입니다. 전원부족은 PC의 경우 뒷면 단자에 있는 USB 포트에 직접 연결해 보시고 USB UART 보드를 이용한 업데이트는 http://deneb21.tistory.com/345 를 참고하세요.

      2016.11.10 00:08 신고 [ ADDR : EDIT/ DEL ]
  4. 티포

    빠른답변 정말 감사합니다.
    제생각에도 단자의 전원부족인것 같습니다.
    현재 USB UART가 없어 말씀해주신대로 뒷쪽단자의 포트를 사용해보고 안되면 구매하여 링크걸어주신 방법을 사용하도록 하겠습니다
    많이 배워갑니다 감사합니다!

    2016.11.10 00:21 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 도움이 되었는지 모르겠네요.
      아무튼 제 경험상 전원부족 문제가 꽤 많았습니다. ESP8266 이 생각보다 전력을 꽤 많이 먹습니다. 이것 저것 신경쓰기 싫으시면 걸어드린 링크에 있는 ESP8266 개발보드도 괜찮은 방법일 것 입니다. 직구하면 5달러 정도면 구매가 가능 합니다.

      2016.11.10 00:26 신고 [ ADDR : EDIT/ DEL ]
  5. soso

    안녕하십니까!

    본 포스팅을 참고하여 ESP 8266 와이파이 모듈을 펌웨어 업데이트 시키고 싶은 한 대학생입니다.

    저는
    Connecting...
    Failed to connect

    이라고 계속 뜨는데 오류에 대해서 어떻게 해야 할지를 모르겠습니다..

    도와주십시오..한시가 급한데 어떻게 해야 할지를 모르니 정말 제 심정에서는 답답합니다..ㅠㅠ

    선생님의 포스팅을 보고 완벽하게 따라 할 수 있겠다는 자신감이 들었지만 제가 못하고 있다는 생각에...

    제발 도와주십시오 선생님..!

    2017.06.03 20:57 [ ADDR : EDIT/ DEL : REPLY ]
    • 글쎄요. 업데이트가 안되는건 COM 포트 지정이 잘 못 되었을 수도 있습니다. 아두이노와 PC의 연결시 COM포트를 잘 확인하시고 펌웨어 업데이트 프로그램에서도 COM포트를 잘 확인해 보세요.

      2017.06.03 22:16 신고 [ ADDR : EDIT/ DEL ]
  6. soso

    COM 포트는 Arduino IDE에 들어가서 확인을 해보니 COM3 라고 되어있길래 그렇게 연결을 하였습니다.

    COM 포트는 제대로 연결 되었는데 왜 이렇게 되는 걸까요...?

    와이파이 모듈에 빨간불도 들어 오지 않습니다..

    아두이노 우노와 와이파이 모듈 결선은 제대로 했다고 생각을 하고 있는데 무엇이 문제일까요..?

    생각을 해보니 Arduino Uno에서는 3.3V, 5V 두 가지 전원을 제공하지만 Tx, Rx 출력은 5V 고정

    이런글을 본적이 있는데
    이러한 경우에는 어떻게 해야 하나요?

    2017.06.03 22:31 [ ADDR : EDIT/ DEL : REPLY ]
    • 모듈에 빨간LED면 전원 LED 같은데
      그게 안들어온다면 아얘 모듈에 전원공급이 안되는것 같아요.
      전원핀 연결을 다시 확인해 보시고
      케이블 다른게 있으면 케이블을 바꿔보세요.

      2017.06.03 22:35 신고 [ ADDR : EDIT/ DEL ]
    • 그리고 위의 글에서 맨 아래 추가내용을 보면 나오지만
      아두이노를 이용해서 펌웨어 업그레이드를 하는것은 그리 바람직한 방법은 아니랍니다.
      FT232RL 같은 시리얼 통신 모듈을 사용하시는게 좋습니다.

      2017.06.03 22:37 신고 [ ADDR : EDIT/ DEL ]
  7. soso

    선생님 그리고 죄송한데

    와이파이 모듈을 쓰는 이유가 정확히 무엇인가요?

    그리고 혹시나 와이파이 모듈을 사용하지 않을 시에는 이를 대체할 방안이 있을까요?

    2017.06.03 22:45 [ ADDR : EDIT/ DEL : REPLY ]
    • 요즘 유행하는 사물인터넷 구현의 기초가 되지요. 와이파이모듈 대체로 인터넷에 연결되는 모듈은 유선 인터넷 모듈이 있겠죠.

      2017.06.03 22:48 신고 [ ADDR : EDIT/ DEL ]
  8. soso

    와...와이파이 모듈 펌웨어 업데이트가 이렇게 안될줄은 상상도 못했어요ㅠㅠㅠㅠㅠ

    제가 지금 어디가 막히는지도 이제는 모르겠네요 ㅠㅠㅠㅠㅠ

    선생님 그리고 혹시 레벨 쉬프팅 회로 라는 것은 어떻게 구성해야 되는 것인가요?

    2017.06.03 22:50 [ ADDR : EDIT/ DEL : REPLY ]
    • 그럴때일수록 차근차근 무엇이 잘 못 됐는지
      처음부터 확인해 보는 수 밖에 없더라구요.
      잘 되길 바랍니다.

      2017.06.03 23:51 신고 [ ADDR : EDIT/ DEL ]
  9. 펌웨어를 잘하고 시리얼로 AT명령까지 잘했는데, 아두이노 USB를 뺐다 꽂았더니 AT명령에 반응이없네요.. 두개샀는데 둘다 같은증상입니다. 어떻게해야할까요 ㅠㅠ

    2017.09.18 18:55 [ ADDR : EDIT/ DEL : REPLY ]
  10. 제로윈코딩

    좋은정보감사합니다.....

    2020.02.23 23:45 [ ADDR : EDIT/ DEL : REPLY ]
  11. 버블

    이 게시글 보고 flasher로 펌웨어 설치까지는 스크린샷들과 동일하게 진행했습니다. 그런데 AT명령어를 쳐도 시리얼 모니터에 아무것도 뜨지 않는데 어떡해야할까요 ㅠㅠ 사진과 살짝 다른 점이라면 esp8266에 빨간불은 안들어오고 파란불만 깜빡깜빡 거리면서 펌웨어 설치가 진행되었었습니다. 이게 문제일까요? 답변해주시면 감사하겠습니다 ㅜㅜ

    2020.07.11 20:07 [ ADDR : EDIT/ DEL : REPLY ]
  12. 시현

    감사합니다!! 다른글들은 다 적용이 안됬는데 드디어 성공했어요!!

    2020.08.22 18:39 [ ADDR : EDIT/ DEL : REPLY ]
  13. 선생님,
    "ESP8266 은... 자체적으로도 CPU(32비트), 메모리, 입출력핀을 내장하고 있어서 아두이노 없이도 독립적으로 프로그래밍하여 작동이 가능하다" ==> 처음 알았습니다
    그렇다면
    예를 들어, 현관문 자동키에 ESP8266 만을 연결하여 와이파이로 열고닫고 하는 것이 이론적으로 가능하겠습니까?
    이 경우, 8266을 구동하는 전원(건전지 등)이 따로 필요하고, AT 명령어로 만든 간단한 알고리즘이 8266 내부에 들어가야 하겠죠.
    8266의 작은 메모리에 프로그래밍이 얼마나 들어갈지도 좀 의문입니다만...
    포스팅 감사합니다~ ^^

    2021.02.19 18:48 [ ADDR : EDIT/ DEL : REPLY ]
    • esp8266 은 4mb의 플래시 메모리를 가집니다. 아두이노에 비하면 엄청나게 큰 메모리 입니다. 실제로 esp32를 가지고 휴대용 게임기를 만드는 사람도 있습니다

      2021.02.19 19:59 신고 [ ADDR : EDIT/ DEL ]
    • 아두이노 우노의 메모리는 32kb 입니다

      2021.02.19 20:01 신고 [ ADDR : EDIT/ DEL ]
    • 답변 감사합니다
      메모리가 엄청나게 크네요
      놀랐습니다
      방금 보니...
      블로그 조회수가 4백만
      또 놀랐습니다
      대단하십니다
      바쁘신 분일 텐데...
      답변 주셔서 고맙습니다

      2021.02.19 23:34 [ ADDR : EDIT/ DEL ]
  14. 와이파이 공유기에 휴대폰이 다가가면 두 기기는 서로를 인식합니다.
    (예컨대 폰에 접속 가능한 와이파이 목록이 나타남)
    와이파이와 휴대폰은 단말기 식별번호 IMSI 를 사용하여 공유합니다
    KT 가입자이고 폰 번호가 010 1234 6789 라면 IMSI는 450041012346789
    450(한국번호)04(KT번호)1012346789(폰번호)

    이 경우, AT 명령어를 사용하여
    와이파이 공유기 8266이
    접속자의 IMSI 번호에서 접속자 폰 번호를 "인식" 하도록 만들 수 있을까요?
    제 생각으로는 와이파이 장치의 하드웨어, 소프트웨어가 일정 수준이 되어야만 이런 작업을 지원할 것 같습니다.
    (모든 공유기가 IMSI를 처리하지만 폰 번호를 인식하여 모니터로 나타내는 것은 좀 다르다고 봅니다)

    공유기가 인식한 폰 번호를 조회, 대조할 수 있으면,
    예컨대
    1) 식당 출입문과 와이파이 공유기를 연결합니다
    2) 직원 홍길동(와이파이를 켠 휴대폰을 소지)은 출입문 앞에 섭니다
    3) 출입문에 설치된 공유기는 문 앞의 폰 번호를 인식하고, 앞서 입력된 직원 명부와 대조합니다
    4) 공유기는 감지된 폰 번호가 직원이라고 판단합니다
    5) 출입문이 열립니다

    8266이 IMSI에서 폰 번호를 추출하고 대조(혹은 추출하여 서버에 송신)할 수 있으면 위가 가능할 것 같습니다.
    좀 어려운 것 같은데... 누구에게 물어봐야 할지 모르겠습니다
    IMSI 에서 폰 번호를 뽑아내고 이를 직원 명부와 대조 판별하는 것이... 가능성이 있다면...
    개발을 시도해 보고 싶습니다
    간단히라도 조언해 주시면 고맙겠습니다.

    2021.02.21 13:23 [ ADDR : EDIT/ DEL : REPLY ]
    • 구글에서 검색하니 뉴스, 자료가 많습니다
      관련한 일반적인 검색어는 IMSI WIFI catcher
      제가 생각했던 원리를 이용하여
      정보기관 등에서 탐지기, 추적용으로 널리 사용합니다.
      알리 등에서 관련 하드웨어도 판매하며 공개 프로그램도 있습니다
      한국에서는 정보기관이 비밀리에 사용하는 것 외에는 관련 정보, 동향이 없는 것 같습니다.
      결론적으로, 고급기술이기는 하나 아두이노에서도 개발이 가능할 것으로 보입니다.
      제 댓글에 답변을 다실 필요는 없겠습니다
      바쁘신 분일 것 같아서 알려드립니다
      원 포스팅은 혹시 다른 분들에게 도움될지도 몰라서... 그대로 놔 둡니다.
      감사합니다

      2021.02.22 10:06 [ ADDR : EDIT/ DEL ]
    • 저도 뭐 그쪽 분야는 아는게 없어서 답변을 못했지만....
      개인정보보호법 같은데 저촉이 되지 않을런지... 그런 생각을 해 봅니다

      어떠한 방법으로 폰번호의 추출이 가능하다면 ESP8266이 서버로 정보를 보내서 일련의 처리를 하는 로직을 구현하는 것은 아무런 문제가 없어 보입니다

      2021.02.22 18:46 신고 [ ADDR : EDIT/ DEL ]