Skip to content

buildit-lab/buildthing-ble-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

36 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

BuildThingโ„ข ๏ธBeacon/IAQ SDK

BuildThing BeaconBuildThing Beacon

BuildThingโ„ข Beacon/IAQ SDK๋Š” Javascript๋กœ ๊ตฌํ˜„๋œ Cross Platform SDK ์ž…๋‹ˆ๋‹ค. Cordova ๋ฐ Node.js ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, Cordova ํ™˜๊ฒฝ์˜ iOS/Android, Electron ํ™˜๊ฒฝ์˜ Windows/MacOS/Linux ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. SDK์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • BuildThingโ„ข Beacon์˜ ์Šค์บ” ๋ฐ Advertising Packet ์ˆ˜์‹ 
  • BuildThingโ„ข Beacon ์—ฐ๊ฒฐ ๋ฐ ๋น„์ฝ˜ ๊ฐ’ ์„ค์ •
  • BuildThingโ„ข Beacon ์˜์—ญ์˜ ์ง„์ž…/์ดํƒˆ ์ด๋ฒคํŠธ ์ˆ˜์‹  (Monitoring)
  • BuildThingโ„ข Beacon ๊ณผ์˜ ๊ฑฐ๋ฆฌ ํ™•์ธ (Ranging)
  • BuildThingโ„ข IAQ ์Šค์บ” ๋ฐ Advertising Packet ์ˆ˜์‹ 

๋ชฉ์ฐจ

์„ค์น˜

BuildThingโ„ข Beacon/IAQ SDK์˜ ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” Node.js 8.x ์ด์ƒ์„ ํ•„์š”๋กœํ•ฉ๋‹ˆ๋‹ค.

$ npm install buildthing-ble-sdk

์‚ฌ์šฉ ๊ฐ€์ด๋“œ

iOS/Android ๋“ฑ Mobile ํ”Œ๋žซํผ์€ Codrova ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(e.g : Ionic Framework, PhoneGap ๋“ฑ)์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, MacOS/Windows ๋“ฑ Desktop ํ”Œ๋žซํผ์€ Electron ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Mobile

์˜์กด Cordova Plugin ์„ค์น˜

Ionic Framework, Phonegap ๋“ฑ Cordova ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ Root ๋””๋ ‰ํ† ๋ฆฌ์—์„œ Cordova CLI ๋ฅผ ํ†ตํ•ด ์˜์กด Cordova ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ์„ค์น˜ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

cordova-plugin-ble-central

BLE ํ†ต์‹ ์„ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž…๋‹ˆ๋‹ค.

# Cordova
$ cordova plugin add cordova-plugin-ble-central
# PhoenGap
$ phonegap cordova plugin add cordova-plugin-ble-central
# Ionic Framework
$ ionic cordova plugin add cordova-plugin-ble-central
cordova-plugin-background-mode

๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ ์Šค์บ”์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž…๋‹ˆ๋‹ค.

# Cordova
$ cordova plugin add cordova-plugin-background-mode
# PhoneGap
$ phonegap cordova plugin add cordova-plugin-background-mode
# Ionic Framework
$ ionic cordova plugin add cordova-plugin-background-mode
cordova-custom-config

iOS๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•„๋ž˜๊ณผ ๊ฐ™์ด cordova-custom-config ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  config.xml์— UIBackgroundModes ๊ด€๋ จ ์„ค์ •์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

# Cordova
$ cordova plugin add cordova-custom-config
# PhoneGap
$ phonegap cordova plugin add cordova-custom-config
# Ionic Framework
$ ionic cordova plugin add cordova-custom-config
config.xml
<platform name="ios">
  <allow-intent href="itms:*" />
  <allow-intent href="itms-apps:*" />
  <config-file parent="UIBackgroundModes" target="*-Info.plist">
    <array>
      <string>bluetooth-central</string>
    </array>
  </config-file>
</platform>

Cordova / PhoneGap

index.js

์•„๋ž˜์™€ ๊ฐ™์ด buildthing-ble-sdk ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. deviceready ์ด๋ฒคํŠธ ํ•จ์ˆ˜ (cordova ์ •์˜ ์ด๋ฒคํŠธ) ํ˜ธ์ถœ๋œ ์ดํ›„์— ์‚ฌ์šฉํ•ด์•ผ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

const { Manager } = require('buildthing-ble-sdk')

var app = {
   // Application Constructor
   initialize: function() {
     this.bleManager = null
     this.bindEvents();
   },
   // Bind Event Listeners
   //
   // Bind any events that are required on startup. Common events are:
   // 'load', 'deviceready', 'offline', and 'online'.
   bindEvents: function() {
       document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
   },
   // deviceready Event Handler
   //
   onDeviceReady: function() {
       this.receivedEvent('deviceready');
       // sdk test code
       this.bleManager = new Manager()
       this.bleManager.on('stateChange', function (state) {
         console.log(state)
         if(state === 'poweredOn') this.bleManager.startScan()
       }.bind(this))
   },
   ...
};

window.app = app
Webpack ๋˜๋Š” Browserify

Cordova, PhoneGap CLI ๋กœ ์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ ๋ฒˆ๋“ค๋Ÿฌ(Bundler)๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ, webpack, browserify ๋“ฑ์˜ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•˜์—ฌ bundle.js๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฏ€๋กœ webpack ๋˜๋Š” browserify ๋“ฑ๊ณผ ๊ฐ™์€ JS ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

$ npm install -g webpack

๋˜๋Š”

$ npm install -g browserify
Webpack

์•„๋ž˜์™€ ๊ฐ™์ด webpack.config.js ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

// webpack.config.js
module.exports = {
  entry: ['./www/js/index'],
  module: {...},
  output: {
		chunkFilename: '[name].js',
		filename: 'bundle.js',
		path: path.resolve(__dirname, './www/dist/js')
	},
  ...
}

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ JS ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋งํ•˜๊ณ  ./www/dist/js/bundle.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

$ webpack
Browserify

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ JS ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋งํ•˜๊ณ  ./www/dist/js/bundle.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

$ browserify ./www/js/index.js -o ./www/dist/js/bundle.js
index.html

์•„๋ž˜์™€ ๊ฐ™์ด index.html ์— ๋ฒˆ๋“ค๋ง ๋œ bundle.js๋ฅผ ์‚ฝ์ž… ํ•ฉ๋‹ˆ๋‹ค.

<!-- www/index.html -->

<html>
<head>
    ...
</head>
<body>
    <div class="app">
        <h1>PhoneGap</h1>
        <div id="deviceready" class="blink">
            <p class="event listening">Connecting to Device</p>
            <p class="event received">Device is Ready</p>
        </div>
    </div>
    <script type="text/javascript" src="cordova.js"></script>
    <!-- <script type="text/javascript" src="js/index.js"></script> -->
    <script type="text/javascript" src="dist/js/bundle.js"></script>
    <script type="text/javascript">
        app.initialize();
    </script>
</body>
</html>

Ionic 4 (Cordova + AngularJS)

Known Issues
iOS 12.2 ์—์„œ cordova-plugin-ionic-webview ์™€ cordova-plugin-background-mode ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถฉ๋Œ

Ionic Framework๋Š” iOS์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ WKWebView๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ buildthing-ble-sdk์˜ ์˜์กด ํ”Œ๋Ÿฌ๊ทธ์ธ์ธ cordova-plugin-background-mode ํ”Œ๋Ÿฌ๊ทธ์ธ์ด iOS 12.2 ์—์„œ ์ถฉ๋Œํ•˜๋Š” ์ด์Šˆ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 2019๋…„ 5์›” 10์ผ ๊ธฐ์ค€, ์•„์ง ๋ฒ„๊ทธ๊ฐ€ Fix ๋˜์ง€ ์•Š์•„ ์—ฐ๊ด€ ์ด์Šˆ์™€ ๊ฐ™์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ iOS ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ๋งŒ ์ •์ƒ ๋™์ž‘ ํ•ฉ๋‹ˆ๋‹ค.

Ionic 4 : ์˜ˆ์ œ

buildthing-ble-sdk ๋Š” ๋‹ค๋ฅธ Cordova ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ deviceready ์ด๋ฒคํŠธ ํ˜ธ์ถœ ์ดํ›„์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Ionic 4 ๋‚ด Angular JS Component ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ์—๋„ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด deviceready ์ด๋ฒคํŠธ ํ˜ธ์ถœ ์ดํ›„์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

// home.page.ts

import { Platform } from '@ionic/angular';
import { Manager } from 'buildthing-ble-sdk';

@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
public bleManager: Manager
  constructor(public plt: Platform) {
    // ionic ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ์‹œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ cordovad์˜ deviceready ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ๋ฐ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    this.plt.ready().then((readySource) => {
      this.bleManager = new Manager()
      this.bleManager.on('discover', function(beacon) { console.log(beacon) })
    });
  }
}

Desktop

์šด์˜์ฒด์ œ ๋ณ„ Node.js ๋ฐ Electron ๊ถŒ์žฅ ๋ฒ„์ „

๊ฐ ์šด์˜ ์ฒด์ œ ๋ณ„ ํ˜ธํ™˜๋˜๋Š” Node.js ๋ฐ Electron์˜ ๋ฒ„์ „์„ ํ™•์ธํ•œ ํ›„์— SDK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Windows/MacOS
Windows MacOS
Node.js v8.x, v10.x, v12.x v8.x, v10.x, v12.x
Electron v3.0.0 v3.0.0, v8.0.0
Linux
Ubuntu 16.04 (x86) Ubuntu 18.04 (x86) Ubuntu 19.10 (ARM64) raspbian-buster-lite (ARM64)
Node.js v8,x, v10.x, v12.x v8.x, v10.x, v12.x v8.x, v10.x, v12.x v8.x, v10.x, v12.x
Electron v3.0.0 v3.0.0 v3.0.0 ํ•ด๋‹น ์—†์Œ

์‚ฌ์ „ ์ค€๋น„

Windows

Powershell ๋˜๋Š” cmd.exe ์—์„œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ ๋’ค windows-build-tools๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

$ npm install --global --production windows-build-tools

Bluetooth 4.0 USB ์–ด๋Œ‘ํ„ฐ๋ฅผ ์œ„ํ•˜์—ฌ Zadig Tool์„ ํ†ตํ•ด WinUSB ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. WinUSB ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜๋Š” BuildThing beacon ๊ด€๋ฆฌ์ž ์•ฑ ์‚ฌ์šฉ์ž ๋งค๋‰ด์–ผ ๋‚ด Windows ์ง€์› ๋ธ”๋ฃจํˆฌ์Šค ์žฅ์น˜ ๋ฐ ์‹คํ–‰ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

Windows ํ™˜๊ฒฝ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋ธ”๋ฃจํˆฌ์Šค ์žฅ์น˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์žฅ์น˜ ์ด๋ฆ„ USB VID USB PID
Qualcomm Atheros QCA61x4 0CF3 E300
Broadcom BCM20702A0 0A5C 21E8
Broadcom BCM20702A0 19FF 0239
CSR(Cambridge Silicon Radio) 0A12 0001
ASUS BT400 0B05 17CB
Intel 6235 8087 07DA
Intel 7260 8087 07DC
Intel 7265 8087 0A2A
Intel 8265 8087 0A2B
Broadcom BCM20702A1 0489 E07A
Broadcom BCM2045A0 0A5C 6412
Belkin BCM20702A0 050D 065A

์œ„ ๋ชฉ๋ก์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ธ”๋ฃจํˆฌ์Šค ์žฅ์น˜์˜ ๊ฒฝ์šฐ, ๋ธ”๋ฃจํˆฌ์Šค ์žฅ์น˜์˜ USB VID, USB PID๋ฅผ ํ™•์ธํ•œ ํ›„์— ํ•ด๋‹น ๊ฐ’์„ ์•„๋ž˜์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

set BLUETOOTH_HCI_SOCKET_USB_VID=0x8087
set BLUETOOTH_HCI_SOCKET_USB_PID=0x0aaa
MacOS
  • Xcode๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
Linux (Ubuntu/Debian/Raspbian)
์˜์กด ํŒจํ‚ค์ง€ ์„ค์น˜
  • libbluetooth-dev ํŒจํ‚ค์ง€ ๋“ฑ์„ ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
$sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
  • ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๊ถŒํ•œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— root/sudo ์ปค๋งจ๋“œ๋กœ app ์„ ๋™์ž‘ ์‹œ์ปค๋‚˜, ๋‹ค์Œ ์ปค๋งจ๋“œ๋กœ node binary ์— ๊ถŒํ•œ์„ ์ฃผ์–ด์„œ app ์„ ์‹คํ–‰ ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
$sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

Node.js

buildthing-ble-sdk 1.1.4 ๋ฒ„์ „ ์ด์ƒ๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Node.js : ์˜ˆ์ œ
const buildthing = require('buildthing-ble-sdk')
const Manager = buildthing.Manager

const bleManager = new Manager()

bleManager.on('stateChange', (state) => {
  if (state === 'poweredOn') main()
})

bleManager.on('discover', (beacon) => {
  console.log(beacon)
})

function main() {
  bleManager.startScan()
}

Electron

์„ค์น˜
electron-packager

Electron ์—์„œ ์•ฑ์„ ๋นŒ๋“œ/ํŒจํ‚ค์ง• ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋…ธ๋“œ ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ Electron ํ”„๋กœ์ ํŠธ์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

$ npm install electron-packager --save-dev

์ž์„ธํ•œ ์„ค์ • ๋ฐ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ electron-packager ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

package.json

electron-packager ๋กœ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, package.json ๋‚ด dependencies์— buildthing-ble-sdk๋ฅผ ๋ช…์‹œํ•ด์•ผ๋งŒํ•ฉ๋‹ˆ๋‹ค.

{
  "name": "electron-quick-start",
  "version": "1.0.0",
  "description": "A minimal Electron application",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "build": "electron-packager . --overwrite"
  },
  "repository": "https://github.com/electron/electron-quick-start",
  "keywords": [
    "Electron",
    "quick",
    "start",
    "tutorial",
    "demo"
  ],
  "author": "GitHub",
  "license": "CC0-1.0",
  "devDependencies": {
    "electron": "^3.0.8",
    "electron-packager": "^13.1.1"
  },
  "dependencies": {
    "buildthing-ble-sdk": "^1.1.6"
  }
}
Windows ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • : ๋ถˆํ•„์š” ์˜์กด ๋ชจ๋“ˆ ์‚ญ์ œ ๋ฐ ์žฌ๋นŒ๋“œ ์ˆ˜ํ–‰ (SDK v1.1.5 ์ดํ•˜(buildthing-beacon-sdk) ํ•„์ˆ˜ ์‚ฌํ•ญ)

Electron์„ Windows ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Electron ํ”„๋กœ์ ํŠธ ๋‚ด /node_modules/ ์— ์„ค์น˜๋˜๋Š” noble-mac์„ ์‚ญ์ œํ•˜๊ณ  /node_modules/buildthing-beacon-sdk/package.json ๋‚ด dependencies ์—์„œ noble-mac์„ ์ œ๊ฑฐ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ node_modules/.bin/electron-rebuild ๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ, ์ดํ›„์— ์ •์ƒ์ ์œผ๋กœ electron ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Electron : ์˜ˆ์ œ

์•„๋ž˜์™€ ๊ฐ™์ด renderer.js(Renderer Process)์—์„œ buildthing-ble-sdk๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const { Manager } = require('buildthing-ble-sdk')

window.addEventListener("load", function(event) {
  var bleManager = new Manager()

  bleManager.on('discover', function(beacon) {
    console.log(beacon)
  })

  bleManager.on('stateChange', function (state) {
    if(state === 'poweredOn') bleManager.startScan()
  })

  window.bleManager = bleManager
});

Electron-vue : ์˜ˆ์ œ

Electron ๊ณผ vue.js ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉ ํ•˜๋Š” ๊ฒฝ์šฐ, electron-vue ๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๊ตฌ์„ฑ์„ ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด buildthing-ble-sdk๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// LandingPage.vue

<template>
  <div id="wrapper">
  ...
    <main>
      <div>hello buildthing Beacon</div>
    </main>
  </div>
</template>

<script>
  import SystemInformation from './LandingPage/SystemInformation'
  import { Manager } from 'buildthing-ble-sdk'

  export default {
    name: 'landing-page',
    components: { SystemInformation },
    mounted () {
      window.addEventListener("load", function(event) {
        var bleManager = new Manager()

        bleManager.on('discover', function(beacon) {
          console.log(beacon)
        })

        bleManager.on('stateChange', function (state) {
          if(state === 'poweredOn') bleManager.startScan()
        })

        window.bleManager = bleManager
      });
    }
  }
</script>

<style>
 ...
</style>

Electron-react : ์˜ˆ์ œ

Electron ๊ณผ React ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉ ํ•˜๋Š” ๊ฒฝ์šฐ, electron-react-boilerplate ๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ๊ตฌ์„ฑ์„ ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด buildthing-ble-sdk๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import React, { Component } from 'react';
import { Manager } from 'buildthing-ble-sdk';
import styles from './Home.css';

type Props = {};

export default class Home extends Component<Props> {
  props: Props;

  constructor(props) {
    super(props);
    window.addEventListener("load", () => {
       const bleManager = new Manager()

       bleManager.on('discover', (beacon) => {
         console.log(beacon)
       })

       bleManager.on('stateChange', (state) => {
         if(state === 'poweredOn') bleManager.startScan()
       })

       window.bleManager = bleManager
     });
  }

  render() {
    return (
      <div className={styles.container} data-tid="container">
        <h2>hello !! BuildThing Beacon</h2>
      </div>
    );
  }
}

๊ณตํ†ต Webpack ์„ค์ •

Webpack ๋ฏธ์‚ฌ์šฉ

Webpack์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด /node_modules/buildthing-ble-sdk/index.js๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

Mobile
// for Mobile (iOS, Android) (No Webpack Configuration)
var BuildThingBLE =  require('./dist/buildthing.ble.cordova.js')
module.exports = BuildThingBLE
MacOS
// for MacOS (No Webpack Configuration)
var BuildThingBLE = require('./dist/buildthing.ble.darwin.js')
module.exports = BuildThingBLE
Windows
// for Windows (No Webpack Configuration)
// for Windows - Node.js
// var BuildThingBLE = require('./dist/buildthing.ble.win32.node.js')
// for Windows - Electron
var BuildThingBLE = require('./dist/buildthing.ble.win32.electron.js')
module.exports = BuildThingBLE
Linux
// for Linux (No Webpack Configuration)
var BuildThingBLE = require('./dist/buildthing.ble.linux.js')
module.exports = BuildThingBLE

Webpack ์‚ฌ์šฉ

์•„๋ž˜์™€ ๊ฐ™์ด Webpack.config.js ํŒŒ์ผ์—์„œ alias ๋ฅผ ์„ค์ •ํ•˜์—ฌ ํ”Œ๋žซํผ ๋ณ„๋กœ ๋‹ค๋ฅธ buildthing-ble-sdk bundle ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

const path = require('path')
// Set Root Path
const ROOT_PATH = path.resolve(__dirname, '../')
const NODE_MODULE_PATH = '/node_modules/buildthing-ble-sdk/dist/'

//Target Platform
const CORDOVA_BUNDLE = 'buildthing.ble.cordova.js'
//const MACOS_BUNDLE = 'buildthing.ble.darwin.js'
//const WINDOWS_NODE_BUNDLE = 'buildthing.ble.win32.node.js'
//const WINDOWS_ElECTRON_BUNDLE = 'buildthing.ble.win32.electron.js'
//const LINUX_BUNDLE = 'buildthing.ble.linux.js'

//.. Webpack Config Object
    resolve: {
        alias: {
          'buildthing-ble-sdk': ROOT_PATH + NODE_MODULE_PATH + CORDOVA_BUNDLE
        }
    }

API ๋ฌธ์„œ

ํ”Œ๋žซํผ ๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์˜ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import { Manager } from 'buildthing-ble-sdk'
var manager = new Manager()
manager.on('discover', function(beacon){...})
manager.startScan() //์Šค์บ” ์‹œ์ž‘
manager.stopScan() //์Šค์บ” ์ข…๋ฃŒ

์ƒ์„ธํ•œ API๋Š” ์•„๋ž˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. API ๋ฌธ์„œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Scan Response

BuildThing Beacon

BuildThing beacon ์Šค์บ” ์ˆ˜ํ–‰ ์‹œ, Scan Response๋กœ ์ˆ˜์‹ ๋˜๋Š” Service UUID์™€ Service ๋ณ„ ์ˆ˜์‹  ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ Scan Response๋Š” BuildThing, iBeacon, Eddystone ๋ชจ๋“œ ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ Service UUID ์ˆ˜์‹  ๊ฐ’ ๋น„๊ณ 
Device Information & Firmware Version 0x180A 0x983006 ๋˜๋Š” 0x3006XX 0x983006 : ํŽŒ์›จ์–ด v1.0, 0x3006XX : ํŽŒ์›จ์–ด vXX/10 (์˜ˆ : 0x300611์€ ํŽŒ์›จ์–ด v1.1)
Mac Address 0xADD0 Mac Address -

BuildThing IAQ

BuildThing IAQ ์Šค์บ” ์ˆ˜ํ–‰ ์‹œ, Scan Response๋กœ ์ˆ˜์‹ ๋˜๋Š” Service UUID์™€ Service ๋ณ„ ์ˆ˜์‹  ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ Service UUID ์ˆ˜์‹  ๊ฐ’ ๋น„๊ณ 
Device Information & Firmware Version 0x180A 0x3700XX 0x3700XX: ํŽŒ์›จ์–ด vXX (์˜ˆ : 0x370011์€ ํŽŒ์›จ์–ด v1.1)
Mac Address 0xADD0 Mac Address -

Advertising Packet

BuildThing Beacon

BuildThing beacon์€ BuildThing ๋ชจ๋“œ ์™ธ iBeacon, Eddystone ๋ชจ๋“œ์˜ Advertising Packet ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Advertising Packet์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ ๋ชจ๋“œ ๋ณ„ UUID ๋ฐ Service UUID๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น„์ฝ˜ ๋ชจ๋“œ UUID Service UUID
BuildThing - 0xBCBC
iBeacon 0x0b2b0848-205f-11e9-ab14-820316983006 -
Eddystone - 0xFEAA

๋น„์ฝ˜ ๋ชจ๋“œ ๋ณ„ ์ˆ˜์‹ ๋˜๋Š” Advertising Packet Format์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. BuildThing beacon Advertising Packet Format

BuildThing IAQ

BuildThing IAQ์˜ Advertising Packet์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์œ„ํ•œ Service UUID๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น„์ฝ˜ ๋ชจ๋“œ UUID Service UUID
IAQ - 0xBCBC

์ˆ˜์‹ ๋˜๋Š” Advertising Packet Format์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. BuildThing IAQ Advertising Packet Format

Connection Service

์•„๋ž˜ Connection Service UUID๋ฅผ ํ†ตํ•˜์—ฌ BuildThing beacon Connection Service์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ Service UUID
Connection Service 6E400001-B5A3-F393-E0A9-E50E24DCCA9E

Connection์ด ์™„๋ฃŒ๋˜๋ฉด ์•„๋ž˜ 2๊ฐœ์˜ Characteristic์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ Characteristic UUID ์†์„ฑ ๋น„๊ณ 
๋น„์ฝ˜ ๊ฐ’ ์„ค์ • 6E400002-B5A3-F393-E0A9-E50E24DCCA9E Read, Write ๋น„์ฝ˜ ๊ฐ’ ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„์ฝ˜ ๊ฐ’ ์„ค์ • ๊ฒฐ๊ณผ 6E400003-B5A3-F393-E0A9-E50E24DCCA9E Notify ๋น„์ฝ˜ ๊ฐ’ ์„ค์ • ์™„๋ฃŒ ํ›„ Notify๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์ฝ˜ ๊ฐ’ ์„ค์ • Characteristic์— ๊ฐ’์„ Writeํ•˜์—ฌ ๋น„์ฝ˜ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ์‹œ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ „์†ก ํŒจํ‚ท ํฌ๋งท์œผ๋กœ Write ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ดˆ Password ๊ฐ’์€ 000000 ์ž…๋‹ˆ๋‹ค.

BuildThing Beacon

BuildThing beacon Connection Service

BuildThing IAQ

BuildThing IAQ Connection Service

์ฐธ๊ณ  ์‚ฌํ•ญ

๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ํ…Œ์ŠคํŠธ

๋น„์ฝ˜๊ณผ ๊ธฐ๊ธฐ ๊ฐ„์˜ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์— ๋Œ€ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋œ ๊ธฐ๊ธฐ ๋ชจ๋ธ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ๋ชจ๋ธ๋ช…
iOS iPhone8, iPhoneX, iPhoneXS, iPad 9.7 5์„ธ๋Œ€
Android Galaxy S8, Galaxy S9, Galaxy S10, Galaxy Note 9

๊ณ ๊ฐ ๋ฌธ์˜

Github Issue ์™ธ ๊ธฐํƒ€ ๋ฌธ์˜ ์‚ฌํ•ญ์€ [email protected]๋กœ ๋ฌธ์˜ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

About

BuildThing beacon Cross Platform SDK

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •