에디슨에서 SensorTag에 연결하기 위해서는 먼저 블루투스 기능을 활성화 시켜줘야 한다. (TI SensorTag에 대한 소개는 이전 포스트 참조)
# rfkill unblock bluetooth
# hciconfig hci0 up
# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
1: brcmfmac-wifi: wlan
Soft blocked: no
Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
Soft blocked: no
Hard blocked: no
3: hci0: bluetooth
Soft blocked: no
Hard blocked: no
#
위와 같이 출력되면 블루투스를 사용할 수 있게 된 것이다. 다음은 주변의 SensorTag를 검색한다. 검색을 하기 전에 SensorTag 왼쪽 옆면에 있는 pairing 버튼을 눌러준다. 그러면 녹색 LED가 빠르게 점멸할것이다. (빨간색 실리콘 케이스를 씌워놓으면 LED 점멸은 보이지 않음)
# hcitool lescan
LE Scan ...
D0:39:72:D3:4A:AF (unknown)
D0:39:72:D3:4A:AF Bean
EC:C3:09:E2:18:A4 (unknown)
BC:6A:29:C3:54:33 (unknown)
BC:6A:29:C3:54:33 SensorTag
^C#
# hcitool lecc BC:6A:29:C3:54:33
Connection handle 64
위에서 형광색으로 된 부분은 검색에서 발견한 SensorTag의 MAC address(여기서는 BC:6A:29:C3:54:33)를 넣어주면 된다. 이제 gatttool을 사용해 직접 명령을 주고받아 본다. (에디슨에 디폴트로는 gatttool은 설치되어 있지 않다. 설치하는 방법은 '에디슨에 gatttool 설치' 참조)
# gatttool -b BC:6A:29:C3:54:33 --interactive
[BC:6A:29:C3:54:33][LE]> connect
Attempting to connect to BC:6A:29:C3:54:33
Connection successful
[BC:6A:29:C3:54:33][LE]> char-read-hnd 0x25
Characteristic value/descriptor: 00 00 00 00
[BC:6A:29:C3:54:33][LE]> char-write-cmd 0x29 01
[BC:6A:29:C3:54:33][LE]> char-read-hnd 0x25
Characteristic value/descriptor: 52 ff d8 0b
핸들 0x25는 온도 센서값을 의미한다. 처음 읽을때는 00이었지만 센서를 활성화(0x29에 1을 써줌)시킨 후에 다시 읽어보면 현재 센서 값이 읽혀진다. 핸들에 대한 자세한 정보는 http://processors.wiki.ti.com/index.php/SensorTag_User_Guide#Gatt_Server 를 참조하면 된다.
[BC:6A:29:C3:54:33][LE]> char-write-cmd 0x26 0100
Notification handle = 0x0025 value: 42 ff d8 0b
Notification handle = 0x0025 value: 42 ff d8 0b
Notification handle = 0x0025 value: 40 ff d8 0b
Notification handle = 0x0025 value: 3f ff d8 0b
Notification handle = 0x0025 value: 41 ff d8 0b
Notification handle = 0x0025 value: 3c ff d8 0b
Notification handle = 0x0025 value: 3b ff d8 0b
Notification handle = 0x0025 value: 42 ff dc 0b
Notification handle = 0x0025 value: 39 ff dc 0b
Notification handle = 0x0025 value: 3e ff dc 0b
[BC:6A:29:C3:54:33][LE]> char-write-cmd 0x26 0000
[BC:6A:29:C3:54:33][LE]>
온도센서 값을 지속적으로 읽고 싶으면 0x26에 0100을 써 주면 위와 같이 지속적으로 센서값이 리포트된다. 리포팅을 끝내려면 0x26에 0000을 써 주면 된다.
푸쉬버튼 입력 같은 경우는 버튼의 상태를 지속적으로 폴링하는건 매우 비효율적이기 때문에 버튼이 눌린걸 notify 하도록 설정할 수 있다. 아래와 같이 request하면 푸쉬버튼의 상태가 바뀔때 마다 상태값이 통보된다.
[BC:6A:29:C3:54:33][LE]> char-write-req 0x67 80
Characteristic value was written successfully
[BC:6A:29:C3:54:33][LE]> char-write-req 0x60 0100
Characteristic value was written successfully
Notification handle = 0x005f value: 02
Notification handle = 0x005f value: 00
Notification handle = 0x005f value: 01
Notification handle = 0x005f value: 00
[BC:6A:29:C3:54:33][LE]>
왼쪽 버튼이 bit1, 오른쪽 버튼이 bit0이므로 위에서는 먼저 왼쪽 버튼을 눌렀다 뗀 후, 오른쪽 버튼을 눌렀다 뗀 것이다. 버튼이 둘 다 눌리면 03이 통보된다.
이런식으로 SensorTag를 에디슨에 연결해 다양한 동작을 할 수 있다. 여러개의 SensorTag를 집안 곳곳에 설치해 놓고 에디슨에서 센서값들을 읽어들어 IoT 모니터링 시스템을 구축하는등의 다양한 응용이 가능하다.
2015년 3월 11일 수요일
2015년 1월 22일 목요일
Edison을 iBeacon으로 사용하기
인텔 에디슨 보드에는 블루투스 모듈이 기본으로 들어있기 때문에 에디슨을 iBeacon 발신기로 사용할 수 있다.
디폴트로 에디슨에는 블루투스가 비활성화 되어 있다.
# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
1: brcmfmac-wifi: wlan
Soft blocked: no
Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
Soft blocked: yes
Hard blocked: no
그러므로 먼저 블루투스를 활성화 시켜줘야 한다.
# rfkill unblock bluetooth
# hciconfig hci0 up
# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
1: brcmfmac-wifi: wlan
Soft blocked: no
Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
Soft blocked: no
Hard blocked: no
3: hci0: bluetooth
Soft blocked: no
Hard blocked: no
블루투스가 활성화 되고 hci0 인터페이스가 만들어진걸 볼 수 있다.
이제 패키지를 추가 설치 해 줘야 한다. 먼저 /etc/opkg/base-feeds.conf 파일을 에디터에서 오픈한 다음 아래 내용을 추가한 다음 저장해준다.
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
추가한 내용을 저장했으면 아래 명령으로 opkg를 업데이트 한 후 필요한 패키지를 설치해 준다.
# opkg update
# opkg install bluez5-dev
# npm install -g async
# npm install noble
# npm install bleno
여기까지 진행했으면 에디슨을 iBeacon 발신기로 설정하는데 필요한 모든 준비가 끝난 것이다.
이제 실제 iBeacon으로 동작시켜 보겠다.
# node
> bleno = require('bleno')
{ state: 'unknown',
...
rssiUpdate: [Function] } } }
> bleno.startAdvertisingIBeacon('e2c56db5dffb48d2b060d0f5a71096e0', 0, 0, -59);
undefined
>
에디슨은 UUID e2c56db5-dffb-48d2-b060-d0f5a71096e0, Major 0, Minor 0인 iBeacon 으로 동작하고 있다.
실제 동작하고 있는지 확인해 보도록 하겠다. 여기서는 아이폰에서 Locate 라는 앱을 사용하지만 iBeacon을 검색할 수 있는 앱이면 아무거나 상관 없다.
Locate 앱을 실행했을 때 초기화면이다.
여기서 Locate iBeacons 를 선택한다.
위의 화면은 이미 iBeacon UUID를 설정해 놓았기 때문에 Apple AirLocate .... 라는 항목이 보이지만 기본적으로는 보이는 beacon이 없을 것이다. 먼저 에디슨 beacon 정보를 설정해줘야 하기 때문에 Tap here to configure visible iBeacon UUIDs. 를 선택한다.
이런 목록이 나오면 우측 상단의 '+' 버튼을 눌러 새 항목을 추가한다. (위의 화면은 이미 설정을 해 놓은 상태라 Edison beacon 같은 항목이 보이고 있다)
여기에 자신의 에디슨 beacon 정보를 넣어주면 된다.
bleno.startAdvertisingIBeacon('e2c56db5dffb48d2b060d0f5a71096e0', 0, 0, -59); 에서 파라미터는 순서대로 UUID, Major, Minor, RSSI이므로 각각의 값을 제 위치에 넣어주면 된다. 저장하고 나와서 확인해 보면 이제 자신의 에디슨 iBeacon이 목록에 보일 것이다.
목록에서 Apple AirLocate E2C56DB5 를 선택하면 그에 대한 상세한 정보를 확인할 수 있다.
디폴트로 에디슨에는 블루투스가 비활성화 되어 있다.
# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
1: brcmfmac-wifi: wlan
Soft blocked: no
Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
Soft blocked: yes
Hard blocked: no
그러므로 먼저 블루투스를 활성화 시켜줘야 한다.
# rfkill unblock bluetooth
# hciconfig hci0 up
# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
1: brcmfmac-wifi: wlan
Soft blocked: no
Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
Soft blocked: no
Hard blocked: no
3: hci0: bluetooth
Soft blocked: no
Hard blocked: no
블루투스가 활성화 되고 hci0 인터페이스가 만들어진걸 볼 수 있다.
이제 패키지를 추가 설치 해 줘야 한다. 먼저 /etc/opkg/base-feeds.conf 파일을 에디터에서 오픈한 다음 아래 내용을 추가한 다음 저장해준다.
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32
추가한 내용을 저장했으면 아래 명령으로 opkg를 업데이트 한 후 필요한 패키지를 설치해 준다.
# opkg update
# opkg install bluez5-dev
# npm install -g async
# npm install noble
# npm install bleno
여기까지 진행했으면 에디슨을 iBeacon 발신기로 설정하는데 필요한 모든 준비가 끝난 것이다.
이제 실제 iBeacon으로 동작시켜 보겠다.
# node
> bleno = require('bleno')
{ state: 'unknown',
...
rssiUpdate: [Function] } } }
> bleno.startAdvertisingIBeacon('e2c56db5dffb48d2b060d0f5a71096e0', 0, 0, -59);
undefined
>
에디슨은 UUID e2c56db5-dffb-48d2-b060-d0f5a71096e0, Major 0, Minor 0인 iBeacon 으로 동작하고 있다.
실제 동작하고 있는지 확인해 보도록 하겠다. 여기서는 아이폰에서 Locate 라는 앱을 사용하지만 iBeacon을 검색할 수 있는 앱이면 아무거나 상관 없다.
Locate 앱을 실행했을 때 초기화면이다.
이런 목록이 나오면 우측 상단의 '+' 버튼을 눌러 새 항목을 추가한다. (위의 화면은 이미 설정을 해 놓은 상태라 Edison beacon 같은 항목이 보이고 있다)
여기에 자신의 에디슨 beacon 정보를 넣어주면 된다.
bleno.startAdvertisingIBeacon('e2c56db5dffb48d2b060d0f5a71096e0', 0, 0, -59); 에서 파라미터는 순서대로 UUID, Major, Minor, RSSI이므로 각각의 값을 제 위치에 넣어주면 된다. 저장하고 나와서 확인해 보면 이제 자신의 에디슨 iBeacon이 목록에 보일 것이다.
목록에서 Apple AirLocate E2C56DB5 를 선택하면 그에 대한 상세한 정보를 확인할 수 있다.
Labels:
블루투스,
손에 잡히는 IoT,
인텔,
인텔 에디슨,
인텔 IoT,
BLE,
bluetooth low energy,
edison,
Edison BLE,
edison bluetooth,
iBeacon,
Intel,
intel edison,
Intel IoT,
Internet of Things,
IoT
피드 구독하기:
글 (Atom)


