Go에서 BLE 제어로 PLAYBULB Candle의 조작을 해본다

8142 단어 5PlayBulbIoTBLE
어제의 Go Conference 2015 winter 수고하셨습니다. #gocon
어제 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"

 ・
 ・
 ・

이런 식으로 peripheralServiceCharacteristic 정보를 얻을 수 있습니다.

써 봅시다.


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 주위의 정보로 막히는 사람이 있다고 생각하기 때문에, 좀 더 나중에 가필하고 싶습니다.

    좋은 웹페이지 즐겨찾기