Thing+ Cloud service client library for W7500x MCU

Overview

이번 포스팅에서 소개할 내용은 WIZnet의 W7500x MCU 기반에서 동작하는 Thing+ Cloud 서비스의 client library 입니다. Thing+는 국내 기업인 달리웍스의 IoT Cloud 플랫폼 서비스로, 쉽고 빠른 IoT 서비스 구축을 컨셉으로 제작되어 있으며 Arduino, Beaglebone green 등 다양한 오픈소스 하드웨어(OSHW)를 지원하고 있습니다.

Thing+ Cloud 서비스와 연동하기 위해서는 기본적으로 SSL/TLS 보안 지원이 필요합니다. 하지만 최근 달리웍스 측에서 Arduino 개발자를 위한 테스트 용도로 Arduino thing+ library와 함께 Non-SSL 포트를 제공하고 있기에, 이를 활용하여 W7500x MCU에서도 Thing+ Cloud 연동 테스트가 가능하도록 library를 제작 해 보았습니다.

프로젝트 코드는 Thing+ Arduino library 1.0.6 버전을 기반으로 하였으며, C++ 버전으로 제작된 기존 라이브러리를 C로 변경하고 각종 Arduino 전용 library들을 활용 가능한 다른 라이브러리로 변경, 포팅 하였습니다.

Thing+ 서비스의 회원 가입 및 Gateway Device 등록은 다음 링크의 ‘아두이노 사용자 가이드‘를 참고 바랍니다.
Link: http://support.thingplus.net/ko/open-hardware/arduino-noSSL-user-guide.html

관련 자료 Link:
WIZnet Wiki site: W7500x Ethernet MCU (W7500 / W7500P)
달리웍스 웹사이트: http://www.daliworks.net
Thing+ 웹사이트: https://thingplus.net

본 포스팅에서 소개하는 코드는 C언어로 Keil uvision 5 기반에서 작성 되었으며, WIZnet의 ARM Cortex-M0 기반 Ethernet MCU인 W7500x 기반에서 동작하도록 제작 되었습니다. 하지만 매우 간단하며, MCU 의존성이 거의 없기 때문에 WIZnet의 Hardwared TCP/IP core를 활용하는 경우라면 쉽게 포팅하여 활용 하실 수 있습니다.

 

Concept

  • 기존 Arduino Thing+ 라이브러리와 거의 동일하게 활용 할 수 있도록 제작
  • C++코드를 C코드로 포팅, 기존 C 기반 개발 환경에 유연하게 적용 가능
  • MQTT client library로 Eclipse Paho MQTT client를 활용하였으며, 추후 SSL/TLS 보안을 추가하여 Thing+ 서비스와 연동하여 동작하는 상용 IoT device 제작 가능

 

Porting

기존 Arduino Library 구성

thingplus_lib_stack_for_arduino.png

  • 기존  Arduino library의 각 부분을 활용 가능한 library로 변경 및 동작 수정
    • MQTT Client:  PubSubClient library -> Eclipse Paho library
    • JSON Parser: ArduinoJSON library -> cJSON library
    • 기타 Ethernet 및 Time 관련 Library들은  W7500x Driver 및 WIZnet ioLibrary 활용

 

W7500x용 Library 구성 및 기존 library와 비교

thingplus_lib_stack_for_w7500x

 

Source Code

 

 

APIs

void thingplus_begin(uint8_t *mac, uint8_t *apikey)

   Description : Initialize the Thing+ library
   Parameter
        - mac : mac address
        - apikey : apikey generated by Thing+
                   You can get apikey from Thing+ Portal       

void thingplus_connect(void)

   Description : Connect Thing+ via MQTT
                 Before call this API, W7500x Device MUST CONNECT INTERNET.

void thingplus_disconnect(void)

   Description : Disconnecting Thing+

uint8_t thingplus_loop(void)

   Description : Doing MQTT related works.
                 W7500x Device MUST CALL THIS API PERIODICALLY

uint8_t thingplus_gatewayStatusPublish(uint8_t on, time_t durationSec)

   Description : Send gateway status to Thing+
   Parameter
      - on : True if gateway is on, false if gateway is off
      - validSec : Valid time. Unit is second.
                   You must resend the status before timeout.
                   If timeouted, the status is considered as error

uint8_t thingplus_sensorStatusPublish(const uint8_t *id, uint8_t on, time_t durationSec)

   Description : Send sensor status to Thing+
   Parameter
      - id : Sensor id.
      - on : True if sensor is on, false if sensor is off
      - validSec : Valid time. Unit is second.
                   You must resend the status before timeout.
                   If timeouted, the status is considered as error

uint8_t thingplus_valuePublish_str(const uint8_t *id, char *value)

   Description : Send sensor sting value to Thing+
   Parameter
      - id : Sensor id.
      - value : Sensor value

uint8_t thingplus_valuePublish_int(const uint8_t *id, int value)

   Description : Send sensor interger value to Thing+
   Parameter
      - id : Sensor id.
      - value : Sensor value

uint8_t thingplus_valuePublish_float(const uint8_t *id, float value)

   Description : Send sensor float value to Thing+
   Parameter
      - id : Sensor id.
      - value : Sensor value

uint8_t thingplus_actuatorCallbackSet(uint8_t* (cb)(const uint8_t id, const uint8_t* cmd, cJSON *options))

   Description : Register actuator callback function.
   Parameter
      - cb : Callback function pointer.

 

Usage Comparison

Arduino Ver. VS WIZnet W7500x Ver.

  • Arduino library와 구현된 W7500x library 둘 모두 거의 동일한 메인 루틴 구조로 동작
  • 추후 SSL/TLS 지원 라이브러리가 제작되면, Arduino에서 Prototype 된 구조를 WIZnet Chip을 활용한 Device에서 동일하게 구현 가능

usage_comparison

 

Thing+ Dashboard Example

demo_dashboard_for_wiz750sr

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중