共通API & バッチ処理(_BasicDevice)

すべてのデバイスクラスで共通して利用可能な基本通信コア関数、およびバッチ同期送信に関する仕様です。

コールバック(通知ハンドラ)スレッドからの呼び出し制限

search()connect()disconnect()、および同期ブロックを伴う命令(blocking=Trueが設定された各関数やend_batch(blocking=True)など)は、通知受信用コールバック関数の中から直接呼び出すことはできません。呼び出した場合、デッドロック防止のため内部で検知され、RuntimeError が発生します。

1. デバイス通信・制御関数

search()

search(timeout=5, device_name=None, device_mac=None, card_color=None, card_serial=None)

Bluetoothを使用して周囲のハードウェアをスキャンし、一致したデバイスリストを返します。

引数名 要求される型 数値の範囲 / 選択肢 備考
timeout int / float 0 以上の任意の数値 0を指定すると最初に見つかるまでスキャン(最大10秒)。
device_name str / None 任意の文字列 ハードウェア名フィルタ(部分一致)
device_mac str / None 任意の文字列 MACアドレスによるフィルタ
card_color int / None 任意の整数(アプリ用カラー定数に対応) Connection Cardの色定数フィルタ。指定された値は内部で型変換され、フィルタリングに使用されます。
card_serial int / str / None 09999 "0049" などの文字列も指定可能。範囲外は無視(フィルタ対象外)されます。

connect()

connect(device=None, *, device_name=None, device_mac=None, card_color=None, card_serial=None, device_notification_delay=100)

指定されたConnection Cardのフィルタなどに基づいてハードウェアを検索し、接続を確立します。

引数名 要求される型 数値の範囲 / 選択肢 備考
device オブジェクト / None search() の返り値 Noneの場合は自動で検索を実行。
device_notification_delay int / float (四捨五入) 0 または 151000 自動通知の間隔(ミリ秒)。範囲外指定はValueError。

light_color()

light_color(color, *, pattern=0, intensity=100, blocking=True)

デバイスのボタンライトの色、明るさ、および点滅パターンを設定します。

引数名 要求される型 数値の範囲 / 選択肢 備考
color int (厳格) 010 (App準拠のLegoColor定数) アプリ位置合わせ用定数(0:NOCOLOR 〜 10:AZURE)が対象です。-1などの指定外の数値はValueErrorになります。
pattern int (厳格) 05 (LightPattern定数) 0:常灯, 1:ブレス, 2:パルス, 3:短点滅, 4:長点滅, 5:2回点滅
intensity int / float (四捨五入) 0100 (%) 明るさの割合。

beep()

beep(pattern=SOUND_PATTERN_BEEP_SINGLE, *, frequency=440, count=1, blocking=True)

ハードウェアで指定されたビープ音パターンを再生します。

引数名 要求される型 数値の範囲 / 選択肢 備考
pattern int (厳格) 03 (SoundPattern定数) 0:単音, 1:2連続, 2:3連続, 3:メロディ変更
frequency int / float (四捨五入) 02700 (Hz) 周波数。範囲外はValueError。
count int (厳格) 1255 (回) 全体の再生リピート回数。

stop_beep()

stop_beep(*, blocking=True)

現在ハードウェア側で鳴っている継続的なビープ音を即座に緊急停止させます。

device_uuid()

device_uuid()

ハードウェアに固有の一意識別番号(UUID)を同期リクエストし、レスポンスオブジェクトを返します。返り値の .uuid プロパティから8バイトのバイト配列を取得可能です。

program_flow_notification()

program_flow_notification(action, *, blocking=True)

ハードウェアに対してプログラムの「開始」または「停止」を通知します。これにより、デバイス内部の多くの設定値が初期リセットされます。

info()

info()

接続中ハードウェアの技術的なメタ情報・バージョン構造を同期リクエストして取得します。返されるオブジェクトからは以下のプロパティを参照可能です。

2. 全デバイス共通の「システム状態監視プロパティ」

すべてのデバイスインスタンスは、ハードウェアのハブ本体から配信される共通のシステムステータスプロパティを保持しています。

初期状態の注意

接続が確立され、最初の通知を受信するまでは各プロパティ内部の値は float('nan') で初期化されています。

info_device プロパティ (InfoDeviceNotification)

プロパティ名 データ型 有効レンジ / 選択肢 内容説明
batteryLevel uint8 0100 (%) ハブ本体のバッテリー残量パーセンテージ。
UsbPowerState uint8 0 または 1 USB給電状態(0: 未接続、1: 接続中)。
(UsbPowerState定数に対応)

button プロパティ (ButtonStateNotification)

プロパティ名 データ型 有効レンジ / 選択肢 内容説明
state uint8 0 または 1 ハブ本体にある物理ボタンのリアルタイムな押下状態(0: 離されている、1: 押されている)。
(ButtonState定数に対応)

3. バッチ(同時同期送信)制御関数とコード例

複数の個別コマンドをバラバラに送るのではなく、1つのBLEパケットに詰め込んで「ほぼ完全に同時」に駆動開始させるための命令です。

begin_batch()

begin_batch()

バッチモードを有効化し、以降に発行されるモーターコマンドを送信バッファに蓄積します。

end_batch()

end_batch(blocking=True)

蓄積されたすべてのバッチコマンドを一括送信し、バッチモードを終了します。

batch()

batch(blocking=True)

with device.batch(): の形式でバッチを自動制御するためのコンテキストマネージャです。

cancel_batch()

cancel_batch()

送信パケットを送信せずに現在のバッチ内容をすべてクリア(キャンセル)します。戻り値として、破棄(未送信のままキャンセル)されたコマンドの総数(int)を返します。

バッチ処理サンプルコード

パターンA: 標準呼び出し (begin_batch / end_batch)

import legoeducation as le

doublemotor = le.DoubleMotor()
doublemotor.connect(card_color=le.LEGO_COLOR_RED)

doublemotor.begin_batch()
doublemotor.motor_run(motor=le.MOTOR_LEFT, speed=60)
doublemotor.motor_run(motor=le.MOTOR_RIGHT, speed=20)
doublemotor.end_batch(blocking=True)

パターンB: コンテキストマネージャ (with 構文)

import legoeducation as le

doublemotor = le.DoubleMotor()
doublemotor.connect(card_color=le.LEGO_COLOR_BLUE)

with doublemotor.batch(blocking=True):
    doublemotor.motor_run(motor=le.MOTOR_LEFT, speed=40)
    doublemotor.motor_run(motor=le.MOTOR_RIGHT, speed=40)