messaging -- メッセージの送受信

他のデバイスとの間でメッセージを送受信するためのクラス。

radiobroadcast channel0observe channel1
class BLERadio(broadcast_channel=None, observe_channels=[])

Bluetooth Low Energy を使って、接続なしでメッセージを送受信します。

バージョン 4.0 で追加: これは以前、各ハブクラスの一部でした。

パラメータ:
  • broadcast_channel -- データ配信に使用するチャンネル番号(0~255)。ブロードキャストを使わない場合には None を指定してください。

  • observe_channels -- hub.ble.observe() 呼び出し時に観測するチャネルのリスト。監視するチャネル数を増やすと、より多くのメモリが必要になります。デフォルトは空のリスト(チャネルなし)です。

radio000list withbroadcast
awaitbroadcast(data)

事前に選択してある broadcast_channel に指定したデータのブロードキャストを開始します。

データは、型が int, float, str, bytes, True, False のものです。それらのリストやタプルも指定できます。

ブロードキャスト通信を停止するに None を指定します。ブロードキャスト通信が必要ない場合には、停止することによりパフォーマンスを向上させられます。同時にデータ観測をしている場合には特に便利です。

合計データサイズはかなり制限されています(26バイト)。 TrueFalse はそれぞれ1バイトを占有します。 float は5バイトを占有します。 int は数値の大きさに応じて2から5バイトを占有します。 strbytes はオブジェクトのバイト数に加えて1バイトを占有します。

マルチタスクを行う場合、ブロードキャスト通信は一度に1つのタスクでしかできません。複数のタスク(またはブロックスタック)からの情報をブロードキャストするには、ブロードキャスト通信用の専用タスクを用意して、他の複数タスクからの情報を送信するようにできます。

パラメータ:

data -- ブロードキャストする値、もしくは値のリスト。

例外:
  • RuntimeError -- broadcast_channel が設定されていない場合に発生します。

  • ValueError -- エンコードしたデータが 26 バイトを超えた場合に発生します。

  • TypeError -- data が持つ値に bool, int, float, str, bytes 以外のものがあった場合に発生します。

radioobserve0
observe(channel) bool | int | float | str | bytes | tuple | None

指定したチャンネルで最後に観測されたデータを取得します。

ハブがコンピュータや他のデバイスに同時に接続しないようにすると、データを受信する信頼性が高くなります。

パラメータ:

channel (int) -- 観測するチャンネル。このオブジェクトを作成する際に observe_channels に設定したチャネルのいずれかである必要があります。

戻り値:

受信データは、送信した形式と同じ形式となります。最新のデータが利用できない場合は None が返ります。

例外:

ValueError -- channelobserve_channels にない場合に発生します。

signal_strength(channel) int: dBm

指定したチャンネルの平均信号強度を dBm 単位で取得します。

これはブロードキャストデバイスがどれだけ近くにあるかを示します。近くのデバイスは約 -40 dBmの信号強度を持ち、遠くのデバイスは約 -70 dBm の信号強度を持ちます。

パラメータ:

channel (int) -- チャンネル番号。このオブジェクトを作成する際に observe_channels に設定したチャネルのいずれかである必要があります。

戻り値:

最近の受信データがない場合、信号強度は -128 となります。

例外:

ValueError -- channelobserve_channels にない場合に発生します。

version() str

Bluetooth チップからファームウェアバージョンを取得します。

redsmartcolor tracker
0zj3KVdmjsmartclassificationmodel
smartobject detectiondetectpersonpotted plantnothingnothing
smartline followerdark line
0bbbbsmartcustommodeformat
class AppData(modes)

Pybricks Code ホストアプリケーションと USB または Bluetooth 経由で生データを交換します。これは、ビジョンプロセッサなどのスマートセンサー機能で使われます。

各プロセッサは1つの emode を持ち、一定量のデータを生成します。これらのデータは変化するたびにハブに継続的に送信します。ユーザーコードは、ブロックすることなくいつでもこれらのバッファリングされた値を読み取れます。すべての値は初期状態ではゼロです。

ハブの観点から見ると、ホストへの書き込みは待機可能な操作です。モードとモード設定の構成に使えます。

一度に存在できるインスタンスは1つだけです。プログラムの初期化中に作成する必要があります。その後、マルチタスク中にすべてのメソッドを使用できます。

パラメータ:

modes -- (mode, size) タプルのリスト。 mode はモード番号(0~255)、 size はそのモードの受信バッファに割り当てるバイト数です。モード番号は一意である必要があります。リストはモード番号で自動的にソートされます。

例外:
  • RuntimeError -- AppData インスタンスが既に存在する場合に発生します。

  • TypeError -- modes がリストでない場合、または要素のいずれかが、0から255のモード値を持つ (mode, size) タプルでない場合に発生します。

  • ValueError -- モード番号が複数回出現する場合に発生します。

get_bytes(mode, index=None) bytes | int

指定したモードについてホストから受信したデータを取得します。

パラメータ:
  • mode (int) -- 読み取るモード番号。

  • index (int) -- 指定した場合、モードのバッファ内のこの位置にある単一バイトを整数として返します。指定していない場合は、モードバッファ全体を bytes として返します。

戻り値:

モードに対して受信したすべてのバイト列。 index を指定している場合は整数としての1バイト。

例外:

ValueError -- mode が設定されていない場合、または index が範囲外の場合に発生します。

0smartvalue
awaitwrite_bytes(data)

生のバイト列をホストアプリケーションに送信します。

パラメータ:

data (bytes) -- 送信するデータ。

awaitconfigure(mode, parameter, value)

指定したモードに対して、ホストに設定コマンドを送信します。

これは write_bytes() のラッパーです。モード設定を構成するために [0x01, mode, parameter] ヘッダーを先頭に追加します。

パラメータ:
  • mode (int) -- 設定するモード番号。

  • parameter (int) -- モード内のパラメータ識別子。

  • value (bytes) -- 送信する設定値。

close()

データコールバックを無効にし、受信バッファを解放します。

これは、オブジェクトがガベージコレクションされる際にも自動的に呼び出されます。

BLERadio の利用例

他のハブへのデータのブロードキャスト

from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait
from pybricks.messaging import BLERadio

# ハブを初期化。
radio = BLERadio(broadcast_channel=1)

# モーターを初期化。
left_motor = Motor(Port.A)
right_motor = Motor(Port.B)

while True:
    # 他のハブに送るモーター回転角度の読取り。
    left_angle = left_motor.angle()
    right_angle = right_motor.angle()

    # ブロードキャストするデータを設定。まだブロードキャストしていなければ開始。
    data = (left_angle, right_angle)
    radio.broadcast(data)

    # ブロードキャストは100ミリ秒ごとにのみ送信するので、それ以上の頻度で
    # broadcast() メソッドを呼び出す理由はありません。
    wait(100)

他のハブからのデータ観測

from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait
from pybricks.messaging import BLERadio

# ハブを初期化。
radio = BLERadio(observe_channels=[1])

# モーターを初期化。
left_motor = Motor(Port.A)
right_motor = Motor(Port.B)

while True:
    # 他のハブからのブロードキャストの受信。

    data = radio.observe(1)

    if data is not None:
        # データは受信済みで、1秒未満前のもの。
        # データには、他のハブで hub.ble.broadcast() に
        # 指定したときと同じ順序で同じ値が含まれています。\        left_angle, right_angle = data

        # 他のハブのモーターの位置をこのハブのモーターに反映します。
        left_motor.track_target(left_angle)
        right_motor.track_target(right_angle)

    # ブロードキャストは100ミリ秒ごとにのみ送信されるので、それ以上の
    # 頻度で observe() メソッドを呼び出す理由はありません。
    wait(100)