오렌지보드 WiFi

Posted by 카이젠8501 카이젠8501
2016.11.24 17:17 IoT/Wi-Fi Module

(주)위즈네트와 (주)네패스가 콜라보레이션 해서 만든 오렌지보드 WiFi를 소개 한다. 아두이노 Uno에 WizFi250(Wi-Fi 모듈)을 연결해서 하나의 보드로 만든 보드이며, 당연히 아두이노 Uno와 완벽 호환하며  아두이노에서 Wi-Fi를 사용하기 위한 WizFi250 Library를 제공한다.


구성품은 아래와 같이 오렌지보드WiFi 1개, 확장 안테나 1개, USB 케이블 1개로 되어 있다.


오렌지 보드를 만드는 과정 중, WizFi250 Library를 구현하기 위해 조금 고생하였지만, (주)네패스를 통해 다양하고 유익한 컨텐츠들이 많이 생성되고 있어 보람을 느끼고 있다.


아래 링크들은 오렌지보드 WiFi를 학습하기 위한 학습 가이드이며 자세한 내용은 아래 링크를 참고 하기 바란다.

http://www.kocoafab.cc/product/orangewifi

 

1Wiznet라이브러리 설치와 WebClient 예제 사용하기
2WebServer 예제 사용하여 조도센서 값 웹브라우저에 출력하기
3OpenWeatherMap API를 사용하여 날씨데이터 받아오기
4OrangeBoard WiFi와 Ubidots를 연동하여 사용하기
5OrangeBoard WiFi와 Ubidots를 연동하여 사용하기2
6OrangeBoard WiFi와 Thingspeak를 연동하여 사용하기
7OrangeBoard WiFi와 Dweet.io를 연동하여 사용하기
8OrangeBoard WiFi의 AP모드 사용하기
9OrangeBoard WiFi, 조이스틱 센서 쉴드로 RC카 제어해보기


저작자 표시
신고
이 댓글을 비밀 댓글로

Windows DHCP,Static IP 배치 파일 만드는 방법

Posted by 카이젠8501 카이젠8501
2016.11.24 14:07 IT 개발/개발환경

netsh를 이용한 다수의 IP를 한번에 세팅하기

netsh란 Windows 명령 프롬프트에서 실행가능한 명령어로, Network정보(IP,DNS등)를 수정및 확인가능한 명령어이다.

사용법은 아래와 같다.

C:\>netsh interface ip set address name="인터페이스이름" source= dhcp/static
사용법
[name=]<인터페이스이름>
[source=]dhcp
[source=] static addr="IP 주소" mask="서브넷 마스크" gateway="gateway 주소"/none gwmetric="정수"

DHCP 세팅을 위한 Batch 파일

netsh interface ip set address name="로컬 영역 연결" dhcp
netsh interface ip add dns name="로컬 영역 연결" dhcp
ipconfig
pause

Static IP 세팅을 위한 Batch 파일

netsh interface ip set address name="로컬 영역 연결" source=static addr=222.xxx.xxx.xxx mask=255.255.255.0 gateway=222.xxx.xxx.xxx 
netsh interface ip add address name="로컬 영역 연결" addr=192.168.77.202 mask=255.255.255.0 gateway=192.168.77.1 
netsh interface ip add address name="로컬 영역 연결" addr=192.168.88.202 mask=255.255.255.0 gateway=192.168.88.1 
netsh interface ip add address name="로컬 영역 연결" addr=192.168.0.202 mask=255.255.255.0 gateway=192.168.0.1 
netsh interface ip add address name="로컬 영역 연결" addr=192.168.1.202 mask=255.255.255.0 gateway=192.168.1.1 
netsh interface ip add dns name="로컬 영역 연결" 8.8.8.8
ipconfig
pause
저작자 표시
신고
이 댓글을 비밀 댓글로

BLE to Ethernet Thin Gateway 만들기

Posted by 카이젠8501 카이젠8501
2016.11.24 14:04 IoT/BLE Module

본 포스팅에서는 BLE(Bluetooth Low Energy)로 수집된 데이터를 Ethernet을 통해 Cloud Server에 전달하기 위한 Data Collector를 구현하는 방법에 대해 설명한다.

시스템 구성

본 시스템은 아래 그림과 같이 Data Sender, Data Collector, Cloud Server로 구성되어 있다. Data Sender는 Heart Rate(심장박동)과 Battery Level을 측정하여 Data Collector로 전달하는 역할을 한다.

Data Sender의 Software는 Nordic에서 제공하는 ble_app_hrs_s110 예제를 변경 없이 사용하였으며 측정되는 Heart Rate와 Battery Level은 가상으로 만든 자료 이다.

Data Collector는 Data Sender가 송신하는 데이터를 수집하고 수집된 데이터를 Cloud Service(본 예제에서는 dweet.io를 사용함)에 전달하는 역할을 한다. Data Collector의 Software는 Nordic에서 제공하는 ble_app_hrs_c_s120 예제를 기반으로 W5500을 사용하기 위한 코드와 Cloud Service에 데이터를 송신하는 코드를 추가 하였다.

Cloud Service는 dweet.io를 이용하였으며, dweet.io에 대한 자세한 내용은 아래 링크를 참고 하기 바란다.
http://dweet.io/

20160111_162525

하드웨어 구성

Data Sender

Data Collector

Debugging Log를 확인 하기 위한 UART to USB Module과 Ethernet을 사용하기 위한 WIZ550io를 아래 그림과 같이 연결한다.

20160111_182139

nRF51 DK Pin WIZ550io Pin
P0.01 J1.3 MOSI
P0.03 J1.4 MISO
P0.04 J1.5 SCLK
P0.02 J1.6 SCSn
VDD J1.7 VDD(3.3V)
GND J1.1 GND

소프트웨어 구성

Download nRF51 SDK

https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v10.x.x/
nRF51 SDK 개발환경 설정에 대한 자세한 내용은 링크를 참고 하기 바란다.

Github Repository에는 Data Sender와 Data Collector에 대한 Eclipse Project 및 소스 파일들이 공유 되어 있다. Github Repository에서 nRF51_SDK10.0.0_Example을 다운로드 한 후,해당 파일들을 아래 경로로 복사 한다.

ble_app_hrs : <SDK>/examples/ble_peripheral
ble_app_hrs_c_with_W5500 : <SDK>/examples/ble_central

Data Sender

(1) 개발 환경 설정

Import Existing Project

  • [import]-[Existing Projects into Workspace]
  • Select root directory
<SDK>/examples/ble_peripheral/ble_app_hrs/pca10028/s110/armgcc

(2) Upload SoftDevice

20160112_105834

(3) Upload Application

20160112_105849

Data Collector

(1) 개발 환경 설정

Import Existing Project

  • [import]-[Existing Projects into Workspace]
  • Select root directory
<SDK>/examples/ble_central/ble_app_hrs_c_with_W5500/pca10028/s120/armgcc

(2) Upload SoftDevice

20160112_105310

(3) Upload Application

20160112_105337

주요 코드 설명(Data Collector)

#define PUBLISH_INTERVAL                 APP_TIMER_TICKS(300, APP_TIMER_PRESCALER)

int main(void)
{
    bool erase_bonds;
    uint32_t err_code;

    // Initialize.
    APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, NULL);

    buttons_leds_init(&erase_bonds);
    uart_init();
    printf("Heart rate collector example\r\n");

    spi0_master_init();
    user_ethernet_init();

    app_mailbox_create(&hr_data_mailbox);
    app_mailbox_create(&bas_data_mailbox);

    ble_stack_init();
    device_manager_init(erase_bonds);
    db_discovery_init();

    hrs_c_init();
    bas_c_init();


    // Start scanning for peripherals and initiate connection
    // with devices that advertise Heart Rate UUID.
    scan_start();

    err_code = app_timer_create(&m_publish_data_timer_id, APP_TIMER_MODE_REPEATED, publish_data_handler);
    APP_ERROR_CHECK(err_code);
    err_code = app_timer_start(m_publish_data_timer_id,PUBLISH_INTERVAL,NULL);
    APP_ERROR_CHECK(err_code);


    for (;; )
    {
        power_manage();
    }
}
#define HR_EVT_MAILBOX_QUEUE_SIZE     10
#define BAS_EVT_MAILBOX_QUEUE_SIZE    10

typedef struct
{
    uint16_t evt_data;
    uint16_t dummy_data;
}hrs_c_evt_data;

typedef struct
{
    uint16_t battery_level;
    uint16_t dummy_data;
}bas_c_evt_data;

APP_MAILBOX_DEF(hr_data_mailbox, HR_EVT_MAILBOX_QUEUE_SIZE, sizeof(hrs_c_evt_data));
APP_MAILBOX_DEF(bas_data_mailbox, BAS_EVT_MAILBOX_QUEUE_SIZE, sizeof(bas_c_evt_data));

static any_port = 50000;
uint8_t dweet_io_ip[4] = {54,172,56,193};
uint16_t dest_port = 80;
#define THING         "Ble2Eth"
#define HEART_RATE     "heart_rate"
#define BATTERY     "battery"
static void publish_data_handler(void * p_context)
{
    UNUSED_PARAMETER(p_context);
    uint8_t sn = 0;
    uint32_t ret;
    uint8_t eth_data[512];
    hrs_c_evt_data hr_data;
    bas_c_evt_data batt_data;

    // Connect to server
    if(app_mailbox_length_get(&hr_data_mailbox) || app_mailbox_length_get(&bas_data_mailbox))
    {
        if(getSn_SR(sn) != SOCK_CLOSED)
        {
            close(sn);
            disconnect(sn);
        }
        while(getSn_SR(sn) != SOCK_CLOSED);

        if( ret = socket(sn, Sn_MR_TCP, any_port++, 0x00) != sn )
        {
            APPL_LOG("[PUBLISH]: Socket open failed, reason %d\r\n", ret);
            return;
        }

        if( ret = connect(sn, dweet_io_ip, dest_port) != SOCK_OK )
        {
            APPL_LOG("[PUBLISH]: Socket Connection failed, reason %d\r\n", ret);
            return;
        }
    }
    else    return;

    // Publish collected data
    while( app_mailbox_length_get(&hr_data_mailbox) != 0)
    {
        app_mailbox_get(&hr_data_mailbox,&hr_data);
        sprintf(eth_data,"GET /dweet/for/%s?%s=%d HTTP/1.1\r\nHost: dweet. io\r\n\r\n",THING,HEART_RATE,hr_data.evt_data);
        send(sn,eth_data,strlen((uint8_t*)eth_data));
    }

    while( app_mailbox_length_get(&bas_data_mailbox) != 0)
    {
        app_mailbox_get(&bas_data_mailbox,&batt_data);
        sprintf(eth_data,"GET /dweet/for/%s?%s=%d HTTP/1.1\r\nHost: dweet. io\r\n\r\n",THING,BATTERY,batt_data.battery_level);
        send(sn,eth_data,strlen((uint8_t*)eth_data));
    }

    close(sn);
    disconnect(sn);
}

APP_TIMER_DEF(m_publish_data_timer_id);                                                /**< Publish data timer. */
/**@brief Heart Rate Collector Handler.
 */
static void hrs_c_evt_handler(ble_hrs_c_t * p_hrs_c, ble_hrs_c_evt_t * p_hrs_c_evt)
{
    uint32_t err_code;
    uint32_t test;
    hrs_c_evt_data hrs_c_data;

    switch (p_hrs_c_evt->evt_type)
    {
        case BLE_HRS_C_EVT_DISCOVERY_COMPLETE:

            // Heart rate service discovered. Enable notification of Heart Rate Measurement.
            err_code = ble_hrs_c_hrm_notif_enable(p_hrs_c);
            APP_ERROR_CHECK(err_code);

            printf("Heart rate service discovered \r\n");
            break;

        case BLE_HRS_C_EVT_HRM_NOTIFICATION:
        {
            APPL_LOG("[APPL]: HR Measurement received %d \r\n", p_hrs_c_evt->params.hrm.hr_value);
            hrs_c_data.evt_data = p_hrs_c_evt->params.hrm.hr_value;
            app_mailbox_put(&hr_data_mailbox,&hrs_c_data);
            break;
        }

        default:
            break;
    }
}


/**@brief Battery levelCollector Handler.
 */
static void bas_c_evt_handler(ble_bas_c_t * p_bas_c, ble_bas_c_evt_t * p_bas_c_evt)
{
    uint32_t err_code;
    bas_c_evt_data bas_data;

    switch (p_bas_c_evt->evt_type)
    {
        case BLE_BAS_C_EVT_DISCOVERY_COMPLETE:
            // Batttery service discovered. Enable notification of Battery Level.
            APPL_LOG("[APPL]: Battery Service discovered. \r\n");

            APPL_LOG("[APPL]: Reading battery level. \r\n");

            err_code = ble_bas_c_bl_read(p_bas_c);
            APP_ERROR_CHECK(err_code);


            APPL_LOG("[APPL]: Enabling Battery Level Notification. \r\n");
            err_code = ble_bas_c_bl_notif_enable(p_bas_c);
            APP_ERROR_CHECK(err_code);

            break;

        case BLE_BAS_C_EVT_BATT_NOTIFICATION:
        {
            APPL_LOG("[APPL]: Battery Level received %d %%\r\n", p_bas_c_evt->params.battery_level);
            bas_data.battery_level = p_bas_c_evt->params.battery_level;
            app_mailbox_put(&bas_data_mailbox,&bas_data);
            break;
        }

        case BLE_BAS_C_EVT_BATT_READ_RESP:
        {
            APPL_LOG("[APPL]: Battery Level Read as %d %%\r\n", p_bas_c_evt->params.battery_level);
            break;
        }

        default:
            break;
    }
}

Cloud Service(dweet.io)에서 데이터 확인하기

무료 버전의 dweet.io는 디바이스로 부터 수신한 데이터를 별도의 데이터베이스에 저장하지 않고 웹 브라우저에 출력하는 구조로 동작한다.
때문에 별도의 설정이나 Key 값이 없이도 아래 그림과 같은 데이터를 확인 할 수 있다.
아래와 같은 데이터를 확인하기 위한 URL은 https://dweet.io/follow/Ble2Eth 이다. https://dweet.io/follow/ 뒤에 위 코드에서 설정한 THING 주소를 기입하면 된다.

20160112_125136

dweet.io에 대한 자세한 설명은 링크를 참고 하기 바란다.

저작자 표시
신고

'IoT > BLE Module' 카테고리의 다른 글

BLE to Ethernet Thin Gateway 만들기  (0) 2016.11.24
nRF51 SDK Eclipse 개발환경 구축  (0) 2016.11.24
이 댓글을 비밀 댓글로

nRF51 SDK Eclipse 개발환경 구축

Posted by 카이젠8501 카이젠8501
2016.11.24 14:02 IoT/BLE Module

Hardware

nRF51 Development Kit board(PCA10028)

20160108_150259

GNU tools for ARM embedded Processors

(1) 다운로드 GCC ARM Embedded

https://launchpad.net/gcc-arm-embedded/+download

(2) Install GCC ARM Embedded

설치 옵션에서 path 등록 해줘야 함.

Default Path : C:\Program Files (x86)\GNU Tools ARM Embedded

GNUWin32 and CoreUtils

(1) GnuWin32 - Core Utility
http://gnuwin32.sourceforge.net/packages/coreutils.htm
(2) GnuWin32 - GNU Make utility
http://gnuwin32.sourceforge.net/packages/make.htm

nRF51 SDK 10.0.0

(1) nRF51 SDK 다운로드
https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v10.x.x/

SDK를 다운로드 받은 후, 아래 경로로 이동하면 3개의 Makefile이 존재 한다. 각자의 환경에 맞는 파일을 수정하면 된다. ( Makefile.posix : For Linux or OSX User, Makefile.windows : For Windows User)

<SDK>/components/toolchain/gcc

Text Editor를 이용하여 Makefile.windows 파일을 열고,GNU_INSTALL_ROOT와 Version을 수정한다.

ifeq ($(findstring 86, $(ProgramFiles)), )
    PROGFILES := C:/Program Files
else
    PROGFILES := C:/Program Files (x86)
endif

GNU_INSTALL_ROOT := $(PROGFILES)/GNU Tools ARM Embedded/4.9 2015q3
GNU_VERSION := 4.9.3
GNU_PREFIX := arm-none-eabi

Compile nRF51 Sample Example

<SDK>\examples\peripheral\blinky\pca10028\blank\armgcc

CMD 창에서 위 경로로 이동한 다음 make 명령을 수행하면 아래와 같은 로그가 나오며, _build 폴더에 해당 Binary가 생성되는 것을 확인 할 수 있다.

E:\test\nRF51_SDK_10.0.0\examples\peripheral\blinky\pca10028\blank\armgcc>make
rm -rf _build
echo  makefile
makefile
mkdir _build
Compiling file: system_nrf51.c
Compiling file: main.c
Compiling file: nrf_delay.c
Compiling file: gcc_startup_nrf51.s
Linking target: nrf51422_xxac.out
make[1]: Entering directory `E:/test/nRF51_SDK_10.0.0/examples/peripheral/blinky/pca10028/blank/armgcc'
Preparing: nrf51422_xxac.bin
Preparing: nrf51422_xxac.hex

   text    data     bss     dec     hex filename
   1004     104      28    1136     470 _build/nrf51422_xxac.out

make[1]: Leaving directory `E:/test/nRF51_SDK_10.0.0/examples/peripheral/blinky/pca10028/blank/armgcc'

E:\test\nRF51_SDK_10.0.0\examples\peripheral\blinky\pca10028\blank\armgcc>

Download Link for nRF-tools(Windows,Linux)

Optional: erase target if not already blank

<SDK>\examples\peripheral\blinky\pca10028\blank\armgcc>nrfjprog --family nRF51 -e
Erasing code and UICR flash areas.
Applying system reset.

Load FW image to target

<SDK>\examples\peripheral\blinky\pca10028\blank\armgcc>nrfjprog --family nRF51 --program _build/nrf51422_xxac.hex
Parsing hex file.
Reading flash area to program to guarantee it is erased.
Checking that the area to write is not protected.
Programing device.

Reset and Run

E:\test\nRF51_SDK_10.0.0\examples\peripheral\blinky\pca10028\blank\armgcc>nrfjprog --family nRF51 -r
Applying system reset.
Run.

Eclipse 설정

(1) Download Mars C/C++ developers package

(2) Install GNU ARM Eclipse Plug-in

20151223_131131

20151223_131157

20151223_131209

(3) Configure environment

[windows]-[Preferences]-[C/C++]-[Build]-[Global Tools path]

Build tools folder: C:\Program Files (x86)\GnuWin32\bin
Toolchain folder : C:/Program Files (x86)/GNU Tools ARM Embedded/4.9 2015q3/bin

20151223_132030

20151223_132212

(4) Configuration Packages

20151223_154230

20151223_155100

20151223_155245

20151223_155954

참고 자료

http://gnuarmeclipse.github.io/plugins/packs-manager/

Create a new Eclipse Project

(1) Eclipse 실행 후, [file]->[new Makefile project with existing code] 선택

20151223_132945

(2) Project Name과 Existing Code Location 지정 후, Finish 버튼 클릭
(Exsting Code Location : \examples\peripheral\blinky\pca10028\s110\armgcc)

20151223_133028

(3) Makefile을 열고 C_SOURCE_FILES에 추가 되어 있는 파일들을 Eclipse의 Project Explorer에 추가 한다.

[NEW]-[Folder]-[Advanced]-[Virtual Folder] 체크 후, Folder name에 Application 이름으로 Virtual Folder 생성

20160107_092650

생성된 Virtual Folder 선택 -> [Import]-[File System] 선택

20160107_094800

원하는 main.c가 있는 경로 설정 -> main.c 선택 -> Create links in workspace 선택

20160107_095148

20160107_095627

nRF_Driver 이름의 Virtual Folder 생성-> nRF_Driver 선택-> [Import]-[File System] 선택 후 nRF51_SDK_10.0.0\components\drivers_nrf 폴더 등록

20160107_101037

(4) makefile을 열고 CFLAGS의 옵션을 -O3에서 -O0 -g3로 변경한다.

#flags common to all targets
CFLAGS  = -DNRF51
CFLAGS += -DBOARD_PCA10028
CFLAGS += -DBSP_DEFINES_ONLY
CFLAGS += -mcpu=cortex-m0
CFLAGS += -mthumb -mabi=aapcs --std=gnu99
CFLAGS += -Wall -Werror -O0 -g3
CFLAGS += -mfloat-abi=soft
# keep every function in separate section. This will allow linker to dump unused functions
CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
CFLAGS += -fno-builtin --short-enums

(5) Create Make Target
해당 프로젝트를 컴파일하기 위해서 Make Target을 생성해야 한다. 생성 규칙은 Makefile에 기술되어 있으며, flash_softdevice는 NRF51에 Bluetooth Stack을 업로드하는데 사용되며 flash nrf51422_xxac_s110은 User Application을 업로드 하기 위해 사용된다.

20160107_102313

Reference

https://devzone.nordicsemi.com/tutorials/7/development-with-gcc-and-eclipse/
http://redbearlab.com/nrf51822-sdk/

저작자 표시
신고

'IoT > BLE Module' 카테고리의 다른 글

BLE to Ethernet Thin Gateway 만들기  (0) 2016.11.24
nRF51 SDK Eclipse 개발환경 구축  (0) 2016.11.24
이 댓글을 비밀 댓글로

[WizFi310] KT GiGa IoTMakers 사용하기

Posted by 카이젠8501 카이젠8501
2016.11.22 16:15 IoT/KT IoTMakers

개요

WizFi310은 KT IoTMakers 플랫폼을 사용하기 위한 AT Command를 지원하며, AT Command를 사용하면 MCU에서 별도의 라이브러리 포팅 없이 KT 플랫폼을 사용 할 수 있다. 본 포스팅에서는 WizFi310 Wi-Fi Module을 이용해서 KT IoTMakers 플랫폼을 사용하는 방법에 대해 설명한다.

olleh GiGa IoTMakers란?

IoTMakers는 IoT Player들이 쉽게 IoT생태계에 참여할 수 있도록 지원하는 KT의 개방형 IoT 플랫폼이다. 해당 플랫폼을 통해 손쉽게 IoT 디바이스를 연결하여 테스트 할 수 있고, 수집된 데이터를 관리 하고, 제공되는 OPEN API를 통하여 IoT 서비스를 만들 수 있다.

20161122_141817

iotmakers.olleh.com 참고

IoTMakers Device 등록

http://iotmakers.olleh.com/에 회원 가입 후, [IoT 개발]-[나의 디바이스]-[디바이스 등록] 메뉴를 선택 한다.

20161122_144422

20161122_144805

디바이스 등록을 위해 필요한 정보를 위와 같이 기입 하면 아래 그림과 같이 나의 디바이스에 새로 생성된 디바이스를 확인 할 수 있다. 해당 디바이스를 클릭 하면 아래와 같이 디바이스의 상세 설명 값을 확인 할 수 있고, Device로 부터 수집한 데이터나 디바이스를 제어 하기 위한 Tag Stream을 생성 할 수 있다.
( 참고로 디바이스 상세 정보에 있는 디바이스 아이디, 디바이스 패스워드, Gateway 연결 ID는 디바이스가 IoTMakers 플랫폼에 접속하기 위해 필요한 정보로, 미리 적어 두는 것이 좋다. )

20161122_144904

본 예제에서는 숫자 형식의 Temperature, 문자열 형식의 LED1의 데이터를 수집하고 문자열 형태로 제어 신호를 보내는 Power Tag Stream ID를 만들었다.

20161122_144954

20161122_145035

20161122_145235

생성된 태그 스트림들은 아래 그림과 같이 태그 스트림 목록에서 확인 할 수 있다.

KT IoT Makers 사용을 위한 WizFi310 AT Command 정의

  • Store the configuration : AT+IMCFG=ip,port,devId,devPw,gwId
    • devID : 디바이스 아이디, devPw : 디바이스 패스워드, gwId : Gateway 연결 ID
  • Connect to IoTMakers : AT+IMCONN
  • Disconnect : AT+IMDISCONN
  • Send Simple Data : AT+IMSEND=type,tagid,tagval
  • Send Multiple Data : AT+IMSENDM=data,data,… :data=type,tagid,tagval

KT IoT Makers를 위한 WizFi310 AT Command 예제

20161122_154349

위 명령은 다음과 같은 동작을 수행한다.

  1. DIR-815_Wiznet 이란 SSID를 가지는 AP에 접속 ( 비밀번호 : 12345678 )
  2. KT IoTMakers 플랫폼에 접속
  3. Temperature 값 송신 ( 값 :20 )
  4. LED1 값 송신 ( 값 : ON )

IoTMakers 페이지의 태스 스트림 목록을 확인하면 아래와 같이 값이 수신된 것을 확인 할 수 있으며, [IoT 개발]-[나의대시보드]를 확인 하면 아래 그림과 같이 대시보드를 꾸밀 수 있다.

20161122_154922

20161122_154939

20161122_155639

AT+IMSENDM=d,Temperature,20,s,LED1,ON

위 명령을 수행하면 한번에 Temperature 값과 LED1 값을 송신 할 수 있다.

IoTMaker 플랫폼은 원격에 있는 디바이스를 제어하기 위한 기능도 제공하고 있으며, 아래 그림과 같이 미리 만들어 놓은 Power 스트림에 On이라는 제어 값을 입력하고 제어 버튼을 클릭하면 된다.

20161122_155023

IoTMakers로 부터 제어 값을 받은 WizFi310은 아래와 같이 출력한다. MCU 입장에서는 WizFi310의 Serial 만 모니터링 하면 플랫폼으로 부터 제어 신호를 받을 수 있다.
( 수신되는 데이터 포맷 : “type,tagId,TagVal” )

20161122_160941

저작자 표시
신고

'IoT > KT IoTMakers' 카테고리의 다른 글

[WizFi310] KT GiGa IoTMakers 사용하기  (0) 2016.11.22
이 댓글을 비밀 댓글로

ARM TechCon 2016 전시회 참관 후기

Posted by 카이젠8501 카이젠8501
2016.11.03 16:55 IT 개발/기타

ARM TechCon 2016 전시회 참관 후기

전시회장에는 크게 ARM 부스와 mbed 부스로 나누어져 있었고, 나머지 기업들의 부스는 작게 분포 되어 있었습니다. mbed 부스에는 WIZwiki-W7500ECO가 전시되어 있었습니다.
(가장 아랫줄 4번째에 위치해 있는 WIZwiki-W7500ECO 보드)

Techcon_01

전시회는 ARM과 협력하는 업체들로 구선되어 있었는데, 크게 SoC(Cadence, Synopsis 등), 소프트웨어 IDE(IAR 등), ARM 코어로 칩을 제작하는 회사(NXP, Renesas) 그리고 OS 및 클라우드(WIND River 등) 업체가 주를 이루었고 기타 대리점(Mouser)들이 있었습니다.

Multitech

우리가 중점적으로 주목한 곳은 mbed 부스였습니다. 먼저 커다란 화분 같이 생긴 부스가 눈에 띄었고 해당 부스로 발걸음을 옮겼습니다. 아래 그림에 있는 WaterBit이라는 이름의 제품은 Multitech라는 업체에서 mbed 플랫폼을 사용하여 만든 Prototype 제품이었습니다. 본 제품은 스마트 화분이고 Multitech에서 만든 게이트웨이와 클라우드 서비스를 이용하여 서비스를 제공합니다. 게이트웨이는 LoRa부터 Ethernet까지 각종 토신들을 원하는 대로 교체 장착 할 수 있게 되어 있었습니다.

Techcon_02

기타 mbed 부스

그리고 나서 옆에 mbed 부스들을 돌아보았는데, 전체적으로 우리가 지금까지 해왔던 펜타코드들과 크게 다르지 않았습니다. IoT 솔루션이라고 부르는 것들 모두 센서 그리고 클라우드 서비스로의 연결 범주를 벗어나지 않았습니다. 하지만 mbed에서 내세우고 강조하는 것은 mbed OS이며 이 OS 기반으로 모든 서비스와 어플리케이션이 가능하다는 점을 강조하는 것을 알수 있었습니다. 우리가 mbed 플랫폼을 제대로 이용하고 mbed Eco system과 융화 되기 위해서는, mbed OS는 선택이 아닌 필수가 될지도 모르겠다는 생각이 들었습니다. mbed 클라우드 또한 mbed OS 기반이었고 TLS 등의 Security 관련한 것들 또한 마찬가지였습니다.

다음은 mbed 전시회를 둘러보며 인상적이었던 것들을 소개 하겠습니다.

아래 그림의 Hexiwear는 NXP에서 나온 Smart Multimedia 개발 킷으로, 메인 제품에 도킹보드를 가지고 여러 가지 도킹 쉴드를 장착해 Wearable 기기들을 개발 할 수 있습니다. 초기에는 FreeRTOS와 Kinetics SDK로 개발환경이 구성되었지만 지금은 mbed Os 5로 변경되었다고 합니다.

Techcon_11

OpenAIS와 mbed-client, mbed OS를 이용하여 만든 원격으로 불을 On/Off 하는 Prototype과 스마트 팩토리 관련 Prototype 입니다.

Techcon_12

아래 그림은 작은 오락기( Tiny Arcade)이며, mbed 클라우드를 체험해 볼 수 있는 부스도 마련되어 있었습니다.

Techcon_13

저희 회사에 반가운 아두이노 부스도 볼 수 있었습니다. 아무래도 최근 아두이노 진영에서도 Cortex 계열 및 Linux를 위한 보드들이 많아 지면서 ARMTech Con에서 홍보를 하는게 아닌가라는 생각을 하였습니다. 오른쪽 사진은 Snap4Arduino라는 프로그램으로, 저희가 아는 스크래치 프로그램과 유사한 프로그램으로 소프트웨어 뿐 아니라 하드웨어 컨트롤이 가능하도록 개발된 프로그램입니다. Snap 쥬얼 프로그래밍 언어를 사용하여 쉽게 아두이노 보드를 컨트롤 할 수 있도록 개발된 것으로, 거의 모든 아두이노 보드를 지원하며 자동 환경 구성을 제공합니다. ( 참고로 무료이며, 한국어 지원이 가능합니다. )

Techcon_14

WindRiver

전시회장을 둘러보고 마지막으로 WindRiver 부스에 방문하였습니다. 아래 글은 WindRiver 기업을 소개하기 위한 페이지에 있는 글입니다. 글에 따르면 인텔의 자회사로 네트워크, 디지털 가전, 산업 및 자동화, 항공우주 및 방위산업, 모바일, 자동차 관련 부분 등 임베디드 관련 분야를 사업영역으로 하며 RTOS와 임베디드 리눅스 분야에서 인정 받고 있는 기업이라고 합니다.

임베디드 및 모바일 소프트웨어 분야에서 세계 시장을 선도하고 있는 윈드리버는 인텔의 자회사로 네트워크, 디지털 가전, 산업 및 자동화, 항공우주 및 방위산업, 모바일, 자동차 관련 부분 등 임베디드 기술이 필요한 거의 모든 분야를 사업 영역으로 하고 있습니다. 1981년부터 지난 30년간 임베디드 장비 내부의 컴퓨팅 환경 개선을 위해 노력해 왔으며 그 기술은 5억 개 이상의 제품에 적용되어 왔습니다.
 임베디드 소프트웨어 중에서도 OS분야에 있어서 강한 두각을 나타내고 있는 윈드리버는 글로벌 시장 조사 기관인 VDC 리서치 그룹이 발표한 2012년 “임베디드/실시간 운영 시스템”보고서에서 시장을 주도해 온 리더 기업으로 선정된 바 있습니다. 이 보고서에 따르면 윈드리버는 실시간 운영 시스템, RTOS 분야에 있어서 ‘VxWORKS’관련 제품 및 서비스를 통해 전세계 시장 매출의 40%이라는 기록적인 점유율을 달성했으며, 리눅스 플랫폼 및 관련 솔루션으로 전체 시장 매출액의 50 % 이상을 차지하면서 임베디드 리눅스 시장에서도 연속 4년째 리더 기업으로 인정받아 왔습니다. 윈드리버의 이와 같은 경이로운 시장 점유율은 2위 기업의 2배에 달하는 것으로 나타나 독보력인 리더십을 증명했다고 할 수 있습니다. 
또한 최근 주목 받고 있는 안드로이드 분야에서도 매우 활발한 활동을 벌이고 있는데, 윈드리버는 구글의 OHA(Open Handset Alliance) 창립 멤버로서 고객들이 실제적으로 시장에 영향력있는 모바일 제품을 출시할 수 있도록 강력한 안드로이드 서비스 비즈니스를 성공적으로 구축해 왔습니다. 뿐만 아니라 영향력 있는 다양한 오픈 소스 프로젝트 참여를 비롯해 모바일 기술 발전에도 많은 공헌을 하고 있습니다. 
아울러 윈드리버는 GENIVI 연합의 창립멤버로 GENIVI 플랫폼과 안드로이드 등 다양한 리눅스 기반의 자동차 플랫폼 분야에서도 영향력을 발휘하고 있습니다.

ARM TechCon 부스에서는 VxWORKS라는 RTOS와 HELIX라는 클라우드 시스템을 소개 하고 있었습니다. VxWORKS는 Cortex A, M, R에서 동작 할 수 있다고 설명 되었으나, CortexM0/M0+급의 MCU에서는 WindRiver Rocket이라는 RTOS를 사용하라고 권유 받았습니다. 현재 WindRiver Rocket은 Zephyr라는 새로운 이름의 프로젝트로 서비스 하고 있습니다.

Techcon_15

WindRiver의 서비스들을 이용하기 위한 SDK를 제공하고 있었으며, 아래 그림과 같이 특정 플랫폼에 대한 템플릿 예제와 온라인 컴파일러들을 제공함으로써 마치 ARM mbed와 같은 생태계를 만들려고 하는 것 처럼 보였습니다. 현재 SDK List에는 대부분 리눅스급의 퍼포먼스를 요구하는 디바이스들이 등록되어 있고, Cortex계열은 Freescale Freedom K64F 가 유일합니다. 하지만 이 보드 역시 Cortex M4 급으로 우리 칩 W7500/W7500P이 해당 SDK 리스트에 등록 가능한지는 조금 더 검토가 필요 할 것 같습니다.

Techcon_16

현재는 WindRiver 담당자에게 연락처를 남겨 놓은 상태이고, 해당 담당자를 통해 저희 보드가 WindRiver SDK 리스트에 등록하기 위해서는 어떤 절차가 필요한지 문의 해 놓은 상태 입니다


저작자 표시
신고
이 댓글을 비밀 댓글로

mbed connect 2016 참관 후기

Posted by 카이젠8501 카이젠8501
2016.11.03 16:42 IT 개발/기타

mbed connect

mbed connect 일정동안 keynote 발표를 들으면서, ARM이 강조하고 싶은 2 Keyword는 mbed os, Security 라는 생각이 들었습니다.

특히 아래 그림에서 볼 수 있듯이, ARM에서는 TrustZone 기능이 추가/보완 된 ARM-v8M 아키텍쳐 기반의 H/W를 사용하고 그 위에 mbed os 를 S/W로 사용하면 보안에 강력한 임베디드 디바이스를 구성 할 수 있다고 설명하고 있습니다.

01_mbedconnect

Security

현재 보안이 매우 중요해지고 있음에도 불구하고, 소형 임베디드 디바이스는 제한적인 보호 상태이거나, 개발자에게 높은 전문 기술 지식을 요구하는 소프트웨어 관리 보안 시스템에만 의존하고 있는 상황이라고 합니다. 이에 마이크 뮬러(Mike Muller) ARM 최고기술책임자(CTO)는 ARMv8-M에 구현된 하드웨어 아키텍처 보안을 적용시킴으로써 훨씬 더 쉽게 보안을 구축하고 효율적으로 실행할 수 있도록 도울 수 있다고 설명하였습니다.

ARMv6-M & ARMv7-M 대비 ARMv8-M의 특징은 아래와 같습니다. 아직까지는 ARMv8-M 아키텍처 기반의 Core(예, Cortex-M0,M0+ ….)는 존재하지 않으나, Cortex-M0,M0+와 대응되는 제품군을 ARMv8-M baseline으로 Cortex-M3,M4,M7과 대응되는 제품군을 ARMv8-M mainline으로 전환 할 것으로 보입니다.

02_mbedconnect

기존 아키텍처(ARMv6-M,ARMv7-M)와 가장 큰 특징적인 차이는 ARM TrustZone 기능의 추가 이며, TrustZone은 여러 방식으로 변이되는 소프트웨어 공격 및 일반 하드웨어 공격을 막아 낼 수 있는 향상된 기술을 저렴한 비용으로 구현하기 위해 개발 되었다고 합니다.
TrustZone은 아래 그림과 같이 Non-secure state(RTOS와 Application)와 암호화 및 Key 매지니먼트, 무결성 검사와 같은 민감한 작업을 처리하는 Secure state 사이에 독립성을 제공합니다.

03_mbedconnect

이 아키텍처의 가장 큰 핵심은 별도의 보안 구역(trusted)을 만들어 이 안에서 작업을 한 후 정보를 박스에 넣고 열쇠를 채워 비신뢰 보드로 넘기게 되는데, 이 비신뢰 모드에서는 이 박스가 어떻게 생겼고 열쇠가 어떻게 잠겼으며 그 안에 어떤 내용이 채워져 있는지 볼 수 없게 하는 방식 입니다.

간단하게 정리하면, ARM은 ARMv8-M 아키텍처를 사용하여 SoC 레벨에서 Security를 위한 기능을 제공하고 있으며 기존 Software 레벨에서 제공하는 보안 기술(ex, SSL/TLS)와 같이 사용하여 보다 더 강화된 보안을 보다 더 쉽게 사용 할 수 있다고 강조 하고 있습니다.

하지만 아직 ARMv8-M 아키텍처를 이용한 Core가 시중에 나와 있지 않은 관계로, 위즈네트에서는 조금 더 시간을 가지고 ARMv8-M 아키텍처를 사용한 Core들의 동향을 지켜 봐야 할 것 같습니다.

mbed OS

이전 mbed OS 2(“Classic”), mbed OS 3 (“Eventing OS”)와 비교하여 가장 큰 차이점은, mbed OS 5에는 RTOS, connectivity, security component가 maintenance core로 포함되었다는 것입니다. 이전에는 분리 되어 있던 Network Stack과 mbed cloud client가 포함되고, 보안을 위한 mbed TLS, Security APIs(mbed uVisor)가 추가 된 것을 볼 수 있습니다.
Network Stack에는 Ethernet, BLE, Wi-Fi, 6LoWPAN, Thread 등이 있습니다.

05_mbedconnect

mbed OS 또한 Security를 강조하고 있으며, 이를 반영하기 위해 mbed OS의 구조를 조금씩 업그레이드 하고 있음을 확인 하였습니다. 앞에서 설명한 내용은 Hardware(SoC) 측면에서 보안 기술을 적용하는 반면, mbed OS는 mbed TLS, mbed uVisor를 이용하여 Software 측면에서 보안 기술을 개발하고 적용하였습니다.

04_mbedconnect

mbed OS에서는 Security code compartment, Communication security, Lifecycle security로 나누어서 IoT 단말의 보안을 관리 합니다.

06_mbedconnect

Security code compartment ( uVisor )

먼저 Security code compartment를 위해서는 uVisor라는 기술을 사용하는데, mbed uVisor는 OS에서 가장 하위 계층에 위치하며, MPU(Memory Protection Unit)을 통해 Cortex-M3, M4, M7 Core 상에 ‘boxes’라고 명 명하는 격리된 보안 영역(예, 샌드박스)을 생성하는 일종의 하이퍼바이저 로써 기기 자체 보호 기능 입니다.

uVisor의 주요 기능은 ACLs(Access Control Lists)이며, 아래 그림을 보면 ACLs의 개념을 쉽게 이해 할 수 있습니다. User는 uVisor를 통해 Application 혹은 Task를 Box로 묶어서 관리 할 수 있고, 해당 Box만 접근 할 수 있는 MCU의 Peripheral 들을 지정 할 수 있습니다. 예를 들어 User가 Box1이라고 지정한 Application에서는 Timer와 UART만 사용할 수 있도록 설정해 놓았는데, Flash나 I2C와 같은 Peripheral을 사용하려면 Memory Fault와 같은 Error를 발생시켜 OS 내에 악성코드나 외부의 공격 코드로부터 훼손된 시스템 컴퍼넌트, 드라이버로 부터 Box를 보호 할 수 있다는 개념입니다.

08_mbedconnect

Communication Security

SSL은 안전하지 않은 데이터를 암호화 하여 안전하게 전달하기 위해 사용 합니다. SSL 버전 1은 실제로 발표 되지 않았었고, SSL 버전 2가 공개 적으로 발표되었는데 많은 보안 취약점이 있었다고 합니다. 그래서 그것을 보완한 버전이 SSL 버전 3이며 공식적으로 표준화 한 이름이 TLS 입니다. 이를 같이 묶어서 SSL/TLS라고 부릅니다.
mbed에서는 mbedTLS를 지원 함으로써 데이터를 암호화 하여 송/수신 할 수 있는 기능을 제공하고 있습니다.

Lifecycle Security

mbed cloud client에서는 Key Value, Device ID 및 특정 설정 값들을 이용하여 Device의 상태를 관리 하거나 제어 할 수 있는 기능을 제공합니다. 또한 Device의 Firmware도 원격에서 Upgrade 및 Downgrade 하는 기능도 제공합니다.

Conculution

mbed OS를 사용하여 mbed에서 추구하는 보안 기능을 사용하기에는 W7500, W7500P의 한계를 확인 할 수 있었습니다. 우선 Cortex M0/M0+에서는 MPU(Memory Protected Unit)을 지원하지 않기 때문에 Secure code를 보장하기 위한 uVisor 기능을 사용할 수 없습니다.
또한 W7500, W7500P는 RAM size가 부족하여 mbed TLS와 같은 Communication Security의 사용도 어려운 것으로 판단 됩니다.

IoT 서비스가 활성화 되면서 경량 기기에 대한 다양한 기능적 요구가 증가함에 따라 OS 운영이 불가피하게 되었고, 인터넷 연결 특성으로 인한 보안 위협에 대한 대비도 강조되고 있습니다. 이에 위즈네트는 mbed OS와 mbed Security 및 mbed 이외의 다른 RTOS 및 Security를 사용할 수 있을 만큼의 퍼포먼스를 가진 MCU 라인업을 구축 하기 위한 방안을 장기적으로 고려 해 봐야 될 것 같습니다.

그래도 Connectivity 쪽으로 접근하면 희망적으로 WIZnet과 ARM mbed가 공생할 수 있는 포인트들이 있다고 생각합니다. 예를 들어, ST, Freescale 등 다른 회사의 MCU에 mbed OS를 사용하고 Wi-Fi 및 Ethernet Interface를 사용하고 싶은 경우 WizFi250/WizFi310 및 WIznet의 Ethernet Module들을 활용 할 수 있도록 가이드 할 수 있습니다.

단, 위의 모듈들이 mbed OS를 활용하는 고객들을 만족시키기 위해서는, WIZnet 모듈에 대한 mbed OS 라이브러리 지원 및 유지 보수 작업에 지금 보다 더 많은 시간을 투자 해야 한다고 생각합니다.
( *참고 : 이미 WizFi250과 Ethernet Module을 mbed platform 에서 사용할 수 있도록 라이브러리나 드라이버가 준비되어 있지만, 이는 상위 버전(ex, mbed OS5)과 호환이 안됨. 즉, mbed OS5를 위한 갱신된 라이브리 필요. )


참고자료 

- http://aqwerf.tistory.com/12

- http://www.insightsemicon.com/news/article.html?no=128289

- http://m.autoelectronics.co.kr/article/articleView.asp?idx=1904

- https://gigglehd.com/zbxe/newsreport/13542447

- http://blog.daum.net/_blog/BlogTypeView.do?blogid=0Idbt&articleno=7593753&categoryId=404972&regdt=20151005145502




저작자 표시
신고
이 댓글을 비밀 댓글로

공공데이터를 이용한 날씨 예보

Posted by 카이젠8501 카이젠8501
2016.11.03 15:46 IT 개발/Arduino

공공데이터를 이용한 날씨 예보

공공데이터 포털이란?

공공데이터포털(Data Portal)은 한국정보화진흥원에서 운영하는 공공데이터 통합제공 시스템이다. 대한민국 정부가 보유한 다양한 공공데이터를 개방하여 누구나 편리하고 손쉽게 활용할 수 있게 하는 것을 목적으로 한다. 행정자치부 공공정보정책과에서 관련 정책을 추진하고 있다.

2015년 8월 기준, 14,416개의 공공데이터가 공개되어 있다. 정부부처 및 산하기관에서 발행하는 백서, 주제별 전문가가 선정한 최신 이슈와 관련된 지식, 지역/분류체계/제공기관/활용방법 별 공공데이터 개방현황 등이 제공된다. 파일 다운로드 또는 Open API를 통해 이용할 수 있다.

참고 : 위키백과

동네 예보정보 조회 서비스 신청

동네예보정보조회서비스 신청 링크를 이용하시면, OpenAPI를 활용 신청 할 수 있다. 신청이 완료 되면, 일정 시간 후 가입 승인 메일을 받을 수 있다.

20161103_145553

동네 예보정보 조회 동작

동네 예보정보 조회 서비스는 크게 4가지 방식으로 데이터를 요청 할 수 있다.

  1. 초단기 실황 조회
    실황정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 조회 조건으로 자료구분코드, 실황값, 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능

  2. 초단기 예보 조회
    초단기예보정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 조회 조건으로 자료구분코드, 예보값, 발표일자, 발표시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능

  3. 동네 예보 조회
    동네예보 정보를 조회하기 위해 발표일자, 발표시각, 예보지점 X좌표, 예보지점 Y 좌표의 조회 조건으로 발표일자, 발표시각, 자료구분문자, 예보 값, 예보일자, 예보시각, 예보지점 X 좌표, 예보지점 Y 좌표의 정보를 조회하는 기능

  4. 예보 버전 조회
    동네예보정보조회서비스 각각의 오퍼레이션(초단기실황, 초단기예보, 동네예보)들의 수정된 예보 버전을 파악하기 위해 예보버전을 조회하는 기능

주의점은 각 동작 마다 필수로 요구하는 항목들이 있다. 예를 들어 초단기 실황 조회의 경우, 서비스 키, 발표일자, 발표시각, 예보지점 X좌표, 예보지점 Y 좌표 정보를 필수로 보내 줘야 한다.

동네 예보정보 조회 Request/ 형식

아래 그림은 초단기 실황 조회를 위한 Request 패킷 형식이다. 아래와 같은 포맷으로 데이터를 보내면 두번째 사진과 같은 응답을 받을 수 있다.

20161103_145554

20161103_145555

응답 받은 데이터를 카테고리별로 분석하면 하늘의 상태 및 강수량 등의 정보를 얻을 수 있다.
해당 카테고리 정보는 OpenAPI 사용자 활용 가이드를 참고 하기 바란다.


저작자 표시
신고
이 댓글을 비밀 댓글로