ESP8266 활용 가이드 – AT 커맨드로 제어
ESP8266 활용 가이드 목차
.
처음 ESP8266 모듈을 구매하면 기본 AT command 펌웨어가 올라가 있습니다. 서드파티 업체별로 이 펌웨어 버전이 제각각이라 최신으로 한번 업데이트 해주는게 확실하겠죠.
이 문서에서는 ESP8266 SDK 로 빌드해서 배포되는 AT command 펌웨어를 올리고 사용해보는 방법에 대해 기술합니다.
이 문서와 링크로 연결된 문서들은 2016년 1월 12일 기준으로 최초 업데이트가 되었으며, 변경 사항이 있을 때 수시로 업데이트 될 것입니다. 문서에 틀린 내용이 있거나 추가할 내용이 있는 경우 godstale@hotmail.com 으로 연락을 주시거나 HardCopyWorld.com – 자유게시판을 이용해주세요.
.
AT command 펌웨어
인터넷에서 ESP8266 모듈용 AT 커맨드 펌웨어를 검색해보면 아래 두 버전을 많이 사용합니다.
이 외에도 원하는 최신 AT Command 펌웨어를 구해서 사용하면 됩니다. ESP8266 SDK 안에 펌웨어가 포함되어 있는 경우 [esp_iot_sdk_v0.9.5\bin] 폴더에서 펌웨어 바이너리를 찾으면 됩니다.
.
펌웨어 다운로드 툴
취향에 맞는걸 사용하세요.
- ESP Flash Download Tool
- ESP Flasher Tool (v1.2)
- NodeMCU Flasher (Win GUI)
- XTCOM (old)
- ESP8266 flasher (초간단 단일 바이너리 flashing 프로그램)
- ESPTool 을 이용한 다운로드 (커맨드 창, shell command)
.
펌웨어 다운로드
앞서 다운로드 받은 [esp_iot_sdk_v0.9.5\bin] 폴더에 펌웨어 바이너리들이 있습니다.
펌웨어 파일들을 보면 하나의 파일로 된 경우도 있고 여러개의 파일로 구성된 경우도 있습니다. 여러개의 파일로 된 경우 각 파일마다 특정 플래시 메모리 주소에 쓰여져야 하기 때문에 주의해야 합니다. 보통 펌웨어 파일을 포함한 폴더에 ReadMe.txt 등의 텍스트 파일이 있어서 어떻게 펌웨어 다운로드 하면 되는지 알려줍니다.
[esp_iot_sdk_v0.9.5\bin\at\readme.txt] 파일을 참고해서 펌웨어 업로드 한다면
Flash 사이즈가 512KB 일 때 아래와 같이 설정해서 업로드(AT_v0.22 or version before that)
- boot.bin ==> 0x00000
- user1.bin ==> 0x01000
- blank.bin ==> 0x3E000
- blank.bin ==> 0x7E000
Flash 사이즈가 1MB 일 때 주소값이 조금 달라집니다. (AT_v0.23 or version later than that)
- boot.bin ==> 0x00000
- user1.bin ==> 0x01000
- blank.bin ==> 0x7E000
- blank.bin ==> 0xFE000
위 내용은 일종의 예제입니다. 다운로드 받은 바이너리, 사용하는 ESP8266 모듈에 따라 설정이 틀릴 수 있습니다. 펌웨어 중 무선 펌웨어 업데이트가 가능한 [IoT AT 커맨드 펌웨어]를 올려보세요. 필요할 때 공유기에 연결한 다음 무선 – 클라우드 업데이트가 가능합니다.
.
ESP8266 연결
펌웨어 테스트를 위해 아두이노 UNO 보드와 연결해서 제어하려고 하면 고려해야 할게 많습니다. ESP8266 모듈은 3.3V 에서 동작하기 때문에 전원선이든 Serial 신호선이든 3.3V로 맞춰줘야 합니다. 게다가 소모전류도 높아서 아두이노의 3.3V 핀은 충분할 출력을 내주질 못하고, 5V 핀은 3.3V로 level shift를 해주어야 합니다.
가장 쉬운 방법은 FTDI 모듈을 준비한 뒤 3.3V로 세팅해서 ESP8266 모듈에 연결하는 것. 그리고 PC에서 펌웨어를 올린 뒤 기본적인 테스트를 하는게 좋습니다. 다른 마이크로 컨트롤러와 연동해서 사용하는건 충분한 테스트 이후에 다시 시도해보세요.
FTDI – ESP8266 모듈 연결은 아래와 같이 해주면 됩니다.
- ESP8266 -> FTDI 모듈
- UTXD -> FTDI TX
- URXD -> FTDI RX
- VCC -> 3.3V
- CH_PD -> 3.3V
- GND -> GND
- GPIO0 -> 펌웨어 flashing 할 때는 GND로 연결. 펌웨어 업데이트 끝나면 3.3V로 연결(혹은 연결하지 말고 방치)
.
AT 커맨드 테스트
아래 가이드에 나온 순서대로 AT 커맨드를 입력해서 WiFi 동작을 확인해보세요.
1. HTTP Request 보내기 (Single connection as TCP client)
wifi 모드 변경
- AT+CWMODE=3 // softAP+station mode
- Response:OK
공유기에 연결
- AT+CWJAP=”ssid”,”password”
- Response:OK
IP 확인
- AT+CIFSR
- Response:192.168.3.106 // Device got an IP from router.
- 테스트 할 서버 결정. 같은 공유기에 물려있는 PC에 네트웍 툴인 “NetAssist.exe” 등을 설치해서 서버로 만들어둬도 됨. 어쨌든 target IP가 필요.
ESP8266 모듈이 client로 서버에 접속하기 위한 Request 준비 (TCP 연결 준비)
- AT+CIPSTART=”TCP”,”192.168.3.116″,8080 //protocol、server IP & port
- Response:OK
Request 전송
- AT+CIPSEND=4 // set date length which will be sent, such as 4 bytes
- DGFY // enter the data, no CR
- Response:SEND OK
- 주의!!! If the number of bytes sent is bigger than the size defined (n), will reply busy, and after sending n number of bytes, reply SEND OK.
요청에 대한 응답을 서버로부터 수신
- +IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
2. Transparent transmission
Transparent transmission 기능은 UART(Serial, 유선) 통신으로 들어온 데이터가 있을 때 자동으로 (TCP 연결된) 서버로 재전송해주는 기능임. 여기서는 ESP8266 모듈을 station 형태로 동작시키는 예제인데 softAP(공유기) 형태로 동작시킬 때도 사용이 가능함. 문서 참고 (4A-AT-Espressif AT Instruction Set)
wifi 모드 설정
- AT+CWMODE=3 // softAP+station mode
- Response:OK
공유기 접속
- AT+CWJAP=”ssid”,”password” // ssid and password of router
- Response:OK
IP 확인
- AT+CIFSR
- Response:192.168.101.105 // Device’s ip that got from router.
접속할 서버 IP 준비
접속 요청 준비 (TCP 연결 준비)
- AT+CIPSTART=”TCP”,”192.168.101.110″,8080 // protocol、server IP & port
- Response:OK
- Linked
transparent transmission 모드 활성화
- AT+CIPMODE=1
- Response:OK
요청 전송
- AT+CIPSEND
- Response: >
- 이제부터 UART로 수신되는 모든 데이터는 서버로 재전송됨.
Stop send
- “+++” 문자열만 포함된 데이터가 수신되면 transparent transmission 모드를 중지함
- NOTE: +++ 문자를 하나씩 보내면 안됨 아래 조건에 맞게 보내야 함
- Input : +++
- New Line Mode : don’t select
- Click “Send”
- transparent transmission 모드가 종료되면 일반 AT command 모드로 들어감.
- TCP 연결은 계속 활성화 되어 있기 때문에 “AT+CIPSEND” 커맨드 사용 가능
TCP 연결 종료
- AT+CIPCLOSE
- Response:CLOSED OK
3. 다중 접속 서버 (Multiple connection as TCP server)
ESP8266 모듈을 서버로 설정이 가능함. 모듈이 서버로 동작하려면 여러 client에서 들어오는 요청을 동시에 처리해야 함.
wifi 모드 설정:
- AT+CWMODE=3 // softAP+station mode
- Response:OK
다중접속 활성화
- AT+CIPMUX=1
- Response:OK
서버 셋업
- AT+CIPSERVER=1 // default port = 333
- Response:OK
PC 로 ESP8266 모듈에 client로 접속. (브라우저 혹은 네트웍 프로그램 사용)
- 주의!!! ESP8266 모듈은 서버로 동작할 때 timeout mechanism을 가짐. client 연결이 설정되고 데이터 전송이 특정 시간동안 없으면 클라이언트와의 연결을 해제함. 따라서 PC에서 2s 에 한번씩 요청을 재전송하도록 설정해야 함.
데이터 전송 (id number of connection is default to be 0)
- AT+CIPSEND=0,4 // send 4 bytes to connection NO.0
- iopd // enter the data, no CR
- Response:SEND OK
데이터 수신시 아래와 같이 출력됨
- +IPD,0,n:xxxxxxxxxx // received n bytes, data = xxxxxxxxxx
TCP 연결 해제
- AT+CIPCLOSE=0 // Delete NO.0 connection.
- Response:0,CLOSED OK
4. UDP 전송
AT+CIPSTART 명령어로 UDP 전송이 가능함. 이 커맨드의 마지막 파라미터를 이용해 UDP 연결을 할 원격 IP, port를 지정할 수 있음. 문서 [Espressif AT Instruction Set] 참고
wifi 모드 설정
- AT+CWMODE=3 // softAP+station mode
- Response:OK
공유기 연결
- AT+CWJAP=”ssid”,”password” // ssid and password of router
- Response:OK
ESP8266 모듈의 IP 확인
- AT+CIFSR
- Response:+CIFSR:STAIP,”192.168.101.104″ // IP address of ESP8266 station
같은 공유기에 연결된 PC에서 네트웍 프로그램(“NetAssist.exe”) 등을 실행하고 UDP 포트 생성.
다중 접속 활성화
- AT+CIPMUX=1
- Response:OK
UDP 전송 요청을 생성. 여기서 id 는 4로 설정했음.
- AT+CIPSTART=4,”UDP”,”192.168.101.110″,8080,1112,0
- Response:4,CONNECT OK
주의!!!:”192.168.101.110″,8080 은 앞서 설정한 PC의 IP와 UDP 포트임;
- 1112 는 ESP8266 모듈의 포트이며 사용자가 지정할 수 있음. 지정하지 않으면 랜덤 생성됨.
- 0 은 destination peer entity of UDP 가 변하지 않는다는 표시로 다중 접속된 장치들 중 어디로 보낼지를 구분함.
- ESP8266은 AT+CIPSEND=4,X 커맨드를 사용해서 데이터를 보낼 때, 이 값이 0이면 처음 접속된 장치로 보냄. 이 값이 0이 아니면 새롭게 연결되어 데이터를 보낸 PC로 전송함.
데이터 전송
- AT+CIPSEND=4,5 // Send 5 bytes to transmission NO.4
- DGFYQ // enter the data, no CR
- Response:SEND OK
- Note: If the number of bytes sent is bigger than the size defined (n), will reply busy, and after sending n number of bytes, reply SEND OK.
데이터 수신
- +IPD,4,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
접속 종료 (transmission NO.4)
- AT+CIPCLOSE=4
- Response:4,CLOSED OK
참고자료 :
.
ESP8266 Config
ESP8266 모듈을 통신 모듈로 사용한다면 다른 마이크로 컨트롤러에서 제어하기위해 AT 커맨드는 반드시 필요합니다. 하지만 ESP8266 모듈만 독립적으로 테스트 하는 경우엔 PC에서 GUI 환경으로 편하게 AT 커맨드를 만들고 제어할 수 있습니다. ESP8266 Config 프로그램을 사용하면 됩니다.
.
클라우드 업데이트 (무선 펌웨어 업데이트)
모듈을 Mode 3으로 맞춰줘야 함. (sta or sta+ap mode)
- AT+CWMODE=3
- OK
- AT+RST
공유기에 연결한 뒤 IP를 확인해야 함
- AT+CWJAP=”ssid”,”12345678″
- OK
- AT+CIFSR
- 192.168.1.134
업데이트 커맨드
- AT+CIUPDATE
- +CIPUPDATE:1 found server
- +CIPUPDATE:2 connect server
- +CIPUPDATE:3 got edition
- +CIPUPDATE:4 start start
- OK
(클라우드 업데이트는 IoT 펌웨어가 올라간 ESP8266 모듈만 가능합니다. 업데이트시 문제가 발생할 수도 있으니 주의하세요.)
참고자료