사물인터넷(IoT)2016. 5. 29. 01:08

각종 센서들의 값을 아두이노, 라즈베리파이 등으로 읽어서 저장하고 분석해야 할 경우가 있습니다. 이럴 때 자신만의 서버와 데이터베이스 서버를 구축해 놓고 데이터를 저장해서 사용할 수도 있겠지만 만약 가정에서 이런 것을 하려면 우선 서버로 사용할 컴퓨터와 각종 소프트웨어들, 프로그래밍 그리고 서버를 돌릴 전기요금이 필요하게 되겠죠. 게다가 외부에서 데이터를 보길 원한다면 서버와 인터넷의 연결은 필수일 것입니다. 이런 쉽지만은 않은 프로젝트를 간편하게 구현 할 수 있는 IoT(Internet of Things, 사물 인터넷) 전용 클라우드가 있어서 소개해 드립니다.


바로 Thingspeak.com 입니다. 씽즈+스피크, Things 는 사물(센서)들을 말하는 것이고 Speak 는 그들의 값을 말하는 것이겠죠? ^^


우선 Sign Up 을 클릭해서 가입을 해 줍니다. ID, Password, Email 등이 필요 합니다. Time Zone 은 반드시 살고 있는 지역을 선택해 주세요. 센서 값이 수집된 시간이 이상하게 표시될 수도 있으니까요.

 

로그인이 되었으면 먼저 Channels 를 클릭해서 새로운 채널을 만들어 줍니다. 여기서 말하는 채널은 센서가 보내는 값을 저장하는 단위 입니다. 예를 들어 온도와 습도 센서의 값을 저장하고 싶다 하면 온도 습도 채널을 하나 추가해 주면 되는 것입니다. New Channel 을 클릭 합니다.

 

우리집 온도와 습도 라는 채널을 하나 만들어 주었습니다. Name, Description 은 자신이 원하는 것을 넣어주면 됩니다. 그리고 밑으로 Field1, 2, 3...... 들이 있는데 여기에 센서의 값이 들어갑니다. 자신이 사용할 필드를 선택해주고 Field1 에서부터 각각의 이름을 채워 나가면 됩니다. 데이터베이스의 필드를 생각하면 됩니다. 저는 온도(temperature)와 습도(humidity)를 Field1 과 2에 정의해 주었습니다. 밑에 여러가지 옵션들이 많이 있는데 이 field 를 잘 만들어주는 것이 핵심 입니다. 한 채널에 필드는 총 8개 까지 정의할 수 있습니다. 이렇게만 적어주고 Save Channel 을 눌러서 채널을 생성해 줍니다.

 

채널이 만들어진 모습 입니다. 윗쪽에 기능탭들이 있고 데이터의 변화 모습을 볼 수 있는 그래프가 나타 납니다. 아직 데이터가 하나도 없으니 그래프는 그려지지 않았습니다. 기능탭 들을 설명하자면 Public View 는 좀 전에 채널을 만들어 줄 때 Make Public 을 체크하면 다른 사람들도 나의 데이터들을 볼 수 있도록 하는 기능 입니다. Channel Settings 는 채널 설정을 수정하는 기능입니다. API Keys 는 이 채널에 접근 할 수 있는 Key 를 제공 합니다. API Key 는 아두이노 등으로 접속해서 이 채널에 데이터를 저장할 때 쓰입니다. Data Import/Export 는 수동으로 데이터를 업로드 하거나 다운로드 받을 수 있도록 하는 기능 입니다. 텍스트 파일 기반의 데이터저장 포맷인 CSV 파일을 지원 합니다. 참고로 엑셀파일로 데이터를 가지고 있다면 저장 시 CSV 로 저장을 할 수 있습니다. (엑셀 CSV 파일 참고 : http://secstart.tistory.com/612


그럼 어떤 식으로 데이터를 저장하는지 알아보겠습니다.


Data Import/Export 탭에 들어가면 좌측에 CSV 형식으로 데이터를 업로드(Import) 하거나 다운로드(Export) 하는 기능이 있고 우측에 보면 어떻게 클라우드로 데이터를 보내는지 예제가 있습니다. 이것에 대해 알아보겠습니다.


■ Update Channel Feed - GET : 이것은 GET 방식으로 데이터를 보내는 것입니다. URL 에 센서의 값을 API Key 을 붙여서 함께 보내는 것입니다. 정보를 보내면 Thingspeak 서버는 API Key 로 어떤 사람의 어떤 채널인지 파악하여 정의된 채널에 URL 에 있는 Field 값을 읽어서 저장하는 것 입니다. 예를 들어 보자면 온도가 20도 이고 습도가 60 인 센서의 측정값은 아래와 같이 URL 을 생성해서 호출해주면 Thingspeak 서버에 저장이 되는 것입니다.

https://api.thingspeak.com/update?api_key=API Key 값&field1=20&field2=60


■ Update Channel Feed - POST : 이것은 POST 방식으로 데이터를 전송 합니다. 통신 시 값이 URL 에 노출이 되지 않으므로 GET 방식보다 보안 상 유리하다는 장점이 있습니다. html 작성 시 form 태그 안에 전송을 원하는 값들을 정의해서 아래의 URL로 Thinspeak 서버로  넘겨주는 방식 입니다. 

https://api.thingspeak.com/update.json
api_key=
API Key 값

field1=20

field2=60


▶ GET / POST 방식에 대한 자세한 설명은 이 포스팅의 범위를 넘어가므로 생활코딩 html 강좌 http://opentutorials.org/course/11/14 여기에 가시면 자세한 내용을 알 수 있습니다.


▶ Thingspeak 데이터 저장 간격은 15초 이상이 되어야 합니다. 그 이하면 받아들이지 않습니다.


비교적 쉬운 방법인 GET 방식으로 값을 몇 개 넣어 보았습니다. 위의 설명과 같이 URL을 만들어서 브라우저에서 열어주면 됩니다. 


위와 같이 URL을 브라우저에서 실행하면 Thingspeak 서버에서는 1 을 리턴해 줍니다. 이것은 현재 1건의 데이터가 잘 들어갔다는 것을 뜻합니다. 다음에 또 URL을 실행하면 2가 표시되겠죠? 잘 들어갔는지 확인하기 위해서 Private View 탭을 클릭해서 들어가 보겠습니다.


위와 같이 temperature 에는 20 이 humidity 에는 60의 값이 Thingspeak 로 잘 들어가 있는 것을 볼 수 있습니다. URL 의 field1 과 field2 의 값을 변경해서 좀 더 전송해 보겠습니다.


3건의 데이터를 더 전송했습니다. 위와 같이 그래프 형태로 데이터의 변화를 보여 줍니다. 물론 전송한 전체 데이터를 json, XML, CSV 형태로 다운로드 받을 수도 있으며 MATLAB 을 이용하여 분석도 할 수 있습니다. 이런 식으로 아두이노에서는 ESP8266 등의 인터넷 연결 모듈을 활용해서 Thingspeak 서버로 데이터를 보낼 수 있는 것입니다.


그렇다면 수동으로 브라우저를 이용해서 사이트에 들어가지 않고 축적된 데이터를 기계적으로 가져올 수 있다면,  예를 들어 이런 기능의 구현도 가능할 것입니다. 집에 설치된 아두이노에 연결된 온도센서가 주기적으로 집안의 온도를 측정해서 Thingspeak 서버로 데이터를 보냅니다. 그리고 원격지의 PC에서는 주기적으로 Thingspeak 서버의 우리집 온도 센서 데이터를 관찰하고 30도가 넘으면 경고를 낼 수 있도록 만들어 줄 수도 있을 것입니다. 물론 프로그래밍이 필요 하겠지요.


예를 들어본 것이라 효용성이 별로 없어 보여도 집안에 화재센서, 온도센서, 습도센서, 침입자 탐지 센서 등등 에서 많은 데이터들을 Thingspeak 서버로 보낸다면 집에 아무도 없더라도 원격지에서 모든 상황을 탐지 할 수 있는 것입니다.


Thingspeak 에 보내진 데이터들은 다음과 같은 방법으로 원격지의 컴퓨터에서 활용 할 수 있습니다.


좀 전에 보았던 Data Import/Export 탭의 기능 입니다. 이 중 데이터를 가져오는 기능은 Get a Channel Feed 와 Get a Channel Field Feed 를 이용하면 됩니다.


두 방법 모두 데이터를 보내주는 방식은 json 방식을 이용 합니다. GET 방식으로 URL을 호출해서 json 방식의 데이터를 원격지의 컴퓨터에서 받을 수 있습니다.


■ Get a Channel Feed : 전체 Field 값을 리턴 합니다.

모자이크 부분은 채널 생성 시 나오는 채널 ID 를 넣으면 됩니다. 맨 뒤의 값 2 가 뜻하는 것은 전체 데이터 중에서 최근 데이터 2건을 가져오겠다는 뜻 입니다. 결과는 아래와 같습니다.

총 데이터 4건 중에서 최근에 전송된 데이터 2건을 가져온 모습 입니다. Filed1 과 2의 값을 모두 가져 옵니다.



Get a Channel Field Feed : 위의 것과 동일하나 Field 를 선택해서 데이터를 가져오는 방식 입니다.

fields 뒤의 1 이 가져올 Field 번호를 의미 합니다. 그리고 뒤의 result 값은 최근 데이터 기준으로 가져올 데이터의 건수 입니다. 가져올 field 를 지정하는 것 말고는 위와 같습니다. 결과는 다음과 같습니다.

위와 같이 field1(temperature) 의 값만 2건 가져온 것을 알 수 있습니다.





위와 같이 모바일 웹도 지원을 해서  스마트폰에서도 센서 데이터를 보는데 불편함이 없습니다.


그리고 구글 플레이 스토어에 Thingspeak 로 검색을 해 보면 이런 클라우드 데이터들을 활용할 수 있는 여러가지 앱들이 개발되어 있습니다. ThingView, IoT Thingspeak Monitor... 등등 많은 앱들이 있습니다. 이런 것들을 활용하면 더욱 손쉽게 IoT 데이터 들을 활용할 수 있을 것입니다. 이 중 ThingView 를 사용해 보겠습니다. 


우선 Thingview 를 구글 플레이 스토어에서 검색해서 설치 합니다.


설치 후 실행하면 위와 같이 나옵니다. + 버튼을 눌러서 채널을 등록해 줍니다.


등록하고자 하는 채널의 ID 와 Read API Key 를 입력해 줍니다. Search 를 누릅니다.


저의 채널이 검색 되었습니다. Done 을 누릅니다.


이렇게 채널이 등록 됩니다. 채널을 눌러 봅니다.


우리집 온도와 습도 채널의 클라우드 데이터가 그래프로 그려져서 나옵니다. 


그래프를 누르면 이렇게 상세하게 볼 수 있습니다. 웹보다 더욱 깔끔하게 데이터를 확인 할 수 있습니다. 한 가지 아쉬운 점이 있다면 어떤 임계값 같은 것을 설정해 두고 그 값을 넘게되면 알려줄 수 있는 감시기능 같은것도 있으면 더욱 좋았을텐데 하는 아쉬움이 있네요. 하지만 다른 앱을 더 찾아보면 있을지도 모르겠습니다. 혹시 그런 앱을 알고 계신 분이 있다면 저에게 알려주시면 감사하겠습니다.


이상으로 IoT 클라우드 서비스인 Thingspeak 에 대해서 알아 보았습니다. 사용이 간편하고 쉬워서 저도 앞으로 많이 이용해 볼 생각 입니다.



반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 인더스트리얼 센서 데이터 플랫폼

    http://www.plantpulse.co.kr/

    2016.06.02 15:50 [ ADDR : EDIT/ DEL : REPLY ]
    • 산업용 모니터링 클라우드는 이렇게 되어 있군요. 둘러봤는데 정말 좋은 솔루션 같습니다. 국산솔루션 인가요?아니면 수입? 아무튼 번창하시길 바랍니다.

      2016.06.02 16:11 신고 [ ADDR : EDIT/ DEL ]
  2. 안녕하십니까?
    아두이노를 배우고 잇는 학생입니다.
    저는 아두이노 메가와 wifi 101쉴드를 이용하여 iot 를 진행해보려하고잇습니다. 하지만 문제가발생해서 도움이필요합니다.
    https://youtu.be/i8obOD2GAN4
    아래 링크된 동영상처럼, 올려주신 글처럼 클라우드에 필드값을 아두이노가 받아서 입력된 값에 따라 사물을제어하려고 하는데, html 쪽도 잘몰라서 어떻게 서버로 부터 문자열을받는지 잘모르겠습니다 .
    어디를공부해야 하는지 포스팅 부탁 드리겠습니다 ㅠ

    2016.07.04 03:52 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 우선 IoT 클라우드(ThingSpeak)로 부터 필드값을 받는 부분은 위에 보시면 다 정리 되어 있습니다.
      다만 받은 json 방식의 데이터를 Parsing 해서 아두이노에서 변수로 저장해서 동영상처럼 릴레이를 제어 한다거나 하는데 활용하는 방법이 필요할 것인데요. 저도 아직 안 해봤지만 찾아보니 아두이노 json 라이브러리가 있네요.

      https://github.com/interactive-matter/aJson



      https://github.com/bblanchon/ArduinoJson

      이거 한 번 보세요. 자세한 내용은 저도 사용을 아직 못해봐서 뭐라 드릴 말씀은 없네요. ;;

      요즘은 저도 NodeMCU 관련 학습 중이라 그거 좀 마무리 되고 말씀하신 부분에 대해서 알아보도록 하겠습니다.

      2016.07.04 12:01 신고 [ ADDR : EDIT/ DEL ]
  3. managong

    안녕하세요. 현재 Thingspeak 데이터를 이용하여 앱을 만들고자하는 학생입니다. 저는 Thingspeak 에 나와있는 데이터 값(그래프 자체)를 앱으로 바로 보여주고자 합니다. 현재 앱인벤터2를 이용하여 제작 중인데 방법이 있을까 하여 문의드립니다. 답변 부탁드립니다!!

    2016.10.01 16:12 [ ADDR : EDIT/ DEL : REPLY ]
    • 앱개발시 thingspeak 데이터(json형식)를 가져와서 그래프로 구현하면 되겠습니다. 만약 웹에 표시되는 그래프를 바로 앱에서 보여주는게 가능할런지는 잘 모르겠습니다. 웹소스를 분석해 보심이 좋을듯 합니다. 그냥 제 생각이지만 thingspeak를 public으로 설정하면 가능할것도 같은데 말이죠....

      2016.10.01 18:22 신고 [ ADDR : EDIT/ DEL ]
  4. managong

    우선 답변 감사드립니다!! 그런데 thingspeak를 public으로 설정해놓으면 private로 설정했을때와 다르게 무엇이 가능한지 궁금합니다.

    2016.10.01 20:48 [ ADDR : EDIT/ DEL : REPLY ]
    • thingspeak API 데이터나 그래프 등을 인증 API 키 없이 가져올 수 있습니다. 쉽게 말해서 thingspeak 에 올려진 값들을 아무나 인증없이 가져올 수 있습니다.

      2016.10.01 20:59 신고 [ ADDR : EDIT/ DEL ]
  5. arduinotest

    필드에 값을 입력할때 숫자말고 문자같은거 넣을 수 있는 방법이 있나요?

    2021.07.15 16:50 [ ADDR : EDIT/ DEL : REPLY ]
    • 글쎄요 숫자 밖에 안 넣어봐서요
      한번 시도해 보시고 되는지 안되는지 알려주시면 감사하겠습니다
      참고로 필드 만들때 숫자인지 문자인지 속성을 지정하는건 없을 겁니다

      2021.07.15 17:07 신고 [ ADDR : EDIT/ DEL ]