最近、SonyのMESHをいじっています。このデバイスは子供のプログラミング教育や簡単なプロトタイプ制作などの用途にぴったりだと思うので、例えば、Scratchなどのビジュアルプログラミング言語やProcessingのような手軽なプログラミング環境でも使えると便利そうです。
現在は公式のiOSアプリでしか直接MESHを利用することができませんが、せっかくだったら他の環境でも簡単に使えるとよいですね。現状でも、GPIOタグやHTTP経由でiOSの外のシステムとつなげることは可能ですが、用途によってはお手軽さが損なわれるのが少し残念な気がします。
そこで、実験として、公式のiOSアプリ以外から直接を使うことはできないか、MESHをハックしてみました。対象はMESHの中で最も単純そうなButtonタグ。BLEのパケットをキャプチャして調べてみたところ、ボタンを押したときのイベントを取得するための通信の手続きが分かったので、以下にまとめておきます。
ButtonタグのBLEの仕様
サービスとキャラクタリスティック
サービスとキャラクタリスティックのUUIDは以下の通りです。(Buttonタグ、LEDタグ、Moveタグ、GPIOタグとも共通)
- Service
- 72C90001-57A9-4D40-B746-534E22EC9F9E
- Characteristic
- 72C90003-57A9-4D40-B746-534E22EC9F9E (Notify)
- 72C90002-57A9-4D40-B746-534E22EC9F9E (Write Without Response)
- 72C90005-57A9-4D40-B746-534E22EC9F9E (Indicate)
- 72C90004-57A9-4D40-B746-534E22EC9F9E (Write)
Buttonタグを利用するための手続き
以下の手続きを実行すると、BLEでButtonタグを使うことができます。
- Buttonタグに接続する。
- サービスとキャラクタリスティックを検索。
- 72C90005-57A9-4D40-B746-534E22EC9F9E (Indicate) の通知を有効にする。
- 72C90004-57A9-4D40-B746-534E22EC9F9E (Write) に0x00020103を書き込む。
- 72C90003-57A9-4D40-B746-534E22EC9F9E (Notify) の通知を有効にする。
これで、Notifyによってボタン押下のイベントが通知されるようになります。
ボタン押下時に通知される値
Notifyで通知される値は以下の通りです。ボタンの押し方によって3種類のイベントがあります。
通知される値 | イベント | MESHアプリ(iOS)での表記 |
0x01000102 | タップ | Pressed |
0x01000203 | 長押し | Hold |
0x01000304 | ダブルタップ | Double |
以上のように、ボタン押下のイベントを取得するのは比較的シンプルな通信の手続きで行うことができました。
これを実装した自作のiOSアプリとButtonタグを連携させてみた様子です↓
Sony MESH Hack – Using Button Tag with my iOS app from hikoLab on Vimeo.
iOSデバイスだけでなく、Macとも直接通信できることを確認しました。そこで、Buttonタグを「1ボタンキーボード」にするMacアプリを作ってみようと考えています。ボタン押下でMacにキーコードを出力できるようにすると、いろいろな用途に使えるようになるので便利かなと思います。
参考
LEDタグのBLEの仕様については、concre_shiitakeさんがブログに書かれています。
Sony Mesh をハックする LEDタグの使い方編