Powered Up デバイス

../_images/iodevice-pupdevice1.png
class PUPDevice(port)

Powered Up モーターまたはセンサー。

パラメータ:

port (Port) -- デバイスが接続されているポート。

info() Dict

デバイスについての情報を取得します。

受動デバイス(DCモーターやライトなど)の場合、 id キーのみを含む辞書を返します。

UARTデバイスの場合、 id キーと modes キーを含む辞書を返します。 modes の値はタプルのタプルで、モードごとに1つずつ含まれ、各タプルにはモード名、値の数、およびデータ型が含まれます。

戻り値:

デバイス情報を持つ辞書。

awaitread(mode) Tuple

指定のモードで値を読み取ります。

パッシブタッチセンサーの場合、 mode 引数に関係なく、センサーが押されているかどうかを示す単一のブール値を返します

読み取りをサポートしていない DC モーターやライトなどの他の受動デバイスではエラーが発生します。

パラメータ:

mode (int) -- デバイスモード。

戻り値:

デバイスから読み取った値。

例外:

OSError -- デバイスが読み取りをサポートしない受動デバイス(例: DCモーターまたはライト)である場合に発生します。

awaitwrite(mode, data)

デバイスに値を書き出します。一部の UART デバイスとモードのみがこれをサポートします。

パラメータ:
  • mode (int) -- デバイスモード。

  • data (tuple) -- 書き出す値。値の数とその型は、指定されたモードでデバイスが想定するものと一致していなければなりません。

例外:
  • OSError -- デバイスが書き込みをサポートしない受動デバイスである場合に発生します。

  • ValueError -- モードが無効、モードが書き出し不可、値の数が一致しない、値がそのデータ型の範囲外である場合に発生します。

reset()

UART デバイスをリセットします。リセット後、数秒後には自動的に同期して使用可能になります。これは、センサーが接続されたときに動作することを強制的に再トリガーする場合に便利です。

例外:

OSError -- デバイスがリセットをサポートしていない受動デバイスである場合に発生します。

サンプルコード

デバイスの検出

from pybricks.iodevices import PUPDevice
from pybricks.parameters import Port
from uerrno import ENODEV

# デバイスの識別子とその名称を並べた辞書。
device_names = {
    # pybricks.pupdevices.DCMotor
    1: "Wedo 2.0 Medium Motor",
    2: "Powered Up Train Motor",
    # pybricks.pupdevices.Light
    8: "Powered Up Light",
    # pybricks.pupdevices.Motor
    38: "BOOST Interactive Motor",
    46: "Technic Large Motor",
    47: "Technic Extra Large Motor",
    48: "SPIKE Medium Angular Motor",
    49: "SPIKE Large Angular Motor",
    65: "SPIKE Small Angular Motor",
    75: "Technic Medium Angular Motor",
    76: "Technic Large Angular Motor",
    # pybricks.pupdevices.TiltSensor
    34: "Wedo 2.0 Tilt Sensor",
    # pybricks.pupdevices.InfraredSensor
    35: "Wedo 2.0 Infrared Motion Sensor",
    # pybricks.pupdevices.ColorDistanceSensor
    37: "BOOST Color Distance Sensor",
    # pybricks.pupdevices.ColorSensor
    61: "SPIKE Color Sensor",
    # pybricks.pupdevices.UltrasonicSensor
    62: "SPIKE Ultrasonic Sensor",
    # pybricks.pupdevices.ForceSensor
    63: "SPIKE Force Sensor",
    # pybricks.pupdevices.ColorLightMatrix
    64: "SPIKE 3x3 Color Light Matrix",
}

# 既知のポートのリストを作成。
ports = [Port.A, Port.B]

# 対応するハブでは、さらにポートを追加。
try:
    ports.append(Port.C)
    ports.append(Port.D)
except AttributeError:
    pass

# 対応するハブでは、さらにポートを追加。
try:
    ports.append(Port.E)
    ports.append(Port.F)
except AttributeError:
    pass

# 利用できるポートを巡回。
for port in ports:

    # デバイスが繋げられている場合は、そのの取得を試みます。
    try:
        device = PUPDevice(port)
    except OSError as ex:
        if ex.args[0] == ENODEV:
            # このポートにはデバイスが見つからなかった。
            print(port, ": ---")
            continue
        else:
            raise

    # デバイス id を取得
    id = device.info()["id"]

    # デバイス名を調べる。
    try:
        print(port, ":", device_names[id])
    except KeyError:
        print(port, ":", "Unknown device with ID", id)