오렌지보드 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카 제어해보기


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

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
이 댓글을 비밀 댓글로

WizFi210/220에서 Raw Packet 송/수신 하기

Posted by 카이젠8501 카이젠8501
2014.09.23 10:24 IoT/Wi-Fi Module

WizFi210/220에서 Raw Packet 송/수신 하기

1. Check Firmware & Hardware version of WizFi210/220

WizFi210/220에서 Raw Packet을 사용하기 위해서는 WizFi210/220의 소프트웨어 버전이 1.2.0.3(S2WEAP) 이상 인지를 확인 해야 한다.
또한 1.2.0.3은 WizFi210/220의 하드웨어 버전 1.0.1 이상에서만 동작 한다.

2. Test Environment

이 예제는 WizFi210/220에서 Raw Packet을 사용하는 방법을 설명한다. 이 예제에서는 WizFi210이 PC에게 Raw Packet으로 “Hi WizFi210”이라는 메시지를 송신한다.
아래는 테스트 환경을 정리한 그림이다.

3. AT Command Set of WizFi210

AT
[OK]

AT+WD
[OK]

AT+WWPA=qazxswedc
[OK]

AT+NDHCP=1
[OK]

AT+WA=WiznetKaizen
    IP              SubNet         Gateway   
 192.168.201.21: 255.255.255.0: 192.168.201.1 
[OK]

AT+NRAW=2
[OK]

<Esc>R:<Length>:<DstAddr><SrcAddr><EtherType><Raw-Payload>

Length is size of DstAddr, SrcAddr, EtherType and Payload.

4. Python Script for sending raw packet on WizFi210

아래 경로를 이용하면 Python으로 작성한 스크립트를 다운로드 할 수 있다. 이 스크립트는 WizFi210/220에 Serial로 명령을 입력하고 Raw Packet으로 “Hi WizFi210”을 송신하는 예제 이다.
https://github.com/Wiznet/ScriptForUsingRawPacketOnWizFi210

5. Screenshot when receive packet on PC


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

OpenSSL 인증서 만들기 & WizFi210으로 SSL Server로 접속하기 위한 방법

Posted by 카이젠8501 카이젠8501
2014.05.05 15:43 IoT/Wi-Fi Module
본 포스팅은 OpenSSL에서 인증서를 생성하여 PC(SSL Server)와 임베디드 디바이스(WizFi210) 간에 SSL 통신을 하기 위한 예제 이다.
본 글은 크게 2개의 섹션으로 나뉘며, 첫번째는 OpenSSL을 이용하여 인증서를 만드는 방법을, 두번째는 OpenSSL Server와 Device간의 통신을 위한 설정 방법을 설명 한다.

Create Root CA Certification
    1.  Create CA Private Key ( pass phrase : password )
            - openssl genrsa -des3 -out ca.key 1024
           

    2. Create CA csr key ( pass phrase : password )
            - openssl req -new -key ca.key -out ca.csr
           

    3. Create Root CA Certificate ( pass phrase : password )
           openssl x509 -req -days 1280 -in ca.csr -signkey ca.key -out ca.crt
           

    4. Delete password in Private Key ( pass phrase : password )
      openssl rsa -in ca.key -out ca_key.pem
          

Create Server Certification
    1. Create Server Private Key
      openssl genrsa -des3 -out server.key 1024
        

    2. Create Server csr Key
      openssl req -new -key server.key -out server.csr

    3. Create Server Certificate
      openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA ca.crt -CAkey ca.key -CAcreateserial -days 365

    4. Delete password in Server Private Key
      openssl rsa -in server.key -out server_key.pem

Create Client Certification
    1. Create Client Private Key
       openssl genrsa -des3 -out client.key 1024

    2. Create csr Key
      openssl req -new -key client.key -out client.csr

    3. Create Client Certificate
       openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA server.crt -CAkey server.key -CAcreateserial -days 365

    4. Delete Password in Client Private Key

      openssl rsa -in client.key -out client_key.pem



Covert PEM to DER
WizFi210 needs "DER" format of certificate and key. so we have to change these format to "DER" as below.





Run Openssl SSL Server
openssl s_server -accept 6000 -cert server.crt -key server.key -CAfile ca.crt -verify 0
( verify에 0을 주지 않으면, SSL Server에서 Certificate Request를 보내지 않음 )



Run WizFi210 SSL Client

Register client certification to WizFi210 as below. There are two method for register client certification.
First method is using AT Command of WizFi210. ( AT+CERTADD )
For more information about this command, Refer to this document. ( http://wiznet.co.kr/Admin_Root/UpLoad_Files/BoardFiles/WizFi210_PG_V130E.pdf )

Second method is using WIZSmartScript as below.
This mehtod is same with first. But It is more easy to use WIZSmartScript.



Connect to SSL Server on WizFi210
It must set time using AT+SETTIME command for connecting to SSL server.


Delete Certificate
This is method for deleting certificate on WizFi210.






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