BLEで通信してtoio core cubeを動かしたり、ボタンや傾きなどの状態を得ることができるpythonライブラリとしてSIE公式のtoio.pyとtomotoioがありますが、それぞれの特徴、違いについてまとめてみました。
由来
tomotio
tomotoさん作のpython3用toio core cube制御ライブラリです。
Gitリポジトリ https://github.com/tomoto/tomotoio
toio.py
SIE謹製
Gitリポジトリ https://github.com/toio/toio.py
BLEスタック
toiotomo
bluepy
RaspberryPi OSやUbuntuなどのLinuxベースのOSでBlueZが動作している環境でないと動かない。
toio.py
Bleak
Windows10/11、macOS、LinuxベースのOS(BlueZ)で動作
toio core cubeのスキャン
toiotomo
接続するtoio core cubeのBLEアドレスリストをtoio-cubes.txtに書いておく方式。つなぎたいtoio core cubeのBLEアドレスリストが必要。
スキャンのとき(./scan-cubes.shを動かすときなど) root権限(sudo)が必要
スキャンしてtoio-cubes.txtができてしまえば以降のpythonスクリプトはroot権限は不要
スキャンして割り当てられるcore cubeの順番はtoio-cubes.txtに書いてある順番
toio.py
個数指定、名前指定、BLEアドレス指定(Windows/Linuxのみ)、ペアリング済のみ(Windowsのみ)でスキャンできる。
スキャンして割り当てられるcore cubeの順番は"rssi"、"local_name"でソート可能(local_nameでスキャン対象を個別指定することもできる)
cube_list = await BLEScanner.scan_with_id( ["toio-L1L", "toio-h3e", "toio-i6k", "toio-m1T"], "local_name")
pythonスクリプトの書き方
toiotomo
(asyncioのasync awaitではない)従来型の書き方 シンプル。
toio.py
asyncioで書く必要あり javascriptやC#に慣れた方なら問題ないと思いますが。
対応システムソフトウェアバージョン
toiotomo
v02.0005 / BLE protocol v2.3.0
toio.py
v02.0006 / BLE protocol v2.4.0
比較表
tomotoio | toio.py | |
---|---|---|
由来 | tomotoさん原作 | SIE |
BLEスタック | bluepy | Bleak |
動作環境 | Linux | Windows/Linux/macOS |
スキャンと接続 | テキストファイルにBLEアドレス | APIで名前/BLEアドレス指定 |
asyncio | - | asyncioで書く必要あり |
対応システムソフトウェア | v02.0005 | v02.0006 |
共通の制限
複数目標位置指定での移動は目標地点2か所までしか動かない。本来、toio core cubeは29個まで指定可能ですが、OS側の制限というかBLEの標準的な実装だと一回に送れるデータ長に制限があるため、複数目標位置指定では2か所分しか有効にならないようです。Windows/Linuxどちらも同様に2か所までしか有効ではありませんでした。
あとがき
Bleakはpython-for-androidにも対応している、とのことですが、Android端末にQpython3とか入れるとtoio.pyも動いちゃったりするのだろうか...
iOSについては、toio.py自体がpythonista3で動くとのことですが未テスト