編集履歴一覧に戻る
airpocketのアイコン画像

airpocket が 2023年12月15日23時07分59秒 に編集

初版

タイトルの変更

+

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

タグの変更

+

toio

+

toiopy

+

RaspberryPi

+

Python

メイン画像の変更

メイン画像が設定されました

記事種類の変更

+

セットアップや使用方法

ライセンスの変更

+

(MIT) The MIT License

本文の変更

+

# はじめに toioの無限の可能性を確かめるためにtoio.pyをつかってみました。 toio.pyのリポジトリは[こちら](https://github.com/toio/toio.py)。 [こちら](https://github.com/toio/toio.py/blob/main/SETUP_GUIDE.ja.md)に日本語の解説もあります。 この記事はRaspberry Piからもできるかな?という確認です。 # 環境 Raspberry Pi 4BにBookworm 64bit desktop環境を作ります。 ``` $ lsb_release -a ``` お約束のおまじない。 ``` sudo apt update && sudo apt ugrade -y ``` また、ホームディレクトリの下に作業用のディレクトリを作っておきます。 ``` mkdir ~/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)の様に環境名が表示されているはずです。 ![キャプションを入力できます](https://camo.elchika.com/fae0ec4258304c7b95ff475c0e20e8142ef7395c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f33383339613665352d376239392d346462392d623438392d323263343061626265333763/) 続けてアクティベートした仮想環境下にtoio.pyをインストールしていきます。 # toio.pyのインストール [こちら](https://github.com/toio/toio.py/blob/main/SETUP_GUIDE.ja.md)の解説通り進めます。 ``` 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からこのファイルを開くとこの様に表示されます。 ![キャプションを入力できます](https://camo.elchika.com/ba37416ab7af5091c9239c99b93feaa05b646b82/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f39376565363434332d613738332d343631332d393362362d623962353264363966356639/) code cell機能を使っているらしく、赤枠の[セルの実行]をクリックすると下の青線から次の青線までのコードが実行されます。(へーーー) [下を実行]をクリックすると全部のコードが一気に実行されるので注意してください。 最初のコードを実行した様子です。markdownの表記だけですが、実行結果がが右に表示されています。 ![キャプションを入力できます](https://camo.elchika.com/146a5fe573ab2ac574dfb4e11ecabd41a11645c2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f32396232613362612d353364642d346532372d613534362d313366663735386131343133/) 二つ目のセルは、関係ツールのインストールですがsetuptools、toio-py 、breal、ipykernelは先ほどインストール済みなので実行不要です。実行しても害はありません。 # ちょっとテストコード 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で動かしてみました。 実際に動かしてみたのがこちら。 @[twitter](https://twitter.com/AirpocketRobot/status/1735658277986295868) asyncioが良くわからないですね。 テストコードはもうちょっと気の利いたものに直したいです。