airpocketのアイコン画像
airpocket 2023年12月15日作成 (2023年12月21日更新) © MIT
セットアップや使用方法 セットアップや使用方法 閲覧数 288
airpocket 2023年12月15日作成 (2023年12月21日更新) © MIT セットアップや使用方法 セットアップや使用方法 閲覧数 288

toioをRaspberry Piからtoio.pyで動かす

toioをRaspberry Piからtoio.pyで動かす

はじめに

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のアイコン画像
電子工作、プログラミング、AI、DIY、XR、IoT M5Stack / Raspberry Pi / Arduino / spresense / K210 / ESP32 / Maix / maicro:bit / oculus / Jetson Nano / minipupper etc
ログインしてコメントを投稿する