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를 좀 더 다양하게 사용하는걸 다뤄보도록 하겠다.

























댓글 21개:

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. 안녕하세요~ 글 보고 저도 한번 해보고 싶어서 그러는데요~ 하드웨어적인 부분이 어떻게 연결해야하는지 궁금합니다...

    답글삭제
    답글
    1. 위의 예제는 그냥 우노 위에 cc3000 wifi shield를 꼽아 준게 다 입니다.

      삭제
    2. 여러개 질문좀 해도 될까요..
      일단 아두이노 우노는 있구요 cc3000 wifi shield없이 해놓을 수 있는 부분은 다 해봤는데요~
      1. 제가 아직 cc3000 wifi shield가 없어서 그런데요~ 그냥 아두이노 위에 꼽게 되어있는건가요..?
      구매하려고하는데 어디서 구매하셨는지 알 수 있을까요..?
      2. char auth[] 부분에 넣는 값이 제것보다 긴것 같으신데 어플에서 버튼만들때 이메일로 받은 값 넣는거맞나요?
      3. 그리구 LED는 따로 꼽아주는 건가요 아니면 아두이노에 있는 LED가 켜지는 건가요?

      삭제
    3. 댓글로 답해주시기 너무 길거나 불편? 하시면 yc99603@naver.com 으로 답해주신다면 정말 감사하겠습니다...

      삭제
    4. 1. aliexpress에서 구매했습니다. http://www.aliexpress.com/item/CC3000-Wifi-Shield-for-Arduino-Smart-Phone-SIMPLELINK-SMARTCONFIG-support-MEGA2560-Free-Shipping-Dropshipping/1949399670.html?spm=2114.01020208.3.13.KTpTeY&ws_ab_test=201407_3,201444_6,201409_3
      2. 예 맞습니다.
      3. 일단 위의 예제에서는 아두이노 우노 보드에 있는 LED가 켜집니다.

      삭제
    5. 빠른 답변 감사합니다! 제가 찾아본 cc3000 wifi shield는 다 5,6만원 대였는데 감사합니다...

      삭제
    6. 지금해보려하는데 공유기가 없으면 안되는거죠,,,? ㅠㅠ
      그리고 꼭 컴퓨터와 연결해야만 가능한 거죠?

      삭제
    7. 기본적으로 무선랜을 사용할 수 있는 환경이어야만 하죠. 그리고 컴퓨터와 연결이라는건 뭘 말씀하시는건지 모르겠지만 아두이노에 프로그램 집어넣을 때 아니면 컴퓨터가 따로 필요하지 않습니다.

      삭제
    8. 아 제말은 이 예제가 아두이노 프로그램에서 위의 코드를 돌리려면 usb로 아두이노와 연결되어야 가능한지 여쭤보고싶은거였어요..

      삭제
  3. 안녕하세요 우노위에 cc3000을 꼽고 코딩하면
    '보드에 업로드중에 문제 발생' 이라고 뜨는데 코딩한뒤에 cc3000을 꼽는건가요?

    답글삭제
    답글
    1. 아니요. 특별히 쉴드 연결했다고 업로드에 문제가 생기지 않습니다. 정확히 어떤 에러가 발생하는가요?

      삭제
    2. 아두이노:1.6.5 (Windows 7), 보드:"Arduino/Genuino Uno"

      스케치는 프로그램 저장 공간 (73%) 중 23,712 바이트를 사용. 최대 32,256 바이트.

      전역 변수는 (47%)의 동적 메모리중 982바이트를 사용, 1,066바이트의 지역변수가 남은. 최대는 2,048 바이트.

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x59

      avrdude: stk500_recv(): programmer is not responding

      avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x59

      보드에 업로딩중에 문제 발생. 다음을 참고하세요.http://www.arduino.cc/en/Guide/Troubleshooting#upload

      이렇게 에러메시지가 뜨는데 쉴드를 떼고 업로드하면 되구요..

      쉴드에 문제가 있는걸까요..?

      삭제
    3. 사용하신 쉴드가 제가 사용한것과 동일한거라면 쉴드가 시리얼 TX/RX핀(D0/D1)을 건드리지 않기 때문에 꼽고 업로드해도 문제가 생길건 없는데, 쉴드가 없이 하면 업로드가 되고 쉴드를 꼽으면 저런 에러가 난다면 쉴드에서 D0/D1쪽에 뭔가 연결되어 있는게 아닌가 싶네요.

      삭제
  4. 안녕하세요
    위에 질문 했던거는 usb케이블선의 문제였더라구요 ㅎㅎ 다른걸로 사용하니 업로드가 잘 됐어요
    그런데 하나 더 질문할게 생겼는데요.. 와이파이쉴드를 사용하게되면 디지털포트중 어떤것들이 사용되나요? 디지털포트중에 사용되는게 있는거 같은데 무엇무엇이 사용되는지 알고싶네요

    답글삭제
    답글
    1. 기본적으로 SPI 인터페이스를 사용합니다만 추가 핀이 몇개 더 필요합니다.

      SCK - #13
      MISO #12
      MOSI #11
      CS for CC3000 #10
      VBAT_EN #5
      CS for SD Card #4
      IRQ #3

      삭제
  5. 안녕하세요..? 이제 갓 시작한 초보인데 정말 많은 도움을 받고있습니다.
    위 그림을 보고 세팅을 마쳤는데 Blynk에서 버튼을 누르면 어느 때는 점등이 되고 또 어느 때는 전혀 반응이 없습니다. (거의 안됨)
    혹시해서 별도의 안테나도 설치했고 와이파이 기기를 쓰면 전원이 딸린다는 얘기도 본 것 같아
    9V DC 외부아답터도 연결해 보았지만 결과는 꼭 같습니다.
    며칠째 씨름 중이지만 워낙 아는 게 없어 이유를 전혀 모르겠네요.. 도움 부탁드립니다.

    #define BLYNK_PRINT Serial // Comment this out to disable prints and save space

    // These are the interrupt and control pins for СС3000
    #define ADAFRUIT_CC3000_IRQ 3
    #define ADAFRUIT_CC3000_VBAT 5
    #define ADAFRUIT_CC3000_CS 10

    #include
    #include
    #include

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

    void setup()
    {
    pinMode(13, OUTPUT);
    Serial.begin(9600);
    Blynk.begin(auth, "iptime", "", WLAN_SEC_WPA2);
    }

    void loop()
    {
    Blynk.run();

    }

    *iptime 비번이 없어 그냥 공란으로 두었습니다

    ---------------------------------------------------------------------
    [0] Blynk v0.2.1
    [1646] Connecting to iptime...
    [68763] Getting IP address...
    [68888] IP: 192.168.0.16
    [68888] GW: 192.168.0.1
    [68889] DNS: 1.214.68.2
    [68902] Looking for cloud.blynk.cc
    [69257] Connecting to 45.55.195.102:8442
    [69799] Ready!

    답글삭제
  6. 안녕하세요 우선 감사합니다! 작성하신 글이 저에게 큰 도움이 되었습니다. 그런데 제가 작성자님의 글을 보고 따라하던 중 문제가 생겨 이렇게 글을 남기게 되었습니다. 위의 글 그대로 코드도 작성하고 cc3000도 아두이노에 끼운 후 코드를 업로드하고 시리얼 모니터를 키면
    looking for cloud.blynk.cc 이후에 다음 단계의 글이 나타나지 않습니다. 여러 시도를 해보았는데 해결이 되지 않아 이렇게 글 올립니다. 번거롭게 해드려 죄송합니다!

    답글삭제
    답글
    1. cc3000의 버그가 문제인거 같습니다. 일단 CC3000 펌웨어을 1.14로 업데이트 하고 다시 한번 해 보시기 바랍니다.

      업데이트 방법은 아래 사이트를 참고하세요.

      https://learn.adafruit.com/adafruit-cc3000-wifi/firmware-upgrades

      삭제
    2. 감사합니다! 말씀해주신 사이트에서 컴퓨터 포트 전원이 아닌 외부전원을 인가하라고 하는데 유전원 유에스비 허브로 전원을 인가하면 되는게 맞나요 ?
      아니면 유전원 유에스비 허브 없이 할 수 있는 방법이 있나요 ? 감사합니다.

      삭제
    3. 예...유전원 USB허브로 공급하시면 됩니다.

      삭제