近くの本体を探す
周囲の機器を一覧にし、本体の識別子を確認します。
必要な本体:探索する本体1台以上。接続しません。
scan.py準備・終了方法とコード全文を読む
通知・スナップ・複数台を組み合わせる、非同期版の24作例です。
通常版は1つの操作が終わってから次へ進みます。専門向けはasync・awaitで通信を待つ間も別の処理を進め、複数台や通知を組み合わせます。通常版の読み込み先intelino.trainlibとは別に、intelino.trainlib_asyncを使います。
Pythonを初めて使う方は、7つの準備・接続の手順から進めてください。ここは、その後に並行処理を試す作例集です。
matrain-python-asyncというフォルダーに展開します。中にrequirements.txtとexamplesが並ぶ場所を確かめます。.venvを作ります。MacはPython 3.15、Windowsは3.14という既存手順の基準を使います。.venvのPythonで必要な道具を追加し、作例を実行します。対話入力のある作例は、IDLE Shellではなくターミナル/コマンド プロンプトで使います。ZIPを展開したフォルダー名が違う場合は、次のパスを実際の名前へ合わせます。すでにこのフォルダーの環境を作っている場合、環境作成は繰り返しません。
cd "$HOME/Downloads/matrain-python-async"
python3.15 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python examples/scan.pyZIPを展開したフォルダー名が違う場合は、パスを実際の名前へ合わせます。すでに作った環境は上書きしません。
cd /d "%USERPROFILE%\Downloads\matrain-python-async"
pymanager exec -V:3.14 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe examples\scan.pyintelino-trainlib-async==1.0.5
bleak==3.0.2
Rx==3.2.0
aioconsole==0.8.2aioconsoleは終了のEnter入力、Rxは通知の購読・共有、bleakはBluetooth通信に使います。作例の元の開発用依存ではaioconsole==0.3.2でしたが、この掲載版では0.8.2を使います。
SDKの配布条件「Python 3.7以上」は、すべての作例・新しいPython・各OSでの動作保証ではありません。この固定版のBleakはWindows 11(22000以降)、MacはmacOS 10.15以降、LinuxはBlueZ 5.55以降が対象です。Bluetooth 4.0以上の通信環境を使います。必要なOSのBluetooth部品はpipが追加します。学校・会社の端末ではBluetoothや追加の許可も確かめます。
個別の.pyを保存するときは、作例の「保存する場所」と同じフォルダーを作り、その中へ置きます。共通のrequirements.txtなどは一式ZIPに含まれます。フォルダー間で読み込む独自の補助.pyや、別の画像・線路データは必要ありません。
通信の内部にある作例のaddress/addressesは見本です。探索の作例で表示された自分の本体の識別子へ変更します。MacはUUID、WindowsはBluetoothアドレスです。
Enterで通常終了する作例が中心です。原例には、例外やCtrl+Cでの停止をfinallyで保証しないコードもあります。切断だけを走行停止とみなさず、異常時は本体のボタンを短く押して止めます。走行を始める前にこの操作を確認し、走らせるのはレール上だけにします。
停止や復帰を例外時にも行う実装は、非同期の操作仕様と照らし合わせて、try/finallyで停止・購読解除・設定の復帰・切断を行います。掲載の原例がその処理を備えているとは限りません。
パソコンのBluetoothと本体の電源をオンにし、ほかのアプリ・スマートフォンとの接続を終えてから、examples/scan.pyを実行します。Bluetooth設定で先にペアリングする必要はありません。設定画面から接続中になっている場合は、その接続を解除します。
読み込みエラーなら、同じ.venvのPythonで道具を追加したかを確認します。Bluetoothの権限やアダプターのエラーと、本体が見つからない状態は分けて確かめます。ここでは表示する全文と揃えた同梱のscan.pyを使います。ライブラリに含まれる探索コマンドを使う場合は、Macは.venv/bin/python -m intelino.scan、Windowsは.venv\\Scripts\\python.exe -m intelino.scanです。-t 5で探索秒数を指定し、--infoを付けると接続して本体情報を読みます。
周囲の機器を一覧にし、本体の識別子を確認します。
必要な本体:探索する本体1台以上。接続しません。
scan.py準備・終了方法とコード全文を読む名前・識別子・アドレス・バージョン・総走行距離を読みます。
必要な本体:1台以上。見つかった本体を順番に接続。
get_train_info.py準備・終了方法とコード全文を読む分岐の色通知を数え、左右の進路とライトを切り替えます。
必要な本体:1台。
alternating_routes.py準備・終了方法とコード全文を読む5秒で1周する色相をRGBへ変換します。
必要な本体:1台。
rainbow_lights.py準備・終了方法とコード全文を読む開始時の積算距離との差から、100cmごとに色を1周させます。
必要な本体:1台。
rainbow_run.py準備・終了方法とコード全文を読む前側センサーの色を通知で受け取り、ライトを変えます。
必要な本体:1台。
color_change/1_single_train.py準備・終了方法とコード全文を読む前進時は前側、後進時は後側の色通知を使います。
必要な本体:1台。
color_change/1b_single_train_driving.py準備・終了方法とコード全文を読む1台を先頭役にし、その色をほかの2台にも送ります。
必要な本体:3台。先頭役の上部ライトは緑。
color_change/2_multiple_trains_with_a_leader.py準備・終了方法とコード全文を読む同じ処理を2台で並行させ、各台のライトを変えます。
必要な本体:2台。
color_change/3_multiple_trains.py準備・終了方法とコード全文を読む共有するコールバック関数で、全台のライトを更新します。
必要な本体:2台。
color_change/4_multiple_trains_sharing_color.py準備・終了方法とコード全文を読むRxのSubjectへ色を流し、2台が同じ通知を受け取ります。
必要な本体:2台。
color_change/5_multiple_trains_sharing_color_with_rx.py準備・終了方法とコード全文を読む本体から受け取った設定速度と実際の速度を表示します。
必要な本体:1台。
data_streams/movement_stream.py準備・終了方法とコード全文を読む100ms間隔の通知から5秒ごとの速度と設定変更を取り出します。
必要な本体:1台。
data_streams/fast_stream_throttling.py準備・終了方法とコード全文を読む速度の表示、ライトの変更、スナップで1秒の加速を並行させます。
必要な本体:1台。
data_streams/multiple_streams.py準備・終了方法とコード全文を読む共有ストリームで加速と停止を配信し、停止を優先させます。
必要な本体:2台。0番の本体は前後が赤と青。
data_streams/multiple_streams_multiple_trains.py準備・終了方法とコード全文を読む内蔵動作を無効にし、検出した色列で速度・一時停止・逆転・切り離しを選びます。
必要な本体:1台。切り離しを試す場合は貨車1台。
snap_commands/overriding_snap_commands.py準備・終了方法とコード全文を読む共有区間の使用状態を通知し、対向する2台の進入を制御します。
必要な本体:2台。
teamwork/collision_avoidance_1.py準備・終了方法とコード全文を読む要求と応答を分け、区間を使う本体を1台ずつ選びます。
必要な本体:2〜3台。原例は最大3台を探索。
teamwork/collision_avoidance_2.py準備・終了方法とコード全文を読む合流区間の使用状態を共有し、もう1台を待たせます。
必要な本体:2台ちょうど。
teamwork/single_merge_protection.py準備・終了方法とコード全文を読む貨車の担当と待機状態を共有し、受け渡し・後進・分岐を組み合わせます。
必要な本体:本体2台と貨車1台。
teamwork/wagon_ping_pong.py準備・終了方法とコード全文を読むBleakだけで接続し、走行と3色のライトのパケットを送ります。
必要な本体:1台。addressを自分の本体へ変更。
bleak/raw_bleak_connection.py準備・終了方法とコード全文を読む探索した機器、BleakDriver、TrainBleDevice、Trainの関係を確かめます。
必要な本体:1台。addressを自分の本体へ変更。
bleak/raw_trainlib_connection.py準備・終了方法とコード全文を読む2つの接続をgatherで並行させ、各台のライトを10回変えます。
必要な本体:2台。addressesの2つを自分の本体へ変更。
bleak/two_trains_with_bleak.py準備・終了方法とコード全文を読む取得した2台へ同じ処理を並行して実行します。
必要な本体:2台。先に見つかった2台を取得。
bleak/two_trains_with_trainlib.py準備・終了方法とコード全文を読む対象はintelino-trainlib-async 1.0.5、Bleak 3.0.2です。スキャンのRSSI取得、2本の通信例の起動方法、別の1本のTrainMsgの読み込み先を調整し、各ページへ明記しています。その他の実処理は原例を維持しています。
この24本はIntelino Public License 1.0で提供されます。通常版15本のMITとは条件が異なります。商用目的のソフトウェア提供や競合サービスの提供は許諾範囲に含まれず、対象ハードウェアとの併用条件もあります。
ライセンス全文・出典・掲載版の変更を読む構文・SDK・通信を置き換えた検査と、実際のBluetooth接続・走行は別です。実機での動作や衝突防止を保証する資料ではありません。