BLE to Ethernet Thin Gateway 만들기

0
1551

본 포스팅에서는 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을 다운로드 한 후,해당 파일들을 아래 경로로 복사 한다.

 

Data Sender

(1) 개발 환경 설정

Import Existing Project

  • [import]-[Existing Projects into Workspace]
  • Select root directory

 

(2) Upload SoftDevice

20160112_105834

(3) Upload Application

20160112_105849

Data Collector

(1) 개발 환경 설정

Import Existing Project

  • [import]-[Existing Projects into Workspace]
  • Select root directory

 

(2) Upload SoftDevice

20160112_105310

(3) Upload Application

20160112_105337

주요 코드 설명(Data Collector)

  • 1~2 : Cloud Service에 Publish 하기 위한 Timer Interval 설정 ( 300ms ) 및 초기화
  • 16 : WIZ550io를 제어하기 위한 SPI Interface 초기화
  • 17 : Ethernet 초기화 ( IP 주소 설정 및 네트워크 설정 )
  • 19 ~ 20 : mailbox 초기화 ( HR Event와 BAS Event가 발생하면 해당 값을 mailbox로 보관 )
  • 22 ~ 24 : BLE Central Stack 초기화 BLE Scan을 위한 초기화 작업
  • 26 ~ 27 : HR(Heart rate)과 BAS(Battery) collector 초기화
  • 32 : BLE Peripheral Scan 및 Connection Scan
  • 34 ~ 37 : Publish Timer 생성 및 Start

  • 1 ~ 2  : Mailbox QUEUE SIZE 설정
  • 4 ~ 14: Heart rate & Battery Level 데이터 포맷 초기화
  • 16 ~ 17 : Mailbox 초기화
  • 19 ~ 24 : dweet.io에 데이터를 송신하기 위한 정보

  • 300ms 마다 publish_data_handler가 수행되며 dweet.io에 TCP 연결 후 Battery Data 혹은 Heart Rate Data를 송신한다.
  • publish_data_handler가 수행되면서 보관되어 있는 mailbox의 데이터를 꺼내서 Ethernet으로 송신한다.

  • 20 ~ 26 : Heart Rate Notification Event가 발생하면 mailbox에 data를 보관
  • 59 ~ 65 : Battery Notification Event가 발생하면 mailbox에 data를 보관
  • 위 코드에서 mailbox에 보관하는 data는 publish_data_handler가 수행되면서 꺼내서 Ethernet으로 송신한다.

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

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

20160112_125136

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

NO COMMENTS