웹페이지의 버튼을 클릭하면 아두이노에 연결된 특정 LED가 켜지고 꺼지는 것을 구현해 보는 것이다.
연결은 다음과 같이 해 주었다. 그리고 위의 두 개의 글에서도 말을 했지만 ESP8266은 3.3V에서 동작하는데 아두이노 디지털핀의 출력은 5V이다. 저항 등을 연결하여 다운시켜야 고장이 없지만 저항이 없어서 직접 연결하였다. 이는 ESP8266 모듈의 고장이나 아두이노의 고장의 원인이 될 수가 있다고 한다. 하지만 나의 경우는 운이 좋아서 그런건지 몇 시간을 테스트 해도 이상이 없다;; 물론 LED도 저항과 함께 연결해야 한다.
그리고 로컬 컴퓨터에서 테스트 하는 것은 그냥 html 파일을 브라우저로 불러와서 테스트해도 되지만 원격에서 테스트 하고자 하는 경우 당연한 얘기겠지만 자신의 PC에 웹서버를 설치하고 html 파일을 웹서버에 올려야 한다. 그리고 공유기 환경이라면 포트포워딩 등을 통해서 외부에서 접근 가능하도록 해야 한다. 나의 경우는 간단한 웹서버로 Mongoose 웹서버를 즐겨쓴다.
결과
각 버튼을 클릭하면 약간의 텀이 있지만 해당되는 LED가 잘 켜지고 잘 꺼진다. 더 응용하면 릴레이나 모터의 제어도 가능할 것 같다.
이전 포스팅 [아두이노] 와이파이 모듈 ESP8266 펌웨어 업데이트 에서 ESP8266 펌웨어를 아두이노와 연결하여 소프트웨어 시리얼을 통하여 펌웨어를 업데이트 하는 방법을 알아보았다. 이번엔 AT 커맨드를 이용하여 ESP8266을 와이파이 공유기에 연결하는 방법을 알아보겠다. ESP8266 AT Command에 대해서는 다음의 URL을 참고하면 자세히 할 수 있다.
아두이노와의 연결은 펌웨어 업데이트 시와 동일하지만 펌웨어 업데이트 모드로 진입하기 위해서 연결했던 GPIO0에 연결했던 선은 뽑아주어야 아래의 실습을 할 수 있다. 결선도를 다시 그리자면 아래과 같다. 만약 펌웨어 업데이트가 되어있지 않다면 [아두이노] 와이파이 모듈 ESP8266 펌웨어 업데이트글을 참고하여 펌웨어를 먼저 업데이트 하여야 한다.
위와 같이 연결하고 아두이노를 PC와 연결한다. 아두이노 IDE를 실행하고 시리얼모니터를 열어 Baud Rate를 9600으로 설정하고 표시방식을 'Both NL & CR'로 설정한다.
1. 동작확인과 펌웨어 버전의 확인
- 'AT' 를 입력하여 OK 메시지가 리턴되면 정상적으로 동작하고 있다는 뜻이다.
- 'AT+GMR' 을 입력하면 ESP8266 의 현재 펌웨어 버전을 알려준다.
2. 와이파이 연결
ESP8266은 아래와 같이 3가지 모드를 지정해 줄 수 있다.
1번 : Station(Client)
2번 : AP(Host)
3번 : Station / AP Dual 모드
AP는 집에 있는 와이파이 신호를 제공해 주는 공유기(라우터)를 생각하면 되고 Station은 와이파이 신호를 연결해서 사용하는 스마트폰을 생각하면 된다.
모드의 변경은 다음의 명령어로 전환한다.
'AT+CWMODE=1' ---> Station Mode
'AT+CWMODE=2' ---> AP Mode
'AT+CWMODE=3' ---> Dual Mode
현재 모드의 확인은 다음의 명령어로 한다.
'AT+CWMODE?'
우선, ESP8266을 Station 모드로 와이파이 공유기에 접속을 하기 위해 ESP8266을 Station 모드로 전환한다.
모드를 Station으로 변경했으면 연결 가능한 와이파이를 찾는다. 와이파이를 찾는 명령어는 'AT+CWLAP' 명령어로 찾을 수 있다.
위와 같이 연결 가능한 AP 리스트가 뜨게 된다. 괄호 안의 값의 의미는 좌측부터 다음과 같다.
검색된 AP 중에서 집에 있는 공유기인 deneb2.4g 에 연결을 하려고 한다.
연결 명령어는 AT+CWJAP="SSID of AP","Password" 이다. 현재 연결된 AP를 보려면 'AT+CWJAP?' 을 입력하면 된다.
공유기에 제대로 연결되었는지 IP 확인을 해보자. 연결된 IP의 확인은 'AT+CIFSR' 명령어를 이용하면 된다.
ESP8266에 Ping 을 해 보았다.
한 번 설정된 접속정보는 ESP8266 메모리에 저장되어 전원을 껏다 켜도 자동으로 접속하게 된다.
AT 커맨트 요약정리 - 출처: https://nurdspace.nl/ESP8266
위와 같이 공유기에 잘 연결이 되어 IP도 뜨고 ESP8266에 Ping 도 된다. 이제는 어떻게 서버 또는 클라이언트와 연결해서 활용하는냐만 남은 것이다. 유튜브나 인터넷을 검색해보면 많은 이들이 벌써 원격지에서 집의 전등을 ON/OFF 한다거나 릴레이를 컨트롤 하여 여러가지 전자제품을 컨트롤 하는데 활용하고 있다.
예전에 본 미드 빅뱅이론의 한 장면이 생각난다. 공학도인 주인공들이 미국에서 지구반대편에 있는 전등을 인터넷을 통해서 켜고 끄면서 즐거워 하던 장면이다. ESP8266을 잘 활용하면 이런 것이 가능한 것이다. IoT로 들어가는 첫단계 라고나 할까?
이제 와이파이 모듈이 어떻게 동작하고 연결되는지 기본적인 것은 익혔으니 다음 부터는 작은 프로젝트들을 실행해 볼까 한다.
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 모듈에 위와 같이 파란불이 깜빡이면서 업데이트가 진행이 된다. 업데이트가 끝나면 파란불이 꺼진다.
ESP8266 작동 확인
펌웨어 업데이트가 완료 되었으면 기본적인 통신체크를 해서 정상적으로 통신이 되는지 확인한다. 먼저 아두이노의 전원을 뽑아서 전원을 꺼준다. 펌웨어 업데이트(업데이트 모드 진입)를 위하여 임시로 연결했던 GPIO0을 빼준다. 안빼면 통신이 안된다. 다시 아두이노를 PC와 연결한다.
위와 같이 AT 커맨드를 보냈을 때 OK 메시지가 나오면 펌웨어가 제대로 업데이트 되고 모든 것이 정상적으로 동작한다는 것을 의미한다.
AT 커맨드가 잘 된다면 펌웨어의 버전을 확인하는 AT+GMR 명령을 입력하면 위와 같이 펌웨어 버전정보를 ESP8266 에서 보내주게 된다.