2016년 11월 8일 화요일

ESP8266 기반 Blynk활용 IoT 기기 개발

이 글은 ESP8266 기반 IoT 기기 개발에 대한 내용이다. 이 기기는 2~3달러로 매우 싸지만, WiFi와 GPIO포트를 지원하여, IoT기기 개발에 매우 좋은 소형 컴퓨터이다.

이 글은 ESP8266을 기반으로 Blynk를 사용해 IoT기기를 개발하는 방법을 설명한다. ESP8266은 여러가지 버전이 있다. 다음은 ESP8266-01버전이다.


이 글은 다음 레퍼런스를 참고하였다.
이 중에 아두이노 우노나 메가를 이용한 ESP 예제를 간단히 따라해 본다. 이 경우, 기존 아두이노의 작업들을 재활용할 수 있는 장점이 있다. 저렴한 ESP 로 WiFi기반 IoT 기기를 개발할 수 있다.

이 튜토리얼을 따라가기 위해서는 다음과 같은 부품이 필요하다.
  1. Arduino Uno
  2. 점퍼 와이어
  3. ESP8266-01
  4. 가변저항 및 버튼 스위치
소프트웨어 라이브러리 다운로드는 다음과 같다.

1. 아두이노 IDE 통합개발환경을 설치한다.
2. Blynk 아두이노 라이브러리를 다운로드 한다.
3. Blynk 라이브러리를 다운로드 한다.
4. Blynk-ESP8266 아두이노 라이브러리를 다운로드한다.
5. pySerial 을 다운로드 한다.
6. esptool 을 다운로드 한다.
7. SDK1.0.0 v0.22 ESP2866 펌웨어를 다운로드한다.
8. ESP8266_flasher 실행 프로그램을 다운로드한다.
9. Blynk 앱을 휴대폰에 설치한다.

1. ESP 펌웨어 설치
ESP와 아두이노를 연결한다. 

ESP8266 - Arduino
GND      - GND
GP2       - 연결안함
GP0       - GND
RXD       - RX
TXD       - TX
CHPD     - 3.3V
RST        - 연결안함
VCC       - 3.3V


이제 esp8266_flasher.exe 를 실행하고, AT22SDK100-2015-03-20-boost12.bin 을 선택한다.



COM 포트를 적절히 선택하고, download 버튼을 클릭한다. 제대로 펌웨어 업그레이드가되면, failed to leave flash mode this is OK 메시지를 볼 수 있다. 



업데이트 중에는 다음과 같이 ESP8266 모듈의 파란색 LED가 깜빡거리는 것을 볼 수 있다.


* 참고: CP2102 USB-TLL 모듈 통해 펌웨어를 업데이트하는 방법이 있다.  CP2102는 2000원 정도로 가격이 매우 저렴하다. 

CP2102 USB-TLL MODULE

ESP와 CP2102 USB-TLL간 회로 연결은 다음과 같이 한다.

ESP8266 - CP2102
GND      - GND
GP2       - 연결안함
GP0       - GND
RXD       - TX
TXD       - RX
CHPD     - 3.3V
RST        - 연결안함
VCC       - 3.3V

그리고, ESP8266 Flash Downloader 프로그램을 이용해, 앞서 설명했던 것과 똑같이 펌웨어 업데이트를 하면 된다.

ESP는 AP, STA, AP+STA모드를 지원한다. 이는 ESP8266 config 프로그램을 통해 다음과 같이 손쉽게 설정할 수 있다.


* 참고: 리눅스 환경에서는 파이썬을 이용해 펌웨어를 업그레이드 할 수 있다. PySerial-2.7 폴더에 들어간 후, python setup.py install 를 설치한 후, 파이썬 esptool.py 를 이용해, 펌웨어 업그레이드가 가능하다.

2. 아두이노 Blynk와 Blynk-ESP8266 라이브러리 설치
아두이노 Blynk와 Blynk-ESP8266 라이브러리를 설치한다. 이를 위해 아두이노 IDE 를 실행하고, 스케치의 Include library 메뉴에서 다운로드한 파일 중 다음의 zip 파일을 추가/설치한다.

blynk-library-master
ITEADLIB_Arduino_WeeESP8266-master

메뉴에서 스케치의 Include Library 메뉴에서 manage library 메뉴를 통해 ESP8266 library를 업데이트한다.

3. 아두이노 코드 업로드
다음과 같이 연결한다.

ESP8266 - Arduino Mega
GND      - GND
GP2       - 연결안함
GP0       - 연결안함
RXD       - TX
TXD       - RX
CHPD     - 3.3V
RST        - 연결안함
VCC       - 3.3V

아두이노 우노의 경우는 다음과 같이 연결한다 (혹시, 잘 동작 안되면, Arduino Mega와 같이 우노의 RX, TX핀으로 직접 연결한다. 이 예제의 경우, 직접 RX, TX를 연결하였다. 참고로 SW 시리얼은 아직 불완전하다는 말이 있다).

ESP8266 - Arduino UNO
GND      - GND
GP2       - 연결안함
GP0       - 연결안함
RXD       - D3
TXD       - D2
CHPD     - 3.3V
RST        - 연결안함
VCC       - 3.3V

이 예에서는 아두이노 D7 핀에 LED를 연결해 제어할 것이다.

1. 아두이노 메가의 경우, IDE의 파일 > 예제 > Blynk > BoardsAndShields > ESP8266_Shield_HardSer 예제를 선택한다. 아두이노 우노는 ESP8266_Shield_SoftSer 예제를 선택한다. 만약, ESP8266 통신 속도를 9600 bps로 설정하려면, AT모드에서, AT+UART_DEF=9600,8,1,0,0 명령을 수행해야 한다. 이 예제의 경우, 115200 bps를 사용하였다.

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "...";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "...";
char pass[] = "";

// Hardware Serial on Mega, Leonardo, Micro...
#define EspSerial Serial

// Your ESP8266 baud rate:
#define ESP8266_BAUD 115200

ESP8266 wifi(&EspSerial);

void setup()
{
  // Set console baud rate
  Serial.begin(115200);
  delay(10);
  // Set ESP8266 baud rate
  EspSerial.begin(ESP8266_BAUD);
  delay(10);

  Blynk.begin(auth, wifi, ssid, pass);
}

void loop()
{
  Blynk.run();
}


2. 스마트폰의 Blynk 앱을 실행하고, 프로젝트를 하나 만든 후, 생성된 인증 토큰을 ESP8266 예제의 해당 부분에 붙여 넣는다. 그리고, WiFi네트워크의 SSID, PASSWORD를 소스코드의 해당 부분에 붙여 넣는다.

3. 아두이노 IDE 모니터링 프로그램을 실행하면, 다음과 같이 아두이노가 Blynk 서버와 접속되는 정보를 볼 수 있다.


4. Blynk 제어
다음과 같이 아두이노 버튼과 가변저항을 수정하면, Blynk 위젯 정보가 원격으로 변화되는 것을 알 수있다. 


아울러, LED를 아두이노 13번 핀에 연결하고, Blynk에서 버튼 위젯을 D13에 연결하여, 버튼을 클릭하면, 다음과 같이 정상적으로 동작하는 것을 확인할 수 있다.




이런 식으로 센서와 연결된 장치를 인터넷 기반으로 제어할 수 있다. 그러므로, 시간과 노력이 있다면, 누구나 IoT 기기를 저렴하고 손쉽게 개발할 수 있다.

댓글 없음:

댓글 쓰기