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기본값은
PlayBulb1.2 색 변경
Characteristic UUID: 0x
FFFC1.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.)