'Prototype/IoT Platform'에 해당되는 글 6건

Prototype/IoT Platform


Github

https://github.com/wpgnss/Arduino_Kakao_PlusFriends


카카오톡 친구 추가

Arduino_Kakao_PlusFriends

이 어플리케이션은 SKT의 LoRa 디바이스로부터 약속된 포맷의 GPS 데이터를 수신해 KAKAOTALK의 플러스친구로 위치정보를 알려주는 어플리케이션이다.

LoRa와 카카오톡을 이용한 GPS 트래커에 대한 내용을 오프라인 강의를 진행합니다.



서버 생성하기

아두이노 Web Server 예제를 기반으로 서버를 생성한다. 이 서버는 아래 그림과 같이 ThingPlug에서 Push 해주는 데이터 수신과 KakaoTalk에서 데이터를 요청하는 데이터 전송 기능을 담당하는 서버 역할을 한다.
이 예제는 사설 IP로 구현되었기 때문에 공유기 설정에서 Port Forwading 설정까지 해주어야 한다. 아니면 공인 IP를 사용해야 한다.

GPS 데이터 수신하기

SKT의 LoRa + GPS 디바이스에서 주기적으로 GPS 데이터를 생성&전달 해준다.
이 데이터는 SKT의 IoT 플랫폼인 ThingPlug에 저장되며, 이 데이터를 Subscription 기능을 사용해 아두이노 서버에서 수신하게 된다.

ThingPlug Subscription에 대한 간단한 설명: http://1byte.tistory.com/25

카카오톡 플러스 친구 개발하기

카카오톡에서 위치정보를 확인하기 위해서 카카오톡의 ‘플러스친구’를 사용했다.

카카오톡 플러스친구: https://center-pf.kakao.com
카카오톡 플러스친구 API: https://github.com/plusfriend/auto_reply

아두이노에서 플러스 친구를 사용하기 위해서는 ‘자동응답’ 설정을 ‘API형 자동응답’으로 설정해야 한다.

그 후 아래 두가지에 대한 내용을 개발해야 한다.

  1. keyboard
    keyboard는 사용자에게 제공할 입력 수단이다. 직접 text 입력을 받을 수도 있고, 정해진 버튼을 만들어 사용자가 선택하도록 할 수도 있다.

    ex) GET url:port/keyboard HTTP/1.1

  2. message
    사용자가 keyboard를 통해 입력&선택하게 되면 아두이노 서버에 message 로 요청이 오게 된다.

    ex) POST url:port/message HTTP/1.1

위 두 기능을 구현하면 아래와 같이 카카오톡 플러스친구를 통해 아두이노 서버와 통신할 수 있다.

카카오톡에서 위치 정보 확인

Location, Roadview 기능이 구현되어 있다.

  • Location을 누르면, 자동응답으로 가장 최신의 GPS 데이터를 기반으로 지도 정보를 보내준다. 메세지에는 간략한 지도정보 이미지를 보여주고, 자세히 보기를 누르면 다음 지도로 연결된다.
  • Roadview를 누르면, 자세히 보기 클릭시 GPS 위치의 Roadview를 보여주게 된다.
  • Alert은 아직 추가되지 않았지만, Alert을 누르면 아이에게 진동이나 알림음으로 알려주는 기능을 추가할 예정이다.


Prototype/IoT Platform

 

 

아래 게시글의 ThingPlug 대시보드는 Local PC에 node.js 서버를 구동해서 만든 대시보드였다.

http://1byte.tistory.com/10

 

그렇기 때문에 외부에서 접근하기 위해서는 port forwading 등 서버 port에 접속하기 위한 별도의 작업이 필요하고, Local PC에서 서버를 구동하고 있는 동안에만 접속할 수 있다.

 

따라서, 위 문제점등을 해결하기 위해서 외부에서 호스팅 해주는 방법이 필요해 보였다.

 

구글링 결과, Heroku라는 클라우드 플랫폼을 선택했다. Heroku는 테스트 용도로 적합해 보이며, 꽤 쉽게 어플리케이션을 호스팅 할 수 있었다.

 

 

1. ThingPlug Starter Kit 소스코드 다운로드

 

https://github.com/SKT-ThingPlug/thingplug-lora-starter-kit

 

우선 ThingPlug Lora Starter Kit을 다운 받았다. Starter kit의 사용 방법은 PC에 starter kit 소스코드와 node.js를 다운로드 받고, config_x.js 파일에 테스트할 node id, user key, container 등등 ThingPlug web Application에서 필요한 정보들과,  디바이스 시뮬레이터를 실행 시키기 위한 config 내용들이 모두 포함되어 있다.

그렇기 때문에 config_x.js 에 node id, user key, container등의 정보가 정상적으로 저장되어 있어야만 최신 데이터 조회, 디바이스 제어 등을 수행할 수 있다.

 

2. ThingPlug Starter Kit 소스코드 수정

 

제공하는 StarterKit도 쓸만하지만, 여러 사용자들이 Config 파일과 상관 없이 접근 가능한 대시보드를 만드는 것이 목표였기 때문에,, 조금 StarterKit의 소스코드를 조금 수정했다.

 

      

왼쪽의 서버 소스코드를 오른쪽 처럼 Node ID, User Key, Container Name 을 직접 입력 받도록 수정했다.

이 과정에서 필요 없는 부분인 google 지도와 Event trigger를 없앴다.

https://github.com/wpgnss/ThingPlug_starter_kit_for_academy

 

 

3. Heroku 사용하기

Heroku에서 어플리케이션을 배포하기 위한 방법은 3가지를 지원한다.

Heroku CLI를 다운로드 받아서 Heroku Git에 소스코드를 업로드 하는 방법과 GitHub나 Dropbox에 소스코드를 업로드 후 연결하는 방법이 있다.

 

Heroku CLI를 사용하는 방법은 구글링에도 많이 나오기 때문에, 머리아픈 CLI 없이 GitHub와 연동하는 방법으로 해보기로 했다.

 

4. Heroku 사용하기 – Procfile

 

Heroku를 사용하기 위해서 자신의 ThingPlug StarterKit repository에 꼭 필요한 파일이 있다. Procfile이라는 파일이다. 해당 파일을 생성 후 commit & push 해주자.

이 파일은 처음 실행되어야 할 web app의 이름을 정의하는 파일이다.

 

ThingPlug Starter Kit의 메인 js 파일은 application_web.js이니까 아래처럼 작성해 준다.

 

web: node application_web.js

 

 

5. Heroku 사용하기 – Create New App

https://dashboard.heroku.com

Heroku에 가입 후 dashboard 사이트에 접속하게 되면 오른쪽 상단에서 New->Create new app을 선택한다.

 

Create App을 선택한다.

 

GitHub를 선택한다. (이미 GitHub와 연동되었기 때문에 아래처럼 나오지만 처음이라면 GitHub에 권한을 요청하는 팝업이 뜬다.)

 

Search를 클릭한 후 원하는 Repository에 Connect를 누른다.

 

Enable Automatic Deploys 를 누른다.

 

정상적으로 진행했다면, Overview 탭에서 Dyno formation 에서 web node application_web.js    ON 으로 변하면서 서버가 정상 동작하게 된다.

만약 Dyno formation이 바뀌지 않는다면, Manual deploys로 해보자.

 

 

Open app을 누르면 동작 중인 서버에 접속할 수 있다.

 

이렇게…

 

 

사이트 주소 뒤에 /dashboard 를 입력하면 SKT ThingPlug 대시보드가 정상적으로 동작하는 것을 확인할 수 있다.

https://boiling-everglades-36951.herokuapp.com/dashboard/

Prototype/IoT Platform

  ThingPlug 대시보드  


Node-Red 대시보드

Node.js 대시보드








해당 ThingPlug 대시보드는 SKT의 ThingPlug-LoRa-Staterkit을 수정하여 만들어졌습니다. 

(https://github.com/SKT-ThingPlug/thingplug-lora-starter-kit)






Prototype/IoT Platform

1. WizFi310

image

WizFi310은 Embedded Wi-Fi 모듈로서 기본적인 TCP, UDP통신 이외에도 MQTT 프로토콜을 AT Command로 구현되어 있다.

또한 앞서 살펴보았던 IoTMakers SDK가 구현되어 있어 AT Command 몇 개로 IoTMakers에 접속하거나 데이터 전송, 제어 데이터 수신을 할 수 있다.

이번 포스팅에서는 WizFi310으로 IoTMakers에 접속하고 데이터를 보내는 방법에 대한 내용이며, IoTMakers에서 디바이스를 등록하고 대시보드를 생성하는 방법은 가이드 문서에 자세히 나와 있다.

 

EX)

AT+TKTSET1=<Gateway 연결 ID>,<Device ID>,<Device Password>

AT+TKTCON=2,<IoTMakers IP>,<IoT Makers Port>,0,1111

AT+TKTSEND=<Tag Stream Type>,<Tag Stream ID>,<Value>

 

  • AT+TKTSET1: IoTMakers에 접속하기 위해 필요한 인증 정보들이다.
  • AT+TKTCON: IoTMakers의 IP와 Port 정보를 입력하고, 실제 MQTT접속과 디바이스 인증과정을 수행한다.
  • AT+TKTSEND: 데이터를 전송할 때 사용한다.
    • <Tag Stream Type>: 숫자형은 ‘d’, 문자형은 ‘s’를 입력한다.

image

 

2. 디바이스 구성하기

 

image

 

WizFi310에 구현된 IoTMakers SDK를 활용하기 위한 디바이스를 구성했다.

개발환경은 mbed IDE를 사용했다.

보드는 Nucleo-F401RE보드를 사용했고, 센서로는 CDS 조도센서와 Tact 스위치를 사용했다. 조도 센서의 센싱 데이터를 주기적으로 IoTMakers에 보내고, Tact 스위치를 눌렀을 때 이벤트적으로 알림용 데이터를 보낸다.

 

Nucleo-F401RE보드에 대한 설명은 아래 링크를 참고.

https://developer.mbed.org/platforms/ST-Nucleo-F401RE/

 

image

image

IoTMakers_proto

핀 연결은 위와 같이 했다.

WizFi310과 연결된 UART 핀은 Tx, Rx, cts, rts, reset핀 순이다.

PA_1에는 조도센서, LED에는 PC_7, 사용자 버튼에는 PC_13에 연결했다.

 

 

3. 소스코드 설정

https://developer.mbed.org/users/jehoon/code/KT_IoTMakers_WizFi310_Example/

 

image

  • AP_SSID: 디바이스가 접속할 공유기의 SSID를 입력한다.
  • AP_PASSWORD: 공유기의 PASSWORD를 입력한다.
  • AP_SECURITY: 공유기의 보안 타입을 입력한다.(현재 WPA2로 설정됨)

 

  • IoTMakers_GW_ID: Gateway 연결 ID
  • IoTMakers_DEV_ID: Device ID
  • IoTMakers_DEV_PWD: Device Password

 

  • IoTMakers_MQTT_IP: IoTMakers의 MQTT Broker IP
  • IoTMakers_MQTT_PORT: IoTMakers의 MQTT Broker Port

 

  • DELAY_SEND_TIME_MS: 주기 데이터를 전송할 주기(milliseconds)

 

4. 소스코드 메인 loop

image

메인 loop에서는 AP에 접속, IoTMakers에 접속 하는 과정과  주기적으로 센싱 데이터 전송(Periodic_Event())와 사용자 버튼 이벤트(Button_Push_Event()), 제어 신호를 프린트 하도록 구현되어 있다.

 

5. AP에 접속

image

 

 

6. 데이터 전송

image

주기 데이터(illumination, 숫자형)과 버튼 푸시 데이터(switch, 문자형)

 

7. 제어 데이터 수신

image

제어 데이터를 수신했을 때, IoTMakers의 oneM2M 포맷으로 프린트 한다.

snsnTagCd: Tag Stream ID

strVal: 문자형 제어 신호(ex: on, off)

 

 

8. 대시 보드로 센싱 데이터 표현 및 제어

image

Prototype/IoT Platform

1. 프로토콜 선택

앞서 설명했듯이 IoTMakers에서는 아래와 같은 프로토콜을 지원하고 있다.

개발 환경에 따라서 JAVA를 사용할지, C를 사용할지, 아니면 아두이노를 사용할지 선택해야 한다.

 

 

기본적으로 각각의 SDK는 위와 같은 연동 구조로 되어있으며, 디바이스와 IoTMakers 사이의 접속, 데이터 전송, 제어 등을 위한 API(Application Programming Interface)가 구현되어 있다.

 

이번 포스팅에서는 C SDK의 MQTT프로토콜 가이드 문서를 통해 IoTMakers에 접속하는 방법에 대해 알아볼 것이다.

 

2. IoTMakers MQTT API

IoTMakers에 접속해 데이터를 전송해서는 위에 나타난 정도의 함수들로 처리할 수 있다. (1, 3, 6, 11, 14, 15, 17)

 

1. im_init(): 이 함수에서는 IoTMakers의 IP, Port, Gateway 연결 ID, Device ID, Device Password 등 IoTMakers에 접속하기 위한 기본 설정 과정이다.

3. im_connect(): 위의 IP, Port 정보들로 바탕으로 MQTT 연결을 수행하고, receive 핸들러를 등록한다.

6. im_auth_device(): Gateway 연결 ID, Device ID, Device Password 정보로 인증 요청을 수행한다.

11. im_send_numdata(): 숫자 형태의 데이터를 전송할 때 사용한다. 문자형은 im_send_strdata()를 사용하며, 숫자형와 문자형을 동시에 여러 개 보낼 경우 im_send_complexdata()를 사용한다.

14. dataresp_handler(): (3)에서 등록한 receive 핸들러로 수신된 데이터를 확인할 수 있다.

15. im_disconnect(): mqtt disconnect함수

17. im_release(): 메모리 할당 해제

 

함수에 대한 자세한 사용방법이나 예제 소스코드는 가이드 문서를 참고하세요.

http://iotmakers.olleh.com/openp/assets/files/C_SDK_manual_MQTT_2.2.0.pdf

Prototype/IoT Platform

 

 

1. IoT Makers란..

 

국내 통신사들이 IoT 관련 활발해지면서 각 통신사마다 IoT Platform을 내놓고 있다. 그 중 KT에서는 IoT Makers라는 이름으로 IoT Platform을 개발하고 제공하려 하고 있다.

사이트 주소 :  http://iotmakers.olleh.com/

 

 

 

2. IoT Makers 특징

KT의 IoT Makers의 특징은 아래와 같다.

 

  • IoTMakers에서 현재 사용 가능한 프로토콜은 TCP+oneM2M과 MQTT+oneM2M이다. 사설 프로토콜도 사용 가능하다고 되어있는데, 이 점은 테스트해봐야 할 것 같다..
  • 가상 디바이스 시뮬레이터는 센서 디바이스 없이 어플리케이션을 개발하려고 할 때, 가상의 센싱 데이터를 만들 때 사용한다.
  • 다른 IoT Platform 들과 마찬가지로 대시 보드로 데이터를 모니터링 할 수 있다.
  • 사용해보면서 느낀 KT IoTMakers 만의 특징이라고 한다면 GUI 기반의 이벤트 생성이다. 아래 그림처럼 직관적으로 이벤트를 생성할 수 있다.

 

 

3. IoTMakers에 접속하고 데이터 전송하기

디바이스가 IoTMakers에 접속하고 데이터를 전송하거나, IoTMakers로 부터 제어신호를 수신하기 위한 방법은 아래와 같다.

IoTMakers에서 제공하는 SDK(Software Development Kit)은 위와 같다. JAVA SDK에는 TCP, HTTP, MQTT, CoAP 통신 프로토콜이 포함되어 있다. JAVA SDK는 아무래도 어플리케이션 개발에 사용되기 때문에.. 별로 관심이 없다.

C SDK에는 TCP와 MQTT 프로토콜을 제공하고 있으며, 아두이노 용 SDK도 배포 중이다. 아두이노 용 SDK는 기본적으로 C-TCP와 동일한 TCP+oneM2M 구조로 되어 있으며, 임베디드 용으로 구현되었기 때문에 JSON Library 등 utility의 사이즈를 줄이기 위해 심플하게 구현되어 있는 것이 차이점이다.

 

SDK 들 중 사용자의 환경에 맞는 SDK를 사용하면 아래처럼 IoTMakers에 데이터를 전송하고 제어신호를 수신할 수 있다.

 

1
블로그 이미지

IoT 개발자 블로그이고 싶다.

1byte