实验05:用 P0 引脚读一个自己接的按钮
这个实验做完你会得到什么
在面包板上接一个按钮到 micro:bit 的 P0 引脚,按一下,手机上的小蜜蜂就换个随机位置。
前面几篇用的都是板载的东西。从这一篇开始接自己的元件 —— 引脚一旦会用,接什么传感器 都是同一套流程:配置引脚 → 订阅 → 收数据。
| 项目 | 说明 |
|---|---|
| 难度 | ★★★☆☆ |
| 用时 | 约 50 分钟 |
| 前置 | 实验01、实验02 |
改编自 MIT 官方教程 read button status with Micro:bit I/O pins,扩展改用本站本地文件。
一、器材清单
| 器材 | 数量 | 说明 |
|---|---|---|
| BBC micro:bit | 1 | |
| 面包板 | 1 | |
| 杜邦线 | 3 | 公对公 |
| 按钮(轻触开关) | 1 | 四脚的那种最常见 |
| 鳄鱼夹或排针转接板 | — | micro:bit 金手指不好插面包板,建议用转接板;临时用可以把杜邦线弯成 U 形勾住大孔(0、1、2、3V、GND 那五个大孔) |
二、接线
| micro:bit | 按钮 |
|---|---|
| GND | 一侧引脚 |
| P0 | 另一侧引脚 |

四脚轻触开关的坑:四个脚里两两是内部连通的。如果按下去没反应,把其中一根线 挪到相邻的脚上再试 —— 大概率是接到了同一侧的两个脚上(那两个脚一直是导通的)。
固件:MakeCode 里加 Bluetooth 扩展 + 蓝牙IO引脚服务,打开 No Pairing Required。
三、界面组件
| 组件 | 命名 | 关键属性 |
|---|---|---|
| 画布 | 画布1 |
宽度充满、高度 250 |
| 图像精灵 | 图像精灵_蜜蜂 |
30×30 |
| 标签 | 标签_引脚值 |
文本「引脚值:–」 |
| Microbit_Io_Pin_Simple | Microbit_Io_Pin_Simple1 |
不可见,BluetoothDevice = BluetoothLE1 |
用 Microbit_Io_Pin_Simple,不要用
Microbit_Io_Pin。后者要自己拼配置字节, 前者把引脚号、模拟/数字、输入/输出拆成了三个参数,好懂得多。
四、分步搭代码块
第 1 步:连上后配置 P0 为数字输入
when BluetoothLE1.Connected() {
Microbit_Io_Pin_Simple1.ConfigurePin(0, false, true)
Microbit_Io_Pin_Simple1.RequestPinDataUpdates()
标签_状态.Text = "P0 已配置为数字输入"
}
中途验证:状态标签变成「P0 已配置为数字输入」。此时按按钮还没反应,正常。
ConfigurePin(引脚号, 是否模拟, 是否输入):
- 第 1 个参数
0就是 P0;- 第 2 个
false= 数字量(只有 0/1),按钮用数字;读电位器那种连续值才用true;- 第 3 个
true= 输入(读取)。接 LED 那种要输出的就填false。配置必须在连接成功之后做。写在
Screen1.Initialize里是无效的 —— 那时候还没连上。官方教程也特意强调:必须先把引脚配成数字输入,才能正确读到它的数据。
第 2 步:收到引脚数据,蜜蜂换位置
when Microbit_Io_Pin_Simple1.InputPinDataReceived(IO_Pin_Data) {
标签_引脚值.Text = join("引脚值:", IO_Pin_Data)
if IO_Pin_Data = 0 {
图像精灵_蜜蜂.MoveTo(random(0, 画布1.Width - 30), random(0, 画布1.Height - 30))
}
}
中途验证:按一下按钮,蜜蜂跳到画布上的随机位置,引脚值标签在 0 和 1 之间变化。
为什么判断
= 0而不是= 1:micro:bit 的引脚默认带上拉,没按下时是高电平 1, 按下接通 GND 才是 0。这跟直觉相反,是数字电路里常见的「低电平有效」。 如果你的接法是按下接 3V,那就反过来判断= 1。
第 3 步:收尾
when 按钮_断开.Click() {
Microbit_Io_Pin_Simple1.StopPinDataUpdates()
BluetoothLE1.Disconnect()
}
五、排错表
| 现象 | 原因与处理 |
|---|---|
| 引脚值一直不变 | ① 没调 ConfigurePin;② 配置写在了 Initialize 里(那时还没连上),必须写在 Connected 里;③ 固件没加「蓝牙IO引脚服务」 |
| 按下去毫无反应 | 四脚按钮接到了内部连通的两个脚上,把一根线挪到相邻脚;或杜邦线没勾牢 micro:bit 的大孔 |
| 值一直是 0,松开也不变 | 按钮卡住了,或两根线短接了 |
| 一按就连续触发好几次 | 机械按钮抖动。在事件里加个时间间隔判断(用计时器记上次触发时刻,两次间隔小于 200 毫秒就忽略) |
| 判断反了(松开才动) | 见第 2 步说明,默认上拉是「按下为 0」 |
| 蜜蜂跑出画布 | random 的上界要减去精灵宽高,写成 画布1.Width - 30 |
六、下一步
- 实验06:电位器调光 —— 同一个引脚组件,改成模拟输入读连续值
- 实验07:RGB LED —— 引脚当输出用,控制三色灯
扫码添加客服咨询