Go에서 BLE 제어로 PLAYBULB Candle의 조작을 해본다
어제 GoCon에서 BLE 이야기를했습니다 @ 0 비스케.
어제 슬라이드는 여기입니다.
Go로 IoT ~BLE 입문해 본 이야기~
오늘은 어제의 이야기를 응용해 충동 구입한 PlayBulb를 사용해 보고 싶습니다.
PlayBulb Candle이란?
스마트 폰에서 제어 가능한 빛나는 촛불 스탠드입니다. BLE로 제어할 수 있습니다.
우에노의 요도바시 카메라로 충동 사 보았습니다.
2700엔 정도로 살 수 있었습니다.
Amazon PlayBulb Candle
프로그램 가능한 조명이라고 하면 Philips Hue가 유명합니다만 1개당 7000엔 정도로, 전구 한 개로는 높다고 하는 인상입니다.
Hue의 대체가 될지 검증하고 싶다고 요도바시 카메라 내에서 생각했기 때문에 사 보았습니다.
Service 및 Characteristic의 UUID 조사
GATT에 대해 모르는 사람은 여러가지 조사해 봅시다. 또는 어제 #gocon 시간 슬라이드를 보십시오.
htp // // 암 g. 하테나 bぉg. 코m/엔트리/2014/08/09/195246
API 같은 저장소가 있지만 ...
여기가 별로 도움이되지 않습니다.
이쪽이 참고가 되었습니다.
웹 블루투스 놀라운 htps //w w. 코데- bs. 이오 / 코데 bs / 칸 d ぇ b ぅ와 th / # 0
Node.js 구현 (시도하지 않음) htps : // 기주 b. 이 m / 다니에 ls 미 th-에 / p ぁ y 부 lb ぃ ゔ
1. 서비스 UUID
서비스 UUID: 0x
FF02
이 값은 PlayBulb Candle 제어를 위한 서비스 UUID인 것 같습니다.
1.1 Local Name(가젯 이름) 변경/로드
Characteristic UUID: 0x
FFFF
기본값은
PlayBulb
1.2 색 변경
Characteristic UUID: 0x
FFFC
1.3 효과 변경
Characteristic UUID: 0x
FFFB
※다른
Characteristic UUID
를 알면 추기하고 싶습니다.Go에서 제어
PayPal이 공개하고 있는 gatt용의 패키지를 사용하는 것이 좋은 느낌입니다.
htps : // 기주 b. 코 m / 파 y 파 l / 갑 t
htps: //아이 c. rg/기테우 b. 코 m / 파 y 파 l / 갑 t
Peripheral의 UUID 조사
discoverer.go
를 움직입니다.htps : // 기주 b. 코 m/파 y파 l/갓 t/bぉb/마s테 r/에ぁmpぇs/ぢs코ゔぇ레r. 고
$ go run discover.go
・
・
・
Peripheral ID:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, NAME:()
Local Name = PlayBulb
TX Power Level = -2
Manufacturer Data = [77 73 80 79 87]
Service Data = []
・
・
・
주변 기기 수만 나옵니다.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
부분은 peripheral의 uuid입니다. Local Name에서 이름이 같은 것을 찾습니다.연결해보기
또 샘플을 움직여 봅시다.
explorer.go
입니다.htps : // 기주 b. 이 m/파 y파 l/가 t/bぉb/마s r/에ㅁmpぇs/에 xpㄉ레 r. 고
에 방금 조사한 것을 넣습니다.
$ go run explorer.go <Peripheral ID>
・
・
・
Service: ff02
Characteristic 2a37 (Heart Rate Measurement)
properties notify
Descriptor 2902 (Client Characteristic Configuration)
value 0000b2b3dd0c8f01000000b516000cfc6500ea09 | "\x00\x00\xb2\xb3\xdd\f\x8f\x01\x00\x00\x00\xb5\x16\x00\f\xfce\x00\xea\t"
Characteristic fff8
properties read
2015/12/07 20:17:03 Unhandled event: xpc.Dict{"kCBMsgId":81, "kCBMsgArgs":xpc.Dict{"kCBMsgArgConnectionInterval":37, "kCBMsgArgConnectionLatency":0, "kCBMsgArgSupervisionTimeout":500, "kCBMsgArgDeviceUUID":xpc.UUID{0xe6, 0x57, 0xb9, 0x78, 0x7d, 0x53, 0x47, 0xc1, 0x87, 0x30, 0xa4, 0xd0, 0xb8, 0xa0, 0x59, 0x5f}}}
value 0000000000000000000000000000000000000000 | "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
Characteristic fff9
properties read write
value 000000ffffffff000000000000 | "\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00"
Characteristic fffa
properties read writeWithoutResponse
value 00 | "\x00"
Characteristic fffb
properties read writeWithoutResponse
value 00000000ff002300 | "\x00\x00\x00\x00\xff\x00#\x00"
Characteristic fffc
properties read writeWithoutResponse
value 00ff0000 | "\x00\xff\x00\x00"
・
・
・
이런 식으로
peripheral
의 Service
및 Characteristic
정보를 얻을 수 있습니다.써 봅시다.
WriteCharacteristic
라는 메서드가 있습니다.여기에 값을 쓰면 OK입니다.
explorer.go의 79-80 행 곳에 다음 코드를 넣어 보았습니다.
explorer.go
・
・
・
if c.UUID().String() == "fffc" {
err := p.WriteCharacteristic(c, []byte("\x00\xff\x00\x00"), true)
if err != nil {
fmt.Printf("Failed to discover descriptors, err: %s\n", err)
continue
}
}
・
・
・
gist에게 주겠습니다.
h tps://의st.魏 튜 b. 작은 m/n0 비스케/8 엣 d파 29176d9C41c2 에어
\x00\xff\x00\x00
를 쓰지만 첫 번째 00은 고정입니다. 그 후가 색(RGB)이 됩니다.\x00\xff\x00\x00
\x00\x00\xff\x00
\x00\x00\x00\xff
같은 느낌입니다.
실행하면 촛불 색상이 빨간색으로 바뀝니다
요약
PlayBulb가 프로그램 제어 할 수있었습니다.
빨리 Drone의 기사를 쓰지 않는다고 생각하면서도.
디버깅이 쉽다(드론은 사무실에서 날리면 울사이...w) 쪽으로 진행해 보았습니다.
여러가지 BLE 주위의 정보로 막히는 사람이 있다고 생각하기 때문에, 좀 더 나중에 가필하고 싶습니다.
Reference
이 문제에 관하여(Go에서 BLE 제어로 PLAYBULB Candle의 조작을 해본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/n0bisuke/items/d3966b11b2e9143d6651텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)