Blynk앱 사용법을 터득하고, nodemcu를 이용, 앱을 통해 led를 제어할 수 있다. nodemcu에 대한 설명은 nodemcu 를 참조하길 바란다.
Blynk 란?
자신이 만든 제품을 스마트폰을 통해 제어하려면 어플과 서버구축 등이 필요하다. 이를 초보자가 다 만들기에는 시간과 비용이 많이 든다. 이를 해결해 준 어플이 바로 Blynk 앱이다. 심지어 무료이다. (단, 부분유료이다. 일정 할당량을 초과하면 돈을 주고 추가로 구입해야한다.) 즉, iot를 입문자가 실현시킬 수 있는 매우 유용한 어플이다.
Blynk 원리
Blynk 앱 > 아두이노 제어,
앱을 통해 데이터를 보내면, Blynk 서버가 데이터를 받는다. 그러면 서버가 다시 아두이노로 데이터를 보내 아두이노가 이를 받고 정해진 일을 수행하는 형태이다.
아두이노 > Blynk 앱
물론 반대도 가능하다. 아두이노에서 받은 센서값을 서버가 받고 이를 어플로 보내어 가공된 데이터를 확인하는 형태이다.
시작하기
1. 먼저 https://github.com/blynkkk/blynkkk.github.io/blob/master/SupportedHardware.md
에서 자신이 쓰는 모듈이 블링크앱에서 호환이 되는지 찾아보자. (다 코딩하고 마지막에 지원이 안되서 실패하는 불상사를 막자)
2. https://www.blynk.cc/getting-started/에서 안드로이 또는 ios 버전을 다운받자.
3. 블링크 라이브러리 다운. (설치주소에 같이 있다.) > 모든 파일들을 아두이노의 스케치북 라이브러리 폴더에 붙여넣기 한다. 아두이노 스케치북 폴더는 IDE에서 파일-환경설정에서 스케치북 위치를 확인 할 수 있다.
연습하기 ( 앱을 통해 nodemcu led on/off )
1. 앱 실행 회원 가입 후, 프로젝트를 만든다. 2. 내가 제어하고 싶은 하드웨어(nodemcu)를 선택, Connection은 WiFi 를 선택 3. AUTH TOKEN 에서 E-mail 버튼을 눌러 해당 토큰을 메일로 받는다. 그리고 Create 실행 4. 버튼을 끌어 들이고 클릭, OUTPUT에서 D4 를 디지털 출력핀으로 설정한다. 5. 아두이노 IDE를 실행 > 파일 > 예제 > Blynk > Board_WiFi > nodemcu 스케치 불러오기
6. 스케치에서 char auth[] 부분에 메일에서 받은 토크를 입력하고 char ssid[] 부분에서 스마트폰이 연결된 와이파이 이름 입력 char pass[] 에 와이파이 비밀번호를 입력한다. 7. 업로드 후, 앱을 통해 nodemcu에서 led가 빛나는 지 확인한다.
nodemcu에 대해 간략히 이해하고, 이를 바탕으로 드라이버 및 개발환경 설치를 할 수 있다. (세부적인 설명은 LED 제어하기에서 설명하겠다.)
nodemcu 란?
WIFI가 가능한 ESP-8266 기반 보드이다. 즉, 독립적으로 소스를 올려 여러가지 모듈을 WIFI통신을 통해 제어 할 수 있다. nodemcu는 Lua라는 언어기반으로 개발환경이 적용되어 있지만, 사람들이 많이 사용하는 아두이노IDE로 개발이 가능하다.
장점
>모듈이 아니다. 보드이다. 즉, 아두이노 등 플랫폼 없이 독립적으로 아두이노 처럼 여러 모듈을 제어할 수 있다. (물론 모듈처럼 아두이노와 시리얼 통신이 가능하다.)
>ESP8266은 ESP-01 부터 12까지 많다. 하지만 숫자가 낮은 시리즈는 개발하기에 너무
제한적인 요소가 많고( 전압제어하기, 펌웨어 등), 따로 납땜을 하고 핀을 설치해야 하 기 때문에 불편하다. 이러한 모든 요소들을 해결한 12시리즈가 나오게 되었다. nodemcu는 12시리즈 기반이다.
>가격이 저렴하다. 7천원 정도에 와이파이 환경을 개발할 수 있다. (ESP-01 사지말자..)
> LUA라는 언어기반이지만 아두이노IDE로 개발이 가능하다.
> 많은 사람들이 이용하기 때문에 많은 정보를 쉽게 찾을 수 있다.
단점
모듈이 아니기 때문에, 외부전원이 필요하다. 마이크로 USB케이블로 연결한다.
Nodemcu 마다 다르지만 일부는 펌웨어 업그레이드가 필요하다.
NODEMCU 사용법
보드 뒷면에도 간략히 적혀 있다. CP2102 드라이버 설치하고, 9600의 통신속도를 이용한다.
NODEMCU는 크게 2가지 칩으로 나뉜다. CP2102 칩과 ch340 칩이 있다. 자기의 칩에 맞게 설치를 해야한다.
C2102 칩
1. 드라이버 설치하기
https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers#windows 에 접속하면,
위와 같은 페이지가 나온다. 자신의 컴퓨터 운영체제에 맞는 SOFTWARE를 다운받는다.(Release notes 는 설명서 정도이다. 그 옆에 VCP로 끝나는 프로그램을 다운받자. 필자는 윈도우 10이라, 가장 상단에 있는 프로그램을 다운 받았다. 실행하면, x86, x64 버전이 있는데, 자신의 컴퓨터 램이 4gb이상이면 x64, 이하이면 x86을 선택한다. 설치가 끝나면 nodemcu를 연결하여 확인하다.
1-1. 펌웨어 설치하기(연결이 안되는 분)
플래시 다운하기.
https://github.com/nodemcu/nodemcu-flasher 에서 초록색 버튼을 클릭하여 Download ZIP을 선택하여 다운받는다.
펌웨어 다운하기.
https://github.com/nodemcu/nodemcu-firmware/releases 에서 2.2.0-master_2018~의 파란 글씨가 보이는데, 날짜가 가장 최근의 글에서 Source code (zip) 을 다운받는다.
플래시 프로그램을 설치하고, 실행하여 config 을 클릭, 톱니바퀴 클릭하여 다운받은 펌웨어를 선택한다. 이후 Operation 의 Flash 버튼을 눌러 펌웨어를 보드에 업로드 한다.\
CH340시리즈
1. http://www.wch.cn/product/CH340.html 접속하여 하단에 os 별로 선택한다.
window 10 같은 경우 ch341ser.exe 를 다운받는다.
2. 실행하여 INSTALL 버튼을 누르면 된다. 드라이버 설치가 잘 안되면 프로그램실행전 우
측 클릭하여 관리자 권한으로 실행하길 바란다.
3. 아두이노 IDE를 실행하고 파일-환경설정을 들어간다.
4. 추가적인 보드 매니저 URLs 에 http://arduino.esp8266.com/stable/package_esp8266com_index.json 입력 후 확인.
5. 툴-보드-보드매니저를 클릭 후 검색에 esp8266을 입력하여 해다 보드를 다운 받는다.
6. 이 후 보드를 nodemcu 1.0 esp-12e를 선택 후 nodemcu 해당 포트를 선택하면 끝이다.
릴레이의 개념을 이해하고, 220V로 작동되는 제품을 아두이노로 제어하는 법을 알 수 있다.
1. 릴레이란?
낮은 전압(즉 아두이노)으로 고전압(220V작동되는 제품)을 ON/OFF 제어할 수 있는
장치이다.
릴레이의 원리는 솔레노이드 코일을 이용하여 도체를 이동시켜 전류를 ON할지 OFF할 지 결정 짓는 것이다. 여기서 솔레노이드 코일은 전류가 흘려지면 전자석으로 성격이 변한다.
이런 전자석을 이용해 도체를 제어하여 전류를 제어하는 것이다.
2. 릴레이 구조 및 연결
릴레이는 한쪽에 S, +, - 가 있다. S는 아두이노 디지털 핀에 연결하고, +는 5V 핀에 -는 GND에 연결을 해주면 된다. 또 다른 쪽엔 NC, COM, NO 가 있다. 이 부분은 220V 제품에 연결되어 진다.
NC는 Normal Close 의 약자이며, 평시 붙어 있는 접점이다. 솔레노이드가 작동되면 떨어진다. 전류가 흐르지 않으면 평시 붙어 있다.
NO는 Normal Open 의 약자로, 평시 떨어져 있는 접점이다. 솔레노이드가 흐르면 붙여진다. 마찬가지로 전류가 흐르지 않으면 평시 떨어져 있다. 즉, NC는 초기상태가 전원이 ON상태이며 NO는 초기상태가 전원 OFF 상태이다.
마지막으로 COM은 Common Terminal(공통단자)의 약자이다. 항상 연결해 줘야 하는 포트이다. COM은 VCC로 보면 된다. 따라서 연결할 때 보통은 NC, COM 이나 NO, COM에만 연결한다. NC. NO는 각각 OUTPUT1, 2로 보면되고, COM은 VCC로 보면 된다.
3. 적합한 릴레이 모듈 선택하기
릴레이마다 제어할 수 있는 전류나, 전압 등이 다양하다. 따라서 제품의 정확한 스펙을 확인 후 그에 맞는 릴레이를 사용해야한다. 릴레이 윗면에 10A 250VAC ~ 10A 30VDC 등이 적혀 있는데 이는 10암페어 250V 교류, 10암페어 30 직류 까지 제어할 수 있다는 것이다.
필자는 전기밥솥을 제어하기 때문에 DATA SHEET를 찾아보니 소비전력이 최대 400W라는 것을 알게 되었다. P=VI 이므로 I=1.82 A 가 나오므로 일반적인 릴레이를 사용해도 된다.
1. 시리얼 통신이란? 시리얼 통신은 데이터를 주고 받을 수 있는 직렬 통신이다.
시리얼 통신은 아두이노간 통신을 할 수 있으며, 더 나아가 블루투스-아두이노,
WIFI-아두이노 등 데이터를 송/수신 할 수 있는 기초적이면 가장 핵심적인 수단이다.
2. 시리얼 통신의 종류 시리얼 통신에는 SPI, I2C, UART 등이 있다.
하지만 아두이노 관점에서 가장 유용하고 많이 쓰이는 것은 UART 등이 있다.
3. UART
UART의 개념 및 주의사항을 알아보자.
먼저 보레이트라는 것을 알아야 한다. 보레이트는 시리얼통신의 속도이다. 이것이 왜 중요하냐면 아두이노에서 데이터를 주고 받을 때, 시리얼 통신 속도가 같지 않게 설정한다면
디버깅할 때 오류가 생기기 때문이다.
보통은 9600 을 많이 쓰지만, 다른 속도를 사용하여도 상관없다. 다만 라이브러리에서 115200bps 까지 지원한다고 하니 이 아래 속도를 이용해야 한다.
4. UART 종류 아두이노는 하드웨어 통신과 소프트웨어통신으로 데이터를 송/수신 할 수 있다.
하드웨어 통신은 우노의 경우 TX0, RX0 이 표신 된 곳으로 연결할 때 하드웨어 통신이라 한다. 하지만 아쉽게도 우리가 PC와 아두이노를 통해 데이터를 주고 받을 때 즉 업로딩 과정 및 시리얼 모니터를 이용해 데이터를 주고 받을 때 이 핀을 사용하기 때문에 아두이노간 통신 과 와이파이 통신은 불가능 하다(따로 핀이 비어있지만 비어있는 것이 아니다). 하지만 메가는 이러한 하드웨어가 1~3까지 총 3개가 있기 때문에 시리얼 통신(PC-아두이노)과 다른 보드와 데이터 통신을 동시에 할 수 있다.
소프트웨어 통신은 눈치 챗다시피 하드웨어 핀이 아닌 일반 디지털 핀을 TX(TRANSFER 송신), RX(RECIEVE,수신)로 소프트웨어적으로 변경하여 통신하는 것이다. 이는 메가보단 우노에서 가장 많이 쓰인다.
5. UART 함수 먼저 하드웨어핀을 이용한다면 따로 라이브러리를 불러올 필요가 없지만, 소프트웨어통신을 한다면 SoftwareSerial.h 함수를 불러와야 한다.
#include <SoftwareSerial.h> // 라이브러리 함수를 불러들인다.
SoftwareSerial BTSerial(10,11); // BTSerial은 임의로 지정한 이름이다. rx, tx 순이며 10, 11번 핀을 rx, tx로 사용한다는 의미이다.
if(BTSerial.available()) { //시리얼 모니터에 데이터가 출력(저장) 되어 있는지 여부
char state = BTSerial.read(); // 있다고 하면 그 데이터를 읽어라 즉 수신해라,
if(state =='y') digitalWrite(red, HIGH); // 수신한 값이 y이면 다음을 실행해라,
else digitalWrite(red, LOW);
BTSerial.println(state); // y값을 시리얼모니터에 출력해라
}
}
----------------------------------------------------------------------------------------------
위와 같은 코딩을 해석해 보았다. 정리하면
데이터 송신할 때 쓰는 명령어는 Serial.print(), Serial.println(), Serial.write() 등이 있으며(serial은 이름으로 다른 단어로 바꿔도 된다), 수신할 때는 serial.read() 라는 함수를 많이 이용한다.
6. 설계 시 주의점 pc와 아두이노 연결은 문제가 되지 않지만, 아두이노와 다른 보드를 송/수신 할때는 tx, rx 를 서로 연결하여 사용하는데 교차하여 연결해야 한다. 즉 tx 핀에 꼳힌 점퍼선은 다른 보드 rx 핀에 꼳아야 되고 rx핀도 마찬가지이다. 또한 아두이노간 연결할 때는 gnd 끼리 서로 연결해줘야 한다.
7. 예제, pc-아두이노1-아두이노2 순으로 연결하여 아두이노2의 연결된 서보모터 제어하기.
위 사진은 설계 사진이다.
메가는 시리얼 모니터로 데이터를 입력받으면 그 데이터를 우노에게 전송하고 우노는 그 데이터에 맞는 명령을 실행하는 것이다.
메가 코딩
#include <SoftwareSerial.h> // 메가 코딩은 실제로 필요 없다. 왜냐하면 하드웨어핀이 추가적으로 존재 하기 때문이다.
SoftwareSerialBTSerial(2,3); // 2번을 rx 3번은 tx로 놓자
//
voidsetup(){
Serial.begin(9600); // serial 9600 으로 통신 할거다.
BTSerial.begin(9600); // BTSerial을 9600으로 통신 할거다.
}
//
voidloop(){
if(Serial.available()){ // 시리얼모니터에서 받은 데이터가 있는 지 여부
charc=Serial.read(); // 있다면 그 데이터를 수신받아라. 그리고 c에 저장하라
if(c=='y')BTSerial.write('y'); // 그 데이터가 'y'라면 BTSerial을 통해 우노에게 y를 전송해라
}
}
우노코딩
#include <SoftwareSerial.h> // 우노는 무조건 설정해야함.
#include <Servo.h> // 서보모터를 돌릴 예정으로 라이브러리 추가.
SoftwareSerialBTSerial(2,3); // 2,3번핀을 설정..
Servoservo;
charstate;
constintservopin=9; // 변수 선언 9번으로
//
voidsetup(){
Serial.begin(9600); // 위와 동일
BTSerial.begin(9600); // 동일
servo.attach(servopin); // 9번핀을 서브모터로 컨트롤하겠다.
}
//
voidloop(){
if(BTSerial.available()){ // btserial 통해 받은 데이터가 있는 지 여부
state=BTSerial.read(); // 있으면 state에 수신받아 저장해라
if(state=='y'){ servo.write(90); delay(1000); servo.write(-90); } // 그 데이터가 y이면 모터를 90회전 하고 1초쉬고 -90회전해라