本文へ進む

Python 技術リファレンス

実装する方へ。命令・プロパティ・通知・列挙値・メッセージ・例外を、引数と制約まで調べられます。

対象環境・確認範囲

説明の基準はPython 3.15.0。同期版 intelino-trainlib==1.0.0、非同期版 intelino-trainlib-async==1.0.5、Bluetooth通信部分は bleak==3.0.2 を対象にしています。確認日:2026年10月12日。

準備手順ではWindows 11以降(22000以降)にPython 3.14、Macに3.15を使います。Windowsの通信部品には、確認時点で3.15用の通常の配布ファイルが揃っていません。コードとAPIの説明は共通です。

Python 3.15での読み込みと、通信を置き換えたコードの実行・命令の組み立てを確認しました。Windows/Macのインストーラー操作、実際のBluetooth接続・走行は、この検査には含みません。実機での結果は使用する端末・本体・接続環境で確かめてください。

バージョンと互換性について

対象ライブラリの配布条件はPython 3.7以上ですが、これはすべての新しいPythonでの動作確認を意味しません。OS別の手順で使う版を明示しています。既存の環境を変更するときは、別の仮想環境で確認してから切り替えてください。

非同期版1.0.5では、新しいBleakと組み合わせると、切断後のis_connectedが接続中の値を保持する場合があります。切断結果やこの値だけで再接続の成功を判断しないでください。同じ非同期インスタンスで再接続を試す場合はawait train.connect(force=True)を使い、実機で応答まで確認します。同期版のインスタンスは切断後に再使用できません。

同期版・非同期版の使い分けとコードの前提

通常の手順はfrom intelino.trainlib import TrainScannerを使う同期版です。命令が完了するまで処理を待ちます。イベントのコールバックは別スレッドで呼ばれるため、共有するデータや画面への操作には同期が必要です。

非同期版はintelino.trainlib_asyncから読み込み、命令をawaitします。既存のイベントループと組み合わせる場合はasyncio.run()を重ねず、呼び出し側からmain()を待ちます。

非同期版の接続・走行・停止の例
import asyncio
from intelino.trainlib_async import TrainScanner

async def main():
    async with TrainScanner(timeout=10) as train:
        try:
            await train.drive_at_speed(30)
            await asyncio.sleep(3)
        finally:
            await train.stop_driving()

asyncio.run(main())

短い使用例のtrainは接続済みの本体を表します。複数台を取得した場合は各台を停止し、各インスタンスを切断します。切断だけでは走行停止の命令になりません。停止をfinallyに残してください。

公開APIを調べる

201項目

同期版:操作と送受信

intelino.trainlib.Trainの操作です。通常はTrainScannerで取得します。関数の実行中は呼び出した側が待ちます。断片のコードでは接続中のtrainを使います。

同期版Trainを生成する

Train(train)

非同期版Trainを包み、接続と移動通知の受信を開始します。

引数・フィールド
名前・型既定値意味・制限
trainintelino.trainlib_async.Train-同期版として操作する、非同期版Trainのインスタンス。

戻り値・取得値:intelino.trainlib.Train

from intelino.trainlib import Trainで読み込みます。通常はTrainScannerに生成を任せます。

1台ごとに専用イベントループとスレッドを作ります。直接生成する場合も、最後にdisconnect()が必要です。

接続を終了する

train.disconnect()

本体との接続を切り、通信処理を終了します。

戻り値・取得値:None

購読を解除し、通信を切断し、内部スレッドとイベントループを終了します。

切断した同期版Trainは再接続できません。もう一度TrainScannerから取得します。

実行中のリスナーのスレッドは自動でjoinされません。自分の終了合図と待機を設計します。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

停止は別処理です。必要なstop_driving()を先に送り、切断済みのTrainへdisconnect()を繰り返しません。

IDとデータ列を送信する

train.send_command(command_id, payload=None)

高水準の操作関数を介さず、指定した命令を送ります。

引数・フィールド
名前・型既定値意味・制限
command_idint-送信する命令のID。0〜255の整数。
payloadIterable[int] | NoneNone命令のデータ列。各要素は0〜255。リストまたはタプルを使います。Noneは空のデータ列。

戻り値・取得値:None

送信が終わるまで待ちますが、本体の動作完了や意味上の応答を待つ関数ではありません。

整数化後に各値が8bitへマスクされます。範囲外の値が必ず例外になるわけではありません。送信前に自分で範囲を確認します。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

送信して応答を受け取る

train.send_command_with_response(command_id, payload=None, timeout=3.0)

指定した命令IDと同じIDの受信を、時間上限付きで待ちます。

引数・フィールド
名前・型既定値意味・制限
command_idint-送信する命令のID。0〜255の整数。
payloadIterable[int] | NoneNone命令のデータ列。各要素は0〜255。リストまたはタプルを使います。Noneは空のデータ列。
timeoutfloat3.0待つ時間の上限。単位は秒。

戻り値・取得値:TrainMsg

timeoutの既定値は3秒。時間内に応答がなければTimeoutErrorになります。

応答は命令IDで対応付けます。同じIDの複数リクエストを同時に出すと、受信の対応が曖昧になります。

返値は解釈済みの受信データです。非同期版の同名関数はTrainBlePacketを返します。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

速さを指定して走行する

train.drive_at_speed(speed_cmps, direction=MovementDirection.FORWARD, play_feedback=True)

目標速度に合わせてモーターを調整しながら走ります。

引数・フィールド
名前・型既定値意味・制限
speed_cmpsint | float-目標の速さ。単位はcm/秒。走行可能な指定範囲は15〜75。
directionMovementDirectionMovementDirection.FORWARD進行方向。MovementDirectionの値で指定します。
play_feedbackboolTrueTrueで動作に伴う音とライトの反応を有効にします。

戻り値・取得値:None

speed_cmpsはint()で小数部分が切り捨てられてから送信されます。

本体側でも約0.9425 cm/秒の刻みに調整されるため、指定値と目標値に差が出る場合があります。

距離や走行時間を指定する関数ではありません。時間を待った後にstop_driving()を呼びます。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

速度段階を指定して走行する

train.drive_at_speed_level(speed_level, direction=MovementDirection.FORWARD, play_feedback=True)

本体の速度段階で走行します。

引数・フィールド
名前・型既定値意味・制限
speed_levelSpeedLevel-本体が持つ速さの段階。LEVEL1・LEVEL2・LEVEL3、STOPは0。
directionMovementDirectionMovementDirection.FORWARD進行方向。MovementDirectionの値で指定します。
play_feedbackboolTrueTrueで動作に伴う音とライトの反応を有効にします。

戻り値・取得値:None

LEVEL1・LEVEL2・LEVEL3は本体が定める段階です。cm/秒の数値ではありません。

発進の既定方向は前進です。停止の用途にはstop_driving()を使えます。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

走行を停止する

train.stop_driving(play_feedback_type=StopDrivingFeedbackType.MOVEMENT_STOP)

走行停止の命令を送ります。

引数・フィールド
名前・型既定値意味・制限
play_feedback_typeStopDrivingFeedbackTypeStopDrivingFeedbackType.MOVEMENT_STOP停止時の反応。NONE・MOVEMENT_STOP・END_ROUTEから選びます。

戻り値・取得値:None

play_feedback_typeで停止時の音とライトの種類を選びます。

通信が切れている場合、命令を届けられません。切断や待機は停止命令の代わりになりません。

この版はBLE API 1.2以降の停止命令を送ります。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

次の分岐の方向を設定する

train.set_next_split_steering_decision(next_decision)

次に検出する分岐1回分の進路を指定します。

引数・フィールド
名前・型既定値意味・制限
next_decisionSteeringDecision-次の分岐で選ぶ方向。LEFT・RIGHT・STRAIGHTだけを指定できます。

戻り値・取得値:None

左右は列車の進行方向を基準にします。

指定はスナップの方向設定やランダムな選択より優先されます。

NONE・STEER・ALLやそれ以外の組み合わせはTrainCommandErrorになります。

設定後に移動通知を1回要求し、イベントループへ処理を譲って保持状態の更新を促します。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

上部ライトのRGBを設定する

train.set_top_led_color(r, g, b)

赤・緑・青の強さを指定します。

引数・フィールド
名前・型既定値意味・制限
rint-赤の強さ。0〜255の整数。
gint-緑の強さ。0〜255の整数。
bint-青の強さ。0〜255の整数。

戻り値・取得値:None

(0, 0, 0)は消灯です。

0〜255以外の値を自動で安全な範囲に制限する関数ではありません。8bit化による周回を避けるため、指定前に範囲を確認します。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

前後ライトのRGBを設定する

train.set_headlight_color(front=None, back=None)

進行方向に応じて切り替わるライトの色を指定します。

引数・フィールド
名前・型既定値意味・制限
frontIterable[int] | NoneNone進行方向側のライト色。赤・緑・青の3要素をリストまたはタプルで指定します。
backIterable[int] | NoneNone反対側のライト色。赤・緑・青の3要素をリストまたはタプルで指定します。

戻り値・取得値:None

両方の引数を省略すると標準色へ戻します。片側だけ指定することもできます。

各RGBは3要素のリストまたはタプルを使います。短い列は0で補われ、長い列は先頭3要素になります。

使い切りのジェネレーターは長さ確認で消費されるため、この引数には使いません。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

スナップ動作の音と点滅を設定する

train.set_snap_command_feedback(sound, lights)

スナップを実行した際の音と上部ライトの反応を切り替えます。

引数・フィールド
名前・型既定値意味・制限
soundbool-Trueでスナップ動作の音を有効にします。
lightsbool-Trueでスナップ動作に伴う上部ライトの点滅を有効にします。

戻り値・取得値:None

soundとlightsは独立した設定です。

BLE API 1.2以降に対応する本体で使います。スナップ動作自体を無効にする関数ではありません。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

本体のスナップ動作を切り替える

train.set_snap_command_execution(on)

スナップ検出後に本体が行う動作を有効または無効にします。

引数・フィールド
名前・型既定値意味・制限
onbool-Trueで本体のスナップ動作を有効、Falseで無効にします。

戻り値・取得値:None

BLE API 1.2以降に対応する本体で使います。

Falseでも検出イベントは届きますが、実行イベントは届きません。

実験後にスナップだけの動作へ戻す場合はTrueを送ります。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

カスタムスナップの動作を消去する

train.clear_custom_snap_commands()

本体に登録したカスタムスナップ動作を消去します。

戻り値・取得値:None

黒・赤・緑・黄・青の各カスタム動作に消去命令を送ります。

状態を読むだけの処理ではありません。残す必要のある登録がないことを確認してから使います。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

貨車を切り離す

train.decouple_wagon(play_feedback=True)

連結器の切離しを指示します。

引数・フィールド
名前・型既定値意味・制限
play_feedbackboolTrueTrueで動作に伴う音とライトの反応を有効にします。

戻り値・取得値:None

この版は磁石の作動時間512 msを指定して送信します。

同期版は送信後に1.5秒待ちます。この待機中は、同じTrainのほかの操作も内部ロックを待ちます。

同じTrainの通信操作は内部ロックで直列化されます。通常の呼び出しはawait不要です。

開発者向けの公式資料(英語)

ファイルのダウンロード

ダウンロードの確認

ファイル名:

この端末に保存します。閲覧中のページはそのまま残ります。