はじめに
toioの無限の可能性を確かめるためにtoio.pyをつかってみました。
toio.pyのリポジトリはこちら。
こちらに日本語の解説もあります。
この記事はRaspberry Piからもできるかな?という確認です。
最後に掲載のデモコードで動かしてる様子です。
環境
Raspberry Pi 4BにBookworm 64bit desktop環境を作ります。
$ lsb_release -a
お約束のおまじない。
sudo apt update && sudo apt -y upgrade
また、ホームディレクトリの下に作業用のディレクトリを作っておきます。
mkdir ~/toio
cd ~/toio
VSCode
VSCodeをインストールします。
sudo apt -y install code
VSCodeのインストールが出来たら立ち上げて拡張機能として日本語、python、Jupyterのパッケージをインストールしておきます。
拡張機能のインストールが終わったら、[ファイル]⇒[フォルダーを開く]から、先程作ったtoioというフォルダーを開きます。
venv
Bookwormは仮想環境下でないとpipが使えないのでvenvを使います。
VSCode内のターミナルからvenv環境を作っておくと導入が楽です。
VSCodeのメニューバーの[ターミナル]⇒[新しいターミナル]から、ターミナルを開きvenvで仮想環境を作ります。
python -m venv toio.py
source toio.py/bin/activate
toio.pyと言う名前の環境を作ってあくちべーとしました。
アクティベートできてると、コンソールの頭に(toio.jp)の様に環境名が表示されているはずです。
続けてアクティベートした仮想環境下にtoio.pyをインストールしていきます。
toio.pyのインストール
こちらの解説通り進めます。
python -m pip install setuptools --upgrade
python -m pip install toio-py --upgrade
python -m pip install bleak
python -m pip install ipykernel
toio.pyのインストール確認のためこちらのコマンドを。
python -c "import toio.scanner; print('ok')"
okと返ればインストールOKです。
tutorialファイルを試す
tutorial用のファイルをダウンロードします。
wget https://github.com/toio/toio.py/releases/latest/download/tutorial.ja.py
vscodeからこのファイルを開くとこの様に表示されます。
code cell機能を使っているらしく、赤枠の[セルの実行]をクリックすると下の青線から次の青線までのコードが実行されます。(へーーー)
[下を実行]をクリックすると全部のコードが一気に実行されるので注意してください。
最初のコードを実行した様子です。markdownの表記だけですが、実行結果がが右に表示されています。
二つ目のセルは、関係ツールのインストールですがsetuptools、toio-py 、breal、ipykernelは先ほどインストール済みなので実行不要です。実行しても害はありません。
以降のセルを順番に実行しつつ説明やコードを眺めると、pythonでの基本的な動かし方がわかります。
ちょっとテストコード
tutorialのコードをちょこっといじって2台シンクロするコードを作ってみました。
2台のtoioがまっすぐ5秒動いてスピン終了します。
import asyncio
from toio.scanner import BLEScanner
from toio.cube import ToioCoreCube
async def move_toios():
dev_list = await BLEScanner.scan(2)
assert len(dev_list) == 2
cube1 = ToioCoreCube(dev_list[0].interface)
cube2 = ToioCoreCube(dev_list[1].interface)
await cube1.connect()
await cube2.connect()
print("go forward")
await cube1.api.motor.motor_control(10, 10)
await cube2.api.motor.motor_control(10, 10)
await asyncio.sleep(5)
print("stop")
await cube1.api.motor.motor_control(0, 0)
await cube2.api.motor.motor_control(0, 0)
print("spin turn (1000[ms])")
await cube1.api.motor.motor_control(50, -50, 1000)
await cube2.api.motor.motor_control(50, -50, 1000)
await asyncio.sleep(2)
print("end")
await cube1.disconnect()
await cube2.disconnect()
asyncio.run(move_toios())
まとめ
toioでなにかやってみたくなったのでpythonで動かしてみました。
実際に動かしてみたのがこちら。
asyncioが良くわからないですね。
テストコードはもうちょっと気の利いたものに直したいです。
あと、ここでは簡単のためraspberry piにVNCでログインしてvscodeを動かしていますが、動きが少々もっさりしています。
local 側でVSCodeを立ち上げてVSCodeのRemote DEVでSSHログインして開発した方が快適です。興味のあるかたはググってみてください。
投稿者の人気記事
-
airpocket
さんが
2023/12/15
に
編集
をしました。
(メッセージ: 初版)
-
airpocket
さんが
2023/12/15
に
編集
をしました。
-
airpocket
さんが
2023/12/15
に
編集
をしました。
-
airpocket
さんが
2023/12/20
に
編集
をしました。
-
airpocket
さんが
2023/12/21
に
編集
をしました。
-
airpocket
さんが
2023/12/21
に
編集
をしました。
ログインしてコメントを投稿する