임시 블로그 이름

아두이노 UNO만으로 ESP8266 펌웨어 업데이트 하고 WIFI 접속하기 본문

엔지니어링

아두이노 UNO만으로 ESP8266 펌웨어 업데이트 하고 WIFI 접속하기

paeton 2015. 10. 29. 23:44

IMG_5448

아두이노 UNO 호환 + ESP8266



지난번 포스트에서 이걸 해야되나 말아야 되나 고민한다고 했었다.

계속 인터넷을 뒤져봤는데, 아두이노와 ESP8266을 연결할때 중간에 전압을 바꿔주는 회로를 구성하거나, 아예 아두이노가 아닌 다른 보드들을 사용하는 것이 대부분이었다.


하드카피월드의 이 포스트 (http://www.hardcopyworld.com/ngine/aduino/index.php/archives/1257) 에서도 레벨 쉬프팅을 해야 한다고 하고, 또 FDTI모듈을 따로 구해서 ESP8266을 업데이트 하라고 나와있고.

(Firmware 업데이트를 하는 이유는, 아두이노의 소프트웨어 시리얼은 최대 baudrate을 9600까지만 지원한다고… 근데 기본은 115000 이라고…, 그리고 소프트웨어 시리얼을 쓰는 이유는, 하드웨어 시리얼은 아두이노 보드와 컴퓨터가 통신을 할때 써야 하기 때문이라고 함.)


그래서 FDTI 모듈을 사야되나 막 고민하고 있었는데,

이런 포스트들을 찾았다.

http://www.elec-cafe.com/esp8266-esp-01-firmware-update/

http://www.instructables.com/id/Intro-Esp-8266-firmware-update/?ALLSTEPS



한마디로, 그냥 아두이노의 하드웨어 시리얼을 이용해서 ESP8266 펌웨어를 업데이트 해버림 ㅋㅋㅋㅋ


결론적으로 성공했고,

성공 스토리를 공유하고자 포스트를 씀.



A. 위험요소 – 중요!!!!

ESP8266은 모든 구동 전압이 3.3V이다.

전원도 3.3V, 그리고 Tx/Rx 포트도 3.3V가 들어가야 한다.

전원은 아두이노에 3.3V가 있으니 상관 없는데, Tx/Rx는 아두이노 우노는 무조건 5V인데???


이 포스트와, 이 포스트에서 링크하고 있는 방법들은 저 아두이노의 5V Tx/Rx포트에 ESP8266의 Tx/Rx 포트를 바로 그냥 연결하는 방법으로, 매우 위험한 방법이다.

잘못하면 아두이노를 날리거나, ESP8266 모듈을 날리거나, 둘 다 날릴 수 있다.

따라서 따라할지 말지는 본인이 판단하길 바라며, 나는 책임지지 않는다.




B. 펌웨어 업데이트

1. 준비물

준비해야할 것은 다음의 4개 이다.

1) Arduino Uno

2) ESP8266 (나는 ESP-01을 사용함)

3) ESP8266 Flasher 프로그램

https://drive.google.com/file/d/0B3dUKfqzZnlwVGc1YnFyUjgxelE/view

4) ESP8266 Firmware

http://wiki.aprbrother.com/wiki/Firmware_For_ESP8266

Firmware는 기본 baudrate이 9600인걸 쓰도록 하자.



2. 기본 세팅


ESP8266 (ESP-01)의 각 핀은 다음 사진과 같다.

ESP8266 Pins

출처: http://mcuoneclipse.com/2014/11/30/tutorial-web-server-with-the-esp8266-wifi-module/


아두이노와 ESP8266의 연결은 다음과 같이 하면 된다.

ESP8266 ESP-01 Firmware Update_Elec-Cafe

출처: http://www.elec-cafe.com/esp8266-esp-01-firmware-update/


Arduino   <--->   ESP8266

Tx        <--->   Tx

Rx        <--->   Rx

3.3V      <--->   VCC (3.3V)

3.3V      <--->   CH_PD

GND       <--->   GND

GND       <--->   GPIO0


특히 GPIO0에 GND를 연결하는게 중요한데, 이렇게 해야만 ESP8266이 Flash Mode로 진입해서 Firmware 업로드를 할 수 있기 때문이다.

당연히 Firmware 업데이트 이후에는 GPIO0와 GND의 연결을 끊어야 제대로 동작한다.



3. Firmware 업데이트


Flasher 프로그램을 실행시키고, 아두이노가 연결되어있는 COM포트를 설정하고, Bin버튼을 눌러서 펌웨어 바이너리를 선택하고, 그리고 Download 버튼을 누르면 뙁!!!!!!! 하고 되야되는데…..



Failed to Connect….


계속해서 시도를 해봐도 안되서 멘붕이 왔는데, 구글링을 하다보니 이런 글이 있다.

http://www.instructables.com/id/Intro-Esp-8266-firmware-update/step3/Connecting-ESP-to-Flash-mode/


여기에 달린 리플

안되면 VCC를 뽑았다가 몇 초 있다 다시 해봐라!!!!! ㅎㅎㅎㅎ

역시…. 싸구려 하드웨어는 껐다 켜면 다 되는것인가 ㅋㅋㅋ


하지만….. 그래도 잘 되지 않는다…ㅎㅎ


삽질 끝에 내가 알아낸 방법은

1) 아두이노가 연결된 usb 포트를 뽑았다 다시 꼽는다.

2) ESP8266의 전원을 뽑았다 다시 꼽는다.

3) Flasher 프로그램으로 Firmware 업데이트를 시도한다.

4) 안되면 usb 포트를 다른 곳으로 바꾸고, 1),2),3)을 반복한다.


그러다 보면… 펌웨어 업데이트가 된다.


펌웨어 업데이트가 성공하면 Flasher 프로그램에 결과는 이렇게 나온다.

Picture of Uploading Firmware

출처: http://www.instructables.com/id/Intro-Esp-8266-firmware-update/step4/Uploading-Firmware/


(위 이미지 처럼 99%를 진행한 다음, 아래에 에러메시지가 뜨는 경우도 있는데 상관 없단다.)



4. 동작 확인 및 WIFI 연결


1) 동작 확인

위에서 이야기한 것처럼 GPIO0에 연결된 GND를 제거하고, ESP8266의 전원을 뽑았다 다시 넣어줘야만 제대로 동작 한다.


아두이노 IDE의 시리얼 모니터를 열고 라인엔딩을 Both NL & CR로 설정하자.

당연히 BaudRate은 9600으로 해야 된다. 왜냐면 ESP8266의 기본 BaudRate가 9600인 Firmware를 업로드 해놓았으니까.


Firmware가 제대로 업로드되었고, 모든게 잘 동작 한다면, 위 그림 처럼 AT라고 입력했을때 아래와 같이 OK라고 응답이 와야 한다.


펌웨어 버전을 확인하는 명령어는 AT+GMR 이다.


AT 명령어들은 아래 사이트에 기본적인 것들이 잘 정리 되어있다.

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



2) WIFI 연결

여기까지 왔으면 이제 다 된거다.

WIFI 연결은 AT 명령어로 매우 간단하게 수행할 수 있다.


ESP8266은 3가지 모드를 지원한다. 첫째는 Station(Client), 둘째는 AP(Host), 셋째는 Station과 AP의 Dual 모드 이다.

우리가 일반적으로 노트북이나, 핸드폰으로 공유기에 WIFI 접속을 하는데, 이때 노트북이나 핸드폰은 Station, 공유기는 AP가 된다.


이 세가지 모드간의 변경은 AT+CWMODE 라는 명령어로 변경한다.

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

AT+CWMODE? 명령어는 현재 모드를 리턴하고

AT+CWMODE=1,2,3 은 모드를 선택할 수 있다.



이제 집에 있는 공유기에 연결해 보자.

AT+CWMODE=1 명령어를 주고 Station 모드로 변경했다.



연결 가능한 WIFI Host들이 있는지 검색을 해 볼 수 있다.

AP+CWLAP 명령어는 연결 가능한 WIFI Host들을 검색해서 리스트를 리턴한다.

리턴값들의 의미는 아래 링크에 자세히 나와있다.

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

(우리 집에는 hahaha2라는 WIFI호스트가 있다. 하나는 공유기고, 하나는 확장기이다)



이제 hahaha2라는 ssid를 가지는 WIFI 호스트에 접속을 해보자.

접속 명령어는 AT+CWJAP 이다.

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


AT+CWJAP=”SSID”,”암호” <- 이렇게 입력하면 된다.

연결이 잘 됬다면 OK, 아니면 Fail을 리턴한다.



그렇다. ESP8266과 우리집 공유기가 서로 WIFI를 통해 연결이 된거다!!!!!


ESP8266이 받은 IP 주소도 확인 가능하다.

AT+CIFSR 명령어다.

192.168.0.18이라는 주소를 공유기로 부터 받았다.


(이상하게 공유기에 client 리스트에는 esp8266이 나오지 않는다. 왜인지는 모르겠다.)



5. 소프트웨어 시리얼 활용


이제 ESP8266의 Baudrate을 9600으로 바꿨고, AT 명령어를 통해서 WIFI Host에 접속하는 방법을 알았다.


맨 위에 있는 하드카피월드의 포스트를 보면,

ESP8266을 하드웨어 시리얼 포트(DIGITAL 0, 1번 포트)가 아닌 다른 포트에 연결하고, 소프트웨어 시리얼을 이용해서 AT 명령어들을 전송하는 방법에 대해서 이야기하고 있다.


즉, 지금은 하드웨어 시리얼을 쓰기 때문에, 아두이노 IDE의 시리얼 모니터를 통해서 명령어를 전송하지만, 소프트웨어 시리얼을 설정하고, 아두이노 코드 안에 소프트웨어 시리얼로 AT 명령어를 주도록 하면 될것 같다.


다음에는 아두이노에서 센서값을 읽고, 이걸 소프트웨어 시리얼을 통한 ESP8266을 이용해서 전송하는 것에 대한 포스트를 써 보겠다.


ㅎㅎㅎ

Comments