레이블이 blynk인 게시물을 표시합니다. 모든 게시물 표시
레이블이 blynk인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 28일 월요일

NodeMCU와 Blynk를 사용한 IoT - (2) 튜토리얼 1

이전 포스트(NodeMCU와 Blynk를 사용한 IoT - (1) 환경설정)에서 환경설정이 끝났으므로 이제 실제로 blnyk를 사용해 원격제어를 해 보겠다.



 Blynk 앱을 실행시키고 로그인을 하면 위와 같은 화면이 나온다. 여기서 'Create New Project'를 클릭한다.



 새로 만들 프로젝트 설정 화면이 나온다.



Project Name 부분에 프로젝트의 이름(여기서는 'Tutorial 1')을 넣고 'Arduino Uno'를 클릭하면 위와 같이 어떤 하드웨어를 사용할 지 선택할 수 있다. 여기서는 NodeMCU를 사용할 것이므로 아래쪽으로 내려가 'NodeMCU'를 선택해 준다.


이제  설정이 끝났으므로 'Create Project' 버튼을 눌러주면 된다. 단 위쪽의 AUTH TOKEN 부분의 파란 글자(여기서는 중간 부분을 일부러 흐리게 한 줄)는 잘 기억하고 있어야 한다. 나중에 NodeMCU에 프로그램을 넣어줄 때 AUTH TOKEN 값을 넣어줘야만 서로 통신이 가능하다.


이제부터 프로젝트 화면을 디자인 할 수 있다.



 화면의 아무 부분이나 터치하면 오른쪽에 위와 같이 위젯을 선택할 수 있는 화면이 열린다.


가장 위에 있는 BUTTON을 선택하면 화면에 버튼 위젯이 생성된다.


생성된 버튼 위젯을 누르면 위와 같이 위젯 설정 화면이 나오게 된다.


 'Button' 부분에 버튼의 이름(여기서는 'Orange')를 넣어주고  'PIN' 부분을 누르면 그 버튼에 연결될 출력핀을 선택할 수 있다.


첫번째 버튼은 Digital - D1 핀을 선택 해 준다.


마지막으로 MODE 부분에서 PUSH와 SWITCH 를 선택할 수 있는데 PUSH인 경우는 누르고 있어야만 on이 되는 타입이고, SWITCH인 경우는 토글 스위치로 동작한다. 여기서는 SWITCH 타입을 사용한다. 설정이 끝났으면 우측 상단의 'OK' 버튼을 눌러준다.


이제 첫번째 버튼 위젯 설정이 끝난 것이다. 버튼 위젯에 방금 넣어준 이름과 핀 번호가 표시된 걸 볼 수 있다.


동일한 방법으로 두개의 버튼을 더 만들어 준다. 각각 이름은 'Blue', 'Yellow'로 하고 핀은 D2, D3을 선택해 주면 된다. 


다시 화면의 빈 부분을 눌러 새 위젯 선택 화면으로 오면 이번엔 'Large Slider'를 선택한다.


Slider 설정화면에서 이름은 'Red Brightness'로 하고 핀은 D4를 선택 해 준다. 핀 번호 옆의 0~255 값은 슬라이더를 이동시켰을 때 변화하는 최소값, 최대값이다.


이제 프로젝트 화면 디자인이 끝났다. 화면 우측 상단의 삼각형 버튼을 누르면 디자인 한 프로젝트 화면을 실행하게 된다.


프로젝트를 실행시켰지만 아직 이 프로젝트에 연결된 하드웨어가 없기 때문에 'NodeMCU is offline'이라는 메시지가 나오게 된다. 

이제 프로젝트에 연동되는 하드웨어를 만들어 준다. 이번에 사용할 회로는 다음과 같다.

4개의 LED를 NodeMCU의 D1, D2, D3, D4에 각각 연결해 주면 된다. 여기서는 D1/2/3에 연결된 LED는 on/off로 제어하고 D4에 연결된 LED는 PWM을 사용해 밝기를 제어해 보도록 한다.

여기에 사용할 코드는 다음과 같다.

#define BLYNK_PRINT Serial   
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
 

char auth[] = ".......";   // AUTH TOKEN
void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, "....", "....");   // SSID & PASSWORD
}

void loop()
{
  Blynk.run();

}


아두이노 IDE에서 위와 같이 프로그램 코드를 넣어주면 된다. 소스코드에서 빨간색 '....' 부분은 각각 첫번째부터 Blynk 앱에서 프로젝트를 만들때 자동으로 생성된 AUTH TOKEN 값, 두번째는 자신의 공유기 SSID, 세번째는 공유기 암호로 바꿔 프로그램을 NodeMCU에 업로드 해 주면 된다.

프로그램 업로드가 끝나고 NodeMCU에서 실행되면 이제 다시 스마트폰의 앱으로 돌아와 버튼을 눌러보거나 슬라이더를 움직이면서 보드에 연결된 LED의 동작을 확인해 보면 된다.

NodeMCU의 경우 각 핀에 대해 별도의 설정이나 제어 코드가 하나도 없는데도 Blynk를 사용하는 것 만으로 쉽게 원격에서 제어가 가능해진다.

여기서는 단순히 LED를 연결했지만 LED 대신 릴레이를 연결해 주면 곧바로 가전제품을 원격제어 하는 식의 스마트 홈을 구축할 수 있게 된다. 아래의 경우 SSR(Solid State Relay)를 사용해 전원 스위치 역할을 하게 한 것이다.



(단 220V 교류를 제어하는건 최소한의 전기적인 기본 지식이 필요하다. 기본적인 지식도 없이 시도하다 보면 감전 및 화재등의 사고가 발생할 수 있으니 주의하기 바란다.)



2016년 3월 23일 수요일

NodeMCU와 Blynk를 사용한 IoT - (1) 환경 설정

Blynk를 사용해 IoT 시스템을 구축하는데 가장 쉽고 저렴하게 사용할 수 있는 것이 ESP8266이다. 다만 ESP8266 모듈을 그냥 사용하려면 약간의 추가 회로를 붙여줘야 하는데 그런거 신경 쓸 필요 없이 바로 사용할 수 있는 것이 NodeMCU 이다.

 

 Aliexpress에서 대략 개당 $4~5 정도에 구입할 수 있다. USB-to-Serial, 플래쉬 라이팅에 필요한 버튼들까지 다 들어있어 컴퓨터에 USB 케이블로 연결만 해 주면 바로 사용할 수 있다. 또한 핀헤더도 표준 2.54mm 간격이라 매우 편리하다.


다만 한가지 단점은 보드이 폭이 약간 넓어 일반적인 브레드보드에 꼽으면 점퍼선을 연결할 수가 없다.


그래서 쉽게 사용하기 위해 만능기판에 2열 핀헤더를 이용해 베이스 보드를 만들어 줬다.

ESP8266은 기본적으로 LUA 언어를 사용할 수 있도록 인터프리터가 들어있는데 그보다는 아두이노 IDE를 사용하는 것이 더 편리하고 다양한 라이브러리를 활용할 수 있어 유용하다.

먼저 아두이노(http://www.arduino.cc)를 다운받아 설치해 준다.  버젼 1.6.5를 추천한다.

 http://www.arduino.cc 로 접속해 상단 메뉴바의 'Download'를 선택한다.

 Download 화면에서 바로 다운로드 하지 말고 우측 하단에서 'previous version of the current release'를 클릭한다.

버젼 1.6.5를 다운받아 설치해 주면 된다.

바로 다운로드가 시작되지 않고 아두이노 지원을 부탁하는 화면이 나온다. 기부를 원하면 액수를 지정하고 'Contribute & Download'를 누르면 되고, 기부 없이 바로 다운로드 받으려면 'Just Download'를 선택하면 된다.


아두이노가 설치되면 esp8266을 위한 추가 패키지를 설치해 줘야만 한다.


먼저 아두이노를 실행한다.



상단의 메뉴바에서 '파일'->'환경설정'을 선택한다.


'Additional Boards Manager URLs' 필드에 'http://arduino.esp8266.com/stable/package_esp8266com_index.json'를 입력해 준다.


위와 같이 입력했으면 '확인' 버튼을 눌러준다.


만일 아두이노를 이전부터 사용하고 있어 'Additional Boards Manager URLs' 필드에 위와 같이 다른 주소가 들어있는 경우라면 기존의 주소 뒤에 콤마(,)를 넣고 주소를 추가해 주거나 아니면 오른쪽의 아이콘(위의 스크린샷에서 오른쪽의 아이콘)을 눌러준다.


그러면 새 창이 열리는데 여기에서 한 줄에 하나씩 주소를 넣어주고 '확인'을 눌러줘도 된다.

이제 URL 추가가 끝났으면 실제 보드 패키지를 설치해야 한다.


'도구'->'보드'->'Boards Manager...' 를 선택한다.


보드 매니져 창이 열리고 추가할 수 있는 보드 패키지 목록이 보인다.


아래쪽으로 스크롤 해 보면 esp8266 항목이 보인다. 이 항목을 선택하면 우측 하단에 'Install' 버튼이 생긴다. 이 버튼을 눌러주면 아두이노에서 사용하는 ESP8266 패키지가 설치된다.

버튼을 누르면 바로 설치가 진행되는데 약간의 시간이 걸린다. 설치가 끝나면 '닫기' 버튼을 눌러 Boards Manager를 닫아준다.


 이제 '도구'->'보드'를 보면 이전에는 보이지 않았던 ESP8266 모듈을 사용한 보드들 항목이 보이게 된다. 자신이 사용하고자 하는 보드를 선택해주면 된다. 여기서는 NodeMCU 0.9를 선택했다.


NodeMCU로 보드를 선택하고 '파일'->'예제'로 가서 아래쪽으로 내려가 보면 ESP8266 예제코드들을 볼 수 있다.

이제 실제로 동작을 확인하기 위해 프로그램을 입력해 본다.

먼저 아두이노에서 아래의 코드를 입력해 준다.

void setup()
{
  pinMode(1, OUTPUT);
}

void loop()
{
  digitalWrite(1, HIGH);
  delay(500);
  digitalWrite(1, LOW);
  delay(500);
}



위의 사진에서 표시된 부분이 1번 핀에 연결되어 있는 LED이다. 위의 코드가 실행되면 이 LED가 깜빡이게 된다.

이제 프로그램을 보드로 업로드 해 보겠다.








아두이노에서는 다른 보드와 동일하게 상단의 'Upload' 버튼을 눌러주면 된다.


다만 NodeMCU의 경우 아두이노 보드처럼 'Upload' 버튼만 누르면 되는게 아니고, 보드가 flash download 모드로 들어가도록 해 줘야만 한다. 위에 두개의 버튼이 있는데 먼저 '1'번 버튼을 누르고 있는 상태에서 '2'번 버튼을 눌렀다 뗀다. 그리고 '1'번 버튼을 떼 주면 된다. 


정상적으로 업로드가 진행되면 위와 같이 진행된다. 프로그램 업로드가 끝나면 LED가 반짝이게 된다.

* NodeMCU 보드를 컴퓨터에 연결했을 때 디바이스 드라이버를 찾지 못하면 구글에서 CH340G driver 로 검색해 드라이버를 설치해 주면 된다. 


NodeMCU와 Blynk를 사용한 IoT - (2) 튜토리얼 1

2016년 2월 25일 목요일

라즈베리 파이로 Blynk 서버 만들기(Make local Blynk server using Raspberry Pi)

Blynk를 사용할 때 자신의 컴퓨터에 로컬 서버를 만들어 사용할 수도 있다. 여기서는 라즈베리 파이를 사용해 자신만의 로컬 blynk 서버를 구축하는 방법을 설명하겠다.

Blynk 서버는 java로 구현되어 있어 설치하려면 먼저 java 8이 설치되어 있어야만 한다. 현재 설치되어 있는 버젼을 확인하려면 다음과 같이 하면 된다.

% java -version
Output: java version "1.8.0_40"

설치되어 있지 않거나 버젼이 낮은 경우 다음과 같이 설치해 주면 된다.

% sudo apt-get install oracle-java8-jdk

Java 8이 설치되었으면 서버를 다운받는다.

% wget "https://github.com/blynkkk/blynk-server/releases/download/v0.13.0/server-0.13.0.jar"

다운이 완료되면 바로 실행할 수 있다.

% java -jar server-0.13.0.jar -dataFolder ~/Blynk     

 이 경우 디폴트 하드웨어 포트는 8442, 디폴트 어플리케이션 포트는 8443(SSL port)가 된다. 실행하고 잠시 기다리면 화면에 아래와 같은 메시지가 나오게 된다.

Blynk Server successfully started.
All server output is stored in current folder in 'logs/blynk.log' file.
 
만일 라즈베리 파이가 부팅될 때 blynk 서버가 자동으로 실행되게 하고 싶으면 /etc/init.d/rc.local 파일의 맨 끝 부분에 아래 줄을 추가해 주면 된다.

java -jar /home/pi/server-0.13.0.jar -dataFolder /home/pi/Blynk &

아니면 다른 방법으로는 crontab을 이용할 수도 있다.

% crontab -e 

위의 명령을 실행한 후 아래의 내용을 추가한 다음 저장하고 종료하면 된다.

@reboot java -jar /home/pi/server-0.13.0.jar -dataFolder /home/pi/Blynk &

위와 같이 실행하면 모든 설정이 디폴트로 실행되게 되는데 설정을 변경하고 싶으면 서버가 있는 디렉토리에 'server.properties' 파일을 만들어 설정 내용을 넣어주면 된다.

아래는 server.properties 예제 파일이다.


#hardware ssl port
hardware.ssl.port=8441

#hardware plain tcp/ip port
hardware.default.port=8442

#http port
http.port=8080

#web sockets ssl port
ssl.websocket.port=8081
#web sockets plain tcp port
tcp.websocket.port=8082


#https port
https.port=9443

#application ssl port
app.ssl.port=8443

#by default server uses embedded in jar cert to simplify local server installation.
#WARNNING DO NOT USE THIS CERTIFICATES ON PRODUCTION OR IN WHERE ENVIRNOMENTS REAL SECURITY REQUIRED.
#provide either full path to files either use '.' for specifying current directory. For instance "./myfile.crt"
server.ssl.cert=
server.ssl.key=
server.ssl.key.pass=
client.ssl.cert=
client.ssl.key=

#by default System.getProperty("java.io.tmpdir")/blynk used
data.folder=

#folder for logs.
logs.folder=./logs

#log debug level. trace|debug|info|error. Defines how precise logging will be.
log.level=info

#defines maximum allowed number of user dashboards. Needed to limit possible number of tokens.
user.dashboard.max.limit=10

#defines maximum allowed widget size in KBs as json string.
user.widget.max.size.limit=10

#user is limited with 100 messages per second.
user.message.quota.limit=100
#in case of consistent quota limit exceed during long term, sending warning response back to exceeding channel
#for performance reason sending only 1 message within interval. In millis
user.message.quota.limit.exceeded.warning.period=60000

#maximum allowed number of notification queue. Queue responsible for processing email, pushes, twits sending.
#Because of performance issue - those queue is processed in separate thread, this is required due
#to blocking nature of all above operations. Usually limit shouldn't be reached.
notifications.queue.limit=10000

#this setting defines how often we can send mail/tweet/push or any other notification. Specified in seconds
notifications.frequency.user.quota.limit=60

#maximum size of user profile in kb's
user.profile.max.size=128

#period in millis for saving all user DB to disk.
profile.save.worker.period=60000

#period in millis for saving stats to disk.
stats.print.worker.period=60000

#specifies maximum period of time when application socket could be idle. After which
#socket will be closed due to non activity. In seconds. Default value 600 if not provided.
#leave it empty for infinity timeout
app.socket.idle.timeout=600
#specifies maximum period of time when hardware socket could be idle. After which
#socket will be closed due to non activity. In seconds. Default value 15 if not provided.
#leave it empty for infinity timeout
hard.socket.idle.timeout=15

#Enables native socket transport for Linux using JNI. Should be turned on only if you 100% sure.
#may not work on some environments. Used to increase server performance. Performance boost is ~20-40%.
enable.native.epoll.transport=false

#Enabled native openSSL support for SSL handlers. Should be turned on only if you 100% sure.
#may not work on some environments. Used to increase server performance. Performance boost is ~16%.
#For more details see - http://netty.io/wiki/forked-tomcat-native.html
enable.native.openssl=false

#mostly required for local servers setup in case user want to log raw data in CSV format
#from his hardware
enable.raw.data.store=true

#size of async logger ring buffer. should be increased for loads >2-3k req/sec
async.logger.ring.buffer.size=8192


#ADMINISTRATION SECTION

admin.rootPath=/admin

#administration https port
administration.https.port=7443

#comma separated list of administrator IPs. allow access to admin UI only for those IPs.
#you may set it for 0.0.0.0/0 to allow access for all.
#you may use CIDR notation. For instance, 192.168.0.53/24
allowed.administrator.ips=127.0.0.1


#comma separated list of users allowed to create accounts. leave it empty if no restriction required.
allowed.users.list=

이제 설치한 로컬 서버를 사용하려면 먼저 스마트폰 앱을 실행하고 로컬 서버에 어카운트를 만들어 줘야 한다.


 Create New Account 버튼을 누른다.


디폴트로는 blynk 서버에 어카운트가 만들어 지는데 여기서는 로컬 서버에 만들어야 하기 때문에 먼저 위에 표시한 버튼을 눌러준다.


 로컬 서버를 지정해 준다. IP주소는 로컬 blynk 서버가 설치된 라즈베리 파이의 ip 주소이고 포트 번호는 따로 server.properties 파일에서 수정해 주지 않았다면 디폴트 어플리케이션 포트인 8443을 넣어주고 OK 버튼을 누른다.


 이제 로컬 서버에서 사용할 어카운트 이름(이메일주소)와 암호를 입력하고 'Create New Account' 버튼을 누른다.


 어카운트가 만들어 지고 자동으로 로그인이 되었다. 이제 'Create New Project' 버튼을 눌러 프로젝트를 만들어 주면 된다.


 프로젝트 이름, 이 프로젝트에서 사용할 보드를 지정하고 'Create project' 버튼을 누르면 된다. 화면 중간에 AUTH TOKEN이라는 값이 있는데 (여기서는 53b32b....5996c95) 이 값이 일종의 암호 역할을 하기 때문에 보드의 프로그램 코드에 넣어줘야 하는 값이다.


 이제 위에서 지정한 'test1'이란 이름의 프로젝트가 만들어 진걸 볼 수 있다.

하드웨어 보드의 프로그램 역시 blynk서버 대신 로컬 서버를 사용하도록 변경해 줘야 한다.

스케치 코드의 설정 부분에는 Blynk.begin(auth); 아니면 Blynk.begin(auth, ssid, pass); 가 들어 있는데 각각 뒤쪽에 로컬 서버를 지정해 줘야 한다. 즉 아래와 같이 수정해 줘야만 한다.

Blynk.begin(auth);    -> Blynk.begin(auth, "hostname"); 또는 Blynk.begin(auth, IPAddress(192,168,0,222));

Blynk.begin(auth, ssid, pass);    -> Blynk.begin(auth, ssid, pass, "hostname"); 또는 Blynk.begin(auth, ssid, pass, IPAddress(192,168,0,222));

위에서 auth는 프로젝트 생성시의 AUTH TOKEN값...즉 여기서는 "53b32b....5996c95" 이고, ssid, pass는 공유기의 SSID와 접속 암호가 된다. hostname 이나 IPAddress()의 파라미터 값은 각자 라즈베리 파이의 hostname 또는 IP주소로 바꿔줘야 한다.
























2015년 8월 20일 목요일

Blynk를 사용해 아두이노에서 IoT 맛보기

Blynk (http://www.blynk.cc)를 사용하면 아두이노를 스마트폰이나 PC와 연결하여 매우 쉽게 제어가 가능해진다. 물론 아두이노 뿐 아니고 ESP8266이나 Raspberry Pi등에서도 사용이 가능하다. 현재 사용할 수 있는 하드웨어 목록은 http://community.blynk.cc/t/hardware-supported-by-blynk/16 에서 확인할 수 있다.


여기서는 아두이노 우노에 CC3000 Wifi shield를 사용해 보도록 한다.



먼저 CC3000 Wifi shield를 위해 Adafruit_CC3000 Library를 설치해준다. https://github.com/adafruit/Adafruit_CC3000_Library 에서 다운받을 수 있다. (라이브러리 설치 방법은 이전 포스트 (http://arsviator.blogspot.kr/2015/07/install-library-in-arduino.html)

다음은 Blynk 라이브러리를 설치해 줘야 한다. https://github.com/blynkkk/blynk-library 에서 다운받으면 된다.

정상적으로 설치를 완료했으면 아두이노를 재시동하고 예제 -> Blynk -> BoardsAndShields 에서 CC3000을 선택한다.


코드 구조는 매우 간단하다. 단 코드중에 아래 표시한 부분은 각자 자신에 맞게 변경해 줘야만 한다.


일단 여기까지 진행하였으면 아두이노는 일단 잠시 놔두고 스마트폰을 설정해 준다.



Blynk 홈페이지에 보면 iOS와 안드로이드용 앱을 다운받을 수 있는 링크가 있다. 자신의 폰에 맞는걸 선택해 자신의 폰에 Blynk 앱을 설치해 준다.


앱을 실행해 서비스에 가입해주면 된다. 가입 후 로그인 되면 다음과 같은 초기화면을 볼 수 있을 것이다.


Create New Project를 눌러 새 프로젝트를 생성한다.


프로젝트 이름(여기서는 FirstTest)을 써주고, 사용할 보드(여기서는 아두이노 우노)를 선택한다. 그 아래쪽의 Auth Token이 아두이노 스케치 코드에 넣어줘야 하는 값이다. E-mail 버튼을 누르면 가입시 사용한 메일주소로 이 토큰값이 메일로 보내지기 때문에 메일에서 복사해 붙이면 된다. 이제 Create Project 버튼을 눌러주면 프로젝트가 만들어진다.


이제 화면을 디자인해야 하므로 화면 검은색 부분중에 원하는 부분을 터치한다.


그럼 위와 같이 설치할 수 있는 위젯 목록이 나타난다. 여기서는 단순히 아두이노에 있는 LED on/off를 제어하기 위해 Button을 선택한다.


원하는 위치에 버튼이 추가되었다. 이제 버튼의 설정을 변경해 주기 위해 버튼을 터치한다.


버튼 설정 화면이다. 여기서 버튼의 이름(여기서는 LED)을 지정하고, 이 버튼이 아두이노의 어떤 핀과 연동될 것인지 알려준다. (아두이노 보드에 붙어있는 LED는 D13에 연결되어 있으므로 Digital에 D13을 선택)


설정이 끝나면 스위치의 이름과 연동된 핀 번호가 스위치에 표시된다. 디자인이 다 끝나고 실제 동작을 시키려면 맨 오른쪽 위의 삼각형 버튼을 선택해주면 된다.


아두이노 코드에 Auth Token 값을 넣어주고, setup() 함수에 pinMode(13, OUTPUT); 을 추가한 다음 아두이노에 업로드 하면 된다.

업로드 후 시리얼 모니터를 열어봤을 때 다음과 같이 출력되면 된다.


이제 스마트폰의 버튼을 눌러보면 그에 따라 아두이노의 LED가 on/off 되는걸 볼 수 있을 것이다.

Blynk에는 단순히 스위치 뿐 아니고 슬라이드, 조이스틱, 그래프등의 다양한 위젯이 있어 스마트폰에서 아두이노에 연결된 액츄에이터를 제어하거나, 반대로 아두이노에 연결되어 있는 센서들의 상태를 다양한 방법으로 확인이 가능하다. 또한 Push notification이나 Twitter 위젯도 있어 아두이노가 특정 상태가 되면 폰으로 push 메시지를 보내거나 트위터에 메시지를 트윗하는것도 가능하다. 다음 포스트에서 blynk를 좀 더 다양하게 사용하는걸 다뤄보도록 하겠다.