日記
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. 写真のような画像は画像生成AIもしくは念写によるものです.
2014-10-21
BLEタグのボタンが押されたことをアプリから検出する
2014-10-10 の続き.BLEタグ→スマホへの通知を試しておきたかったので.
BSHSBTPT01BKの商品説明を読むと,ボタンを押すとiPhoneが鳴るそうです. iPhone持ってないのでわからないですが,おそらくBLEのNotifyをアプリで受け取っているのだと想像出来ます. 消費電力から考えても,SPPでコネクション張って待ち受けてるなんてことは無いはず.
これをAndroidでもやりたいので,少し調べてみる.
BLEデバイスがどんな機能を持っているかは,GATT(Generic Attribute Profile)で調べられる.(iPhoneでもAndroidでもdiscoverServicesというメソッドが用意されている)
ServiceのUUIDが取得できるので,あとはUUIDからサービス探すときは,https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspxをみると良い.
UUIDの最初の4バイトがServiceの種類を表している.
たとえば,BSHSBTPT01BKの例だと,
- Generic Access(1800) デバイス名取得したり
- Link Loss(1803) 接続が切れたときの挙動を設定する
- Immediate Alert(1802) アラーム鳴らしたり
- Tx Power(1804) BLEの送信のパワー
- Battery Service(180f) バッテリーの状態
みたいなサービスがある.
あとは,Serviceスの下に,データをやり取りするCharacteristicsがぶら下がっている.
……そして,ボタンの状態を取れそうなサービスが無い.
GATTで取得できないサービスある可能性もあるけれど, iPhoneのCore Bluetooth APIでアプリ作ったりしてることを考えると, 普通にCharacteristicsを見えるようにしておく気がする.
とりあえず,Notify受け取れそうなCharacteristicsが Battery Power State(00002a1a)くらいしか無いのでそいつに対して,setCharacteristicNotificationしたらNotifyが来た.
1バイト目に 0/1でボタンが押されてるかどうかが入ってる.2バイト目はよくわからず.
Androidだと,onCharacteristicChangedとかいうメソッド名だけど, 値が変わっていなくてもデバイスからデータが来ればとりあえず呼ばれているように見える.
なぜPower State?と思ったけど,確かに,電源ボタンでもあるし,あっているような気もするけれど...?
ほかのBLEタグも同じな気がしないでもないので,これが普通なのかもしれない.
2014-10-19
ICPC 2014 アジア地区予選に行ってきました
昨年からドワンゴもスポンサーやってるので行ってきました.
今年はオリンピック青少年センターです. 2007年に参加者として出た時と同じ場所.

ICPCなので,とりあえず風船の写真.
やっぱ東大強いなあ. 信大の後輩は国内予選で落ちてしまったっぽい.残念.
2014-10-14
風邪引いたので会社休んで一日寝る. 20時間くらい寝ていた. 薬飲んで寝てたら熱は下ったけど,とてもだるい...
2014-10-13
休みだけど午前中は仕事する. 午後は出かけたけど,急に体調悪くなって急いで家に帰る... 案の定熱があったのでとりあえず寝る.
2014-10-12
昼までysaotomeのところでダラダラ過ごしてから帰る.
2014-10-10
また台風来るのか.
WebGLとかBluetooth LEとかいじったりする日.たぶん2つは全く関係ない.
BLEタグ BSHSBTPT01BK
前から財布に突っ込んでたやつが壊れたので,今度はこれに変えることにした.iPhone4S専用とか書かれているけど,Androidで使います.
本当はモジュールだけ買ってきて使いたいのだけど,キットとして売られてるのは高いし,モジュール単体で1000円くらいでファームウェアの開発キットまで買うとそこそこの値段になるので,市販品を分解するのが一番やすくなってしまう.
とりあえずケースはツメで引っかかってるだけなので,簡単に分解できる(薄くしたいので基板だけにして使う...)

回路構成は,LBT-VRU01と同じくCSR1000が使われている.安いBLEはみんなこれなのかもしれない.フラッシュメモリはWinbondの25x20で2Mbitっぽい.前のやつよりシンプルだな.
デバッグしてくださいと言わんばかりにSPIを繋ぐパターンが見えるのも気になるので,あとでどうにかしよう.
ServiceとCharacteristic一覧.
s:00001800-0000-1000-8000-00805f9b34fb
c:00002a00-0000-1000-8000-00805f9b34fb
c:00002a01-0000-1000-8000-00805f9b34fb
c:00002a04-0000-1000-8000-00805f9b34fb
s:00001803-0000-1000-8000-00805f9b34fb
c:00002a06-0000-1000-8000-00805f9b34fb
s:00001802-0000-1000-8000-00805f9b34fb
c:00002a06-0000-1000-8000-00805f9b34fb
s:00001804-0000-1000-8000-00805f9b34fb
c:00002a07-0000-1000-8000-00805f9b34fb
s:0000180f-0000-1000-8000-00805f9b34fb
c:00002a19-0000-1000-8000-00805f9b34fb
適当にデータ送ってみた感じだと,1802(Immediate Alert)に1を書き込むとバイプレーションで2を書き込むと音が鳴る. バイブレーションはアラームと分かれてるっぽい. ただ,3(GATTでは未定義)を書き込んだからといって両方動作するわけでは無かった.
まだちゃんと使ってないけど,接続直後にDiscover servicesに応答しないことがあるような気がする(?).
でも,アラームもバイブレーションも厚みの都合で一旦外す.
あとは,切断後に自動OFFされるまでの時間が長い気がするので,そこはよさ気.
2014-10-09
ここ3日くらい体調悪いな...
2014-10-05
雨.
2014-10-04
WebGL色々遊んで見てるけど,Extension使うとIEのサポートがイマイチだな. 安心して使えるのは,OES_standard_derivativesくらいか.
2014-10-03
オフィスのデスクの引っ越しとか. ダンボール大分増えた.会社にものを置きすぎだな.
2014-10-01
KADOKAWA dwango




