1. 文档中心
  2. 比卜创造 Micro:bit
  3. API 参考
  4. 无线电

radio

radio 模块让设备通过简单的无线网络协同工作。

无线电模块概念上非常简单:

  • 广播消息长度可配置(最多 251 字节)。
  • 接收的消息从可配置大小的队列中读取(队列越大占用 RAM 越多)。队列满时忽略新消息。读取消息会从队列中移除。
  • 消息在预选信道(编号 0–83)上广播与接收。
  • 广播功率可调——功率越大,范围越远。
  • 消息按地址(类似门牌号)和组(类似该地址上的指定收件人)过滤。
  • 吞吐量可为三种预设速率之一。
  • 可发送和接收字节以处理任意数据。
  • 使用 receive_full 可获取传入消息的完整信息:数据、接收信号强度,以及消息到达的微秒时间戳。
  • 为方便初学者,可轻松以字符串形式发送和接收消息。
  • 默认配置合理。

使用前需先导入:

import radio

下文示例均假设已完成导入。

常量

RATE_1MBIT

表示 1 Mbit/s 吞吐量的常量。

RATE_2MBIT

表示 2 Mbit/s 吞吐量的常量。

函数

on()

开启无线电。

导入 radio 模块时无线电默认已开启。若需省电,可在导入后调用 radio.off()。

off()

关闭无线电,从而节省功耗与内存。

config(**kwargs)

配置与无线电相关的各项关键字设置。可用设置及合理默认值如下。

length(默认 = 32)定义通过无线电发送的消息最大长度(字节),最长 251 字节(254 减去 S0、LENGTH 和 S1 前导的 3 字节)。

queue(默认 = 3)指定传入消息队列可存储的消息数。若队列无空位,传入消息会被丢弃。

channel(默认 = 7)为 0–83(含)的整数,定义无线电调谐的任意「信道」。消息经此信道发送,且仅经此信道接收的消息会进入传入队列。每步宽 1 MHz,基频 2400 MHz。

power(默认 = 6)为 0–7(含)的整数,表示广播时的信号强度。值越大信号越强,但设备功耗越高。编号对应以下 dBm(分贝毫瓦)列表:-30、-20、-16、-12、-8、-4、0、4。

address(默认 = 0x75626974)为 32 位地址形式的任意名称,在硬件层过滤传入数据包,仅保留匹配地址的数据包。其他 micro:bit 相关平台的默认值与此一致。

group(默认 = 0)为 8 位值(0–255),与 address 一起过滤消息。概念上,「address」类似门牌地址,「group」类似该地址上要接收消息的收件人。

data_rate(默认 = radio.RATE_1MBIT)表示数据传输速率。可为 radio 模块中定义的常量:RATE_1MBIT 或 RATE_2MBIT。

若未调用 config,则采用上述默认值。

reset()

将设置重置为默认值(见上文 config 函数说明)。

send_bytes(message)

发送包含字节的消息。

receive_bytes()

从消息队列接收下一条传入消息。若无待处理消息返回 None。消息以字节形式返回。

receive_bytes_into(buffer)

从消息队列接收下一条传入消息。将消息复制到 buffer,必要时截断末尾。若无待处理消息返回 None,否则返回消息长度(可能大于缓冲区长度)。

send(message)

发送字符串消息。等效于 send_bytes(bytes(message, 'utf8')),但在前面加上 b'\x01\x00\x01'(以兼容其他面向 micro:bit 的平台)。

receive()

与 receive_bytes 工作方式相同,但返回发送的内容。

当前等效于 str(receive_bytes(), 'utf8'),但会检查前三个字节是否为 b'\x01\x00\x01'(以兼容其他可能面向 micro:bit 的平台)。转换为字符串前会去掉这些前缀字节。

若转换为字符串失败,将引发 ValueError 异常。

receive_full()

返回元组,包含消息队列中下一条传入消息的三项信息。若无待处理消息返回 None。

元组中三项分别为:

  • 下一条传入消息(字节)。
  • RSSI(信号强度):0(最强)到 -255(最弱)之间的 dBm 值。
  • 微秒时间戳:消息接收时 time.ticks_us() 的返回值。

例如:

details = radio.receive_full()
if details:
    msg, rssi, timestamp = details

此函数可用于与其他 micro:bit 设备进行三角测量和/或三边测量所需的信息。