2016년 3월 30일 수요일

ST-Link V2로 Maple Mini 부트로더 교체하기

Maple Mini 는 원래 Leaf labs라는 캐나다 회사에서 판매했지만 지금은 지원이 중단되었고, 대신 중국에서 저렴한 클론이 많이 나와 있다. Aliexpress에서 개당 $2~3 정도에 구할 수 있다.




아두이노 IDE를 사용해 프로그램이 가능하지만 어떤 이유로 다른 종류의 부트로더를 넣었다가 다시 교체해야 하는 경우는 USB 케이블만으로는 할 수가 없다.

그래서 ST-Link V2를 사용하면 되는데 이 역시 aliexpress 에서 매우 저렴하게 구입이 가능하다.


알리에서 구입하면 저렴한 건 좋은데 문서나 지원이 충분하지 않기 때문에 사용하기 위해 구글신의 도움을 받아야 하는 경우가 많다.

특히 이번에 구입한 ST-Link V2의 커넥터 pin out의 정보가 없어 역시 구글신의 도움을 받았다.

 
10 핀 커넥터의 각 핀의 기능은 위의 사진과 같다. 여기서 4개의 케이블을 maple mini clone에 연결해 주면 된다.


Vcc(+3.3V), GND, SWCLK, SWDIO 를 각각 연결해 주고 stlink-utility 프로그램을 이용하면 부트로더 교체가 가능하다.

stlink-utility $ ./st-flash write ~/Desktop/maple_mini_boot20.bin 0x8000000
2016-03-30T12:17:23 INFO src/stlink-usb.c: -- exit_dfu_mode
2016-03-30T12:17:23 INFO src/stlink-common.c: Loading device parameters....
2016-03-30T12:17:23 INFO src/stlink-common.c: Device connected is: F1 Medium-density device, id 0x20036410
2016-03-30T12:17:23 INFO src/stlink-common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2016-03-30T12:17:23 INFO src/stlink-common.c: Attempting to write 7036 (0x1b7c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08001800 erased
2016-03-30T12:17:23 INFO src/stlink-common.c: Finished erasing 7 pages of 1024 (0x400) bytes
2016-03-30T12:17:23 INFO src/stlink-common.c: Starting Flash write for VL/F0/F3 core id
2016-03-30T12:17:23 INFO src/stlink-common.c: Successfully loaded flash loader in sram
  6/6 pages written
2016-03-30T12:17:23 INFO src/stlink-common.c: Starting verification of write complete
2016-03-30T12:17:23 INFO src/stlink-common.c: Flash written and verified! jolly good!

stlink-utility $

위의 화면은 Mac에서 stlink-utility를 사용해 부트로더를 교체한 예이다.

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