Microbot Push2のAPIについて調べてみた。
この記事について
この記事ではMicrobot Push2を制御するにためにBLEのインタフェースについて調べた内容についてまとめました。Microbot Push 2とのペアリングと、モータの制御方法について記載します。
Microbot Push 2について
Microbot Push 2はNARAN社から発売されている物理的なスイッチを押すためのデバイスです。このデバイスを使うとスマホのアプリから物理的なスイッチを押すことができます。照明のスイッチや家電製品などを手軽に遠隔操作することができます。
Naran マイクロボットプッシュ(2nd Generation) - ボタンを押してくれる超小型指ロボット
- 出版社/メーカー: Naran
- メディア: Tools & Hardware
- この商品を含むブログを見る
我が家の寝室の照明スイッチはなぜか部屋の一番奥にあります。そのため、夜部屋に入る時に電気をつけるのが大変めんどくさいです。そこで今回実現したかったことはGoogle Homeにお願いするとMicrobot Push 2が部屋の照明を押してくれる仕組みです。 Microbot Push 2単体ではBLEのインタフェースしか存在しませんが、IFTTTやスマートスピーカーと連携させる仕組みがいくつかあります。
1. Prota S
Prota SはNaran社から発売されているMicrobot Push 2と接続できるハブです。こちらを購入することでMicrobot Push 2をIFTTTから制御することができます。 以下商品ぺーじは並行輸入品のページです。ご注意ください。
- 出版社/メーカー: Naran
- メディア: その他
- この商品を含むブログを見る
2. Raspberry Pi + Prota Pi
Prota OSな高額なので買うのはちょっとという場合は、ご家庭にあるRaspberry Piが利用できます。公式から配布されているRaspberry Pi用のOS、Prota Piを利用するとProta S相当のものが作れます。
BLEのインタフェースの調査
上記2の方法でおおよそのユースケースはカバーできそうですがもう少し柔軟な構成でMicrobot Push2を使いたい場合はBLEのインタフェースを直接叩く必要があります。そこで、BLEのインタフェースがどのようになっているか調査しました。
参考にしたプロジェクト
Microbot Push2用のサーバをOSSで開発していらっしゃる方がいます。
このリポジトリの以下のディレクトリでMicrobot Push 2のBLEインタフェースについて記載があります。
https://github.com/VRGhost/PyPush/blob/master/docs/microbot_ble_api.md
このドキュメンではMicrobot Push 2のBLEサービスとキャラクタリスティックについて記載があります。しかし、ペアリングをどのように実施するか、実際に使うための記載になっていません。(不明瞭の部分も多いです)そこで、上記のドキュメントとこのかたのソースコードを参考にしながらMicrobot Push 2をペアリングしてスイッチの制御を行うまでを、Bluezのgatttoolで実行するコマンドを組み立ててみました。
$ sudo gatttool -b [Microbot pushのMAC] -t random -I [xx:xx:xx:xx:xx:xx][LE]> connect Attempting to connect to xx:xx:xx:xx:xx:xx Connection successful [XX:XX:XX:XX:XX:XX][LE]> char-write-req 0x2A90 0000 Characteristic value was written successfully [XX:XX:XX:XX:XX:XX][LE]> char-write-req 0x2A90 000000 Characteristic value was written successfully #このタイミングでMicrobot Push2がペアリングモードになるので本体のボタンを押す。 [XX:XX:XX:XX:XX:XX][LE]> char-write-req 0x2A11 01 # スイッチ動作 Characteristic value was written successfully
connect から最初の書き込みまでに30秒以内に実行しないとMicrobot Push 2側から切断されます。また char-write-req 0x2A90 0000
とchar-write-req 0x2A90 000000
のコマンドのペイロードは本来接続元のMACアドレスをベースに組み立てるようですが、これでもgatttool上から接続できました。ただ、Python ラッパのgattoollibから実行すると''' char-write-req 0x2A90 000000 '''の部分で動作が止まってしまいます。LightBlueなどのツールではうまく動作します。何が原因かわかりませんが、この部分時間があるときにまた調べてみたいとお思います。