고급 예제

다양한 도구들을 가지고 마음껏 응용해보세요.

ESP8266을 사용해 보기(1)

2016-02-17 16:31:30

개요

 

아두이노를 사용함에 있어서 가장 꽃이라고 한다면 무선이 아닐까 싶습니다. 그 중에서도 인터넷과 무선으로 연결할 수 이는 WiFi는 그 중에서 최고라고 할 수 있습니다.(kocoafab에도 블루투스와 더불어 가장 많은 문의 글이 올라오는 분야가 아닐까 싶습니다.)

WiFi통신을 사용하면 API를 통해 인터넷에서 날씨를 받아올 수도 있고, IoT구현이나 홈오토메이션, 블루투스, Zigbee를 대체할 수 있는 근거리 통신도 가능합니다.

 

<아두이노와 라즈베리파이를 이용한 홈 오토메이션 구상도>

 

하지만 WiFi를 사용하기 위해서는 별도의 모듈이나 쉴드가 필요한데, 사용하기는 쉽지만 크기나 가격이 사용자에게 상당한 부담으로 다가오게 됩니다.(쉴드의 경우 약 12만원 대)

 

<WiFi쉴드는 사용하기 편하지만 가격면에서는 상당히 아쉽다>

 

이럴 때 이 글에서 소개하는 ESP8266모듈은 이런 문제점을 대체할 수 있는 대안이 될 수 있습니다. 

판매되는 가격은 약 $5달러 정도이며 국내에서는 대략 8,000원대로 구할 수 있었습니다. 쉴드와 비교한다면 1/10이상의 낮은 가격입니다.

 

사용해본 결과로는 방법이 약간 까다롭기는 하지만 사용할 수 있다면 싼 가격에 WiFi통신을 할 수 있는 매력적인 모듈입니다.

(ESP8266모듈이 나온지는 조금 지났지만 초창기에 ESP8266모듈이 중국쪽에서 나왔을때는 상당히 낮은 가격에 적잖은 충격을 안겨주었습니다.

기존의 아두이노 호환 WiFi모듈 가격에 비하면 터무니 없이 낮은 가격에 심지어 블루투스 HC-06보다도 낮은 가격에 WiFi통신을 할 수 있다는 점은 크나큰 메리트 였습니다.

하지만 낮은 가격에 비해 제공되는 정보가 너무 터무니 없이 없다보니 사용할 수 있는 방법을 찾기가 힘들었습니다.

이제는 나온지 꽤 됐기때문에 그나마 많은 정보를 얻을 수 있지만 그래도 인터넷에서 ESP8266을 검색하여 정보를 찾아보면 아직도 한국에서는 확실하게 그렇다 할 정보를 찾기가 힘듭니다.

정보를 구하기 힘들다는 것이 가장 큰 단점이 아닐까 싶습니다.)

 

이번 글에서는 간단하게 ESP에 대해 소개하고 펌웨어를 올리는 방법에 대해 설명하겠습니다.

 

 

 

필요한 부품 목록

 

NO 부품명 수량 상세설명
1 오렌지 보드 1 UNO 호환보드
2 ESP8266 1 WiFi통신 모듈
3 FTDI모듈 1 FTDI
4 mini USB케이블 1 USB케이블

 

부품명 오렌지 보드 ESP8266 FTDI모듈 mini USB케이블
파트

 

 

 

ESP8266 상세 스펙

 

ESP8266은 TI CC3000과 같이 TCP/IP를 칩에 올려서 사용합니다.

ESP8266는 또 ATcommand를 통해 시리얼 모니터에서 명령어를 전송하여 WiFi통신을 제어할 수 있습니다.

그리고 가장 큰 특징은 내부에 32bit ARM-core 기반의 CPU가 존재하여 MCU가 할 수 있는 기능들(ADC, I2C, UART)을 모두 갖추어 있어 지금은 아두이노와 같이 사용하지만 추후에는 아두이노가 없이 ESP8266모듈만으로도 LED를 제어하는 것이 가능합니다.

 

Features

 1. 802.11 b/g/n

 2. Wi-Fi Direct (P2P), soft-AP

 3. Integrated TCP/IP protocol stack

 4. Integrated TR switch, balun, LNA, power amplifier and matching network

 5. Integrated PLLs, regulators, DCXO and power management units

 6. +19.5dBm output power in 802.11b mode

 7. Power down leakage current of <10uA

 8. 1MB Flash Memory

 9. Integrated low power 32-bit CPU could be used as application processor

 10. SDIO 1.1 / 2.0, SPI, UART

 11. STBC, 1×1 MIMO, 2×1 MIMO

 12. A-MPDU & A-MSDU aggregation & 0.4ms guard interval

 13. Wake up and transmit packets in < 2ms

 14. Standby power consumption of < 1.0mW (DTIM3)

 

Documents

SparkFun 데이터 시트 - https://cdn.sparkfun.com/datasheets/Wireless/WiFi/ESP8266ModuleV1.pdf(그래픽 데이터 시트)

Adafruit 데이터 시트 - https://www.adafruit.com/images/product-files/2471/0A-ESP8266__Datasheet__EN_v4.3.pdf

ESP의 정보를 구할 수 있는 곳 - http://www.electrodragon.com/w/ESP8266_wiring_with_Arduino(비록 영문 사이트이긴 하지만 정보가 잘 정리되어 있습니다.)

 

 

 

하드웨어 Making

 

ESP8266 연결 핀

 

※ 연결하실 때 가장 주의 해야할 점은 3.3V를 연결해야 합니다. 5V를 연결했다가는 모듈이 망가질 수 있으니 주의 하세요.

 

 

ESP8266 - FTDI 연결하기

 

 

 

 

가장 좋은 방법은 데이터 시트를 보고 따라 연결하는 것이 제일 안전합니다. 아두이노에서 나오는 전압은 5V인데 ESP8266은 3.3V로 동작하기 때문에 연결하는 방법 또한 상당히 까다롭습니다.

자칫 무시하고 5V로 연결했다가는 제대로 작동이 안될 수도 있고 심하면 모듈 자체가 나가버리기도 합니다.(저 역시 2개 중 하나 5V에 잠깐 연결해 놨었는데 그냥 바로 망가졌습니다.)

5V USB-Serial 모듈을 사용할 경우 위 회로에 맞추어 연결하는 것이 좋습니다.

 

 

 

3.3V를 사용할 경우에는 위 회로와 같이 연결해도 큰 문제는 없어 보입니다.

저 같은 경우는 위 회로와 같이 연결하여 펌웨어 업데이트에 성공하였습니다.

 

FTDI---------------ESP8266

GND ------------- GND

GND   -----------  GPIO0

VCC  ------------- VCC

VCC    ----------- CH_PD

TX   --------------  RXD

RX   --------------  TXD

 

 

 

펌웨어 업데이트 하기

 

 

ESP8266을 사용하기 위해서는 모듈 내부를 세팅해주어야 합니다.

아두이노와 ESP8266을 시리얼로 연결하기 위해서는 아두이노UNO가 UART통신을 1개만 가지고 있기 때문에 하드웨어 시리얼은 더 이상 불가능 합니다. 그렇기 때문에 소프트웨어적 시리얼 통신을 해야하는데 그러기 위해서는 시리얼 통신의 속도를 9600bps로 설정해 주어야 합니다. 

 

일단 먼저 펌웨어를 업데이트 할 수 있는 프로그램을 아래 링크에서 받습니다.

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

 

그리고 펌웨어 파일도 아래 링크에서 내려 받습니다.

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

 

펌웨어 프로그램을 실행시키면 아래와 같은 창을 볼 수 있습니다.

 

 

1. BIN을 누르면 펌웨어 파일을 선택할 수 있습니다. 위의 두 번째 링크에서 받은 파일의 디렉토리를 넣으면 됩니다.

2. COM1이라고 적혀진 부분에는 FTDI의 포트 번호를 적습니다. 장치관리자에서 확인 가능합니다.

3. 여기까지 따라하셨으면 Download를 하면 ESP8266 펌웨어 업데이트를 시작합니다.

 

 

 

 

업데이트가 끝나면 아래와 같이 Leaving이라고 뜹니다.

99%에서 멈추고 저 글씨가 떴더라도 Leaving이라는 글씨가 뜨면 펌웨어 업데이트가 완료된 것이니 선을 빼셔도 됩니다.

 

 

 

kocoafab

안녕하세요. 코코아팹 운영자입니다.

Arduino, Esp8266, WiFi, 통신

손재원 2016-02-25 10:29:48

안녕하십니까. 초보개발자입니다.
현재 esp8266과 wifi 통신을 하는 android app을 개발하고 있는데
소스코드좀 보내주실 수 있으신가요..? 부탁드립니다.
sjw4540@naver.com

장세현 2016-03-15 19:27:21

좋은정보감사합니다.

김선호 2016-04-06 23:26:55

좋은 글 감사합니다. 저 같은 초심자에겐 한 줄기 빛이네요. 그런데 잘 보고 따라하던 중에 알 수 없는 오류가 발생하였습니다.
6%에서 멈추면서 "Invalid head of packet"라고 에러가 뜨는데요. 나름대로 찾아보았지만

---------------------------------------------------------------------------------------------------------------------------------------------
Hi Ranip, I found a soluction. I using the esptool
(https://github.com/themadinventor/esptool) . First I changed the line
44 to "ESP_RAM_BLOCK = 0x180" and changed the line 45 for or to "ESP_FLASH_BLOCK = 0x40" (esptool/esptool.py).

Firmwares ----> http://bbs.espressif.com/viewforum.php?f=46

I have a esp01
---------------------------------------------------------------------------------------------------------------------------------------------

이 말이 무슨 뜻 인지를 몰라서 결국 해결하지 못했습니다. 죄송하지만 도움을 주실 수 있을까요?

유재천 2016-06-21 22:04:32

저도 위의 과정을 경험했습니다. 조금 어려운감이 있고요..
차라리 Esp8266 칩으로 아두이노를 구현한 Wemos D1 이 매력있어 보입니다.
디바**마트에서 팔천원정도 합니다^^
AT 커맨드 안사용해도되고 아두이노에서 사용했던 모든 코드를 ESP8266 칩에서 사용가능하며...
추가적으로 thingspeak.com IoT 사용하시면 엄청 편합니다^^

안도환 2016-08-11 20:27:24

김선호님 저도 해결은 못했지만 써놓으신 글은 명시된 github에 올라가 있는 소스에,
ESP_RAM_BLOCK, ESP_FLASH_BLOCK 두개의 선언값이 있는데 이를 바꾼 겁니다.(0x1800->0x180, 0x400->0x40)
블럭 크기를 줄여서 전송패킷 에러를 줄이려 했던거 같은데,
제 경우에는 먹히지 않네요..(동일한 오류 계속 발생)
저 글을 쓰신분은 그게 통한듯 하구요..
늦어서 보실거 같진 않지만, 제 경험 기록도 할겸 씁니다.

이종혁 2017-01-26 14:13:19

위의 본문처럼 펌웨어 업데이트까지 다 했는데요...
이 다음은 어떻게 해야할지 모르겠네요.
아두이노 쉴드를 꼽은 것 처럼 8266 모듈을 아두이노에 연결하고 사용려면 어떻게 해야 하나요?
DHT11 센서에서 측정한 온도를 blynk 앱을 통해 원격으로 확인하고 싶거든요.
현재 DHT11 센서 값을 LCD 패널에 출력하는것까진 했습니다.
이제 통신을 하고 싶은데 8266-01 모듈에서 막히네요 ㅠㅠ