实验03:做一块实时温度看板
这个实验做完你会得到什么
手机上有一个大号数字实时显示当前温度,用手捂住 micro:bit 几秒,数字会往上爬。 还能拖滑动条改变采样快慢。
| 项目 | 说明 |
|---|---|
| 难度 | ★★☆☆☆ |
| 用时 | 约 30 分钟 |
| 前置 | 实验01:连上 micro:bit、实验02:订阅按钮 |
改编自 MIT 官方教程 App Inventor + IoT: Micro:bit Temperature,扩展改用本站本地文件。
一、器材清单
| 器材 | 数量 | 说明 |
|---|---|---|
| BBC micro:bit | 1 | 用板载温度传感器,无需外接 |
固件:MakeCode 里加 Bluetooth 扩展 + 蓝牙温度服务,打开 No Pairing Required。
这个”温度”测的是芯片温度,不是室温。micro:bit 没有独立的环境温度传感器,读的是 CPU 内部温度,通常比房间温度高 2~5℃,且发热后会缓慢上升。做温差演示没问题, 当温度计用要先做校准(减一个固定偏移)。
二、界面组件
在实验01 的连接界面基础上加:
| 组件 | 命名 | 关键属性 |
|---|---|---|
| 标签 | 标签_温度 |
字号 48、粗体、居中,文本「–」 |
| 标签 | 标签_单位 |
文本「℃」 |
| 滑动条 | 滑动条_周期 |
最小值 1、最大值 10、初始 1(单位:秒) |
| Microbit_Temperature | Microbit_Temperature1 |
不可见,BluetoothDevice = BluetoothLE1 |
三、分步搭代码块
第 1 步:记住最新温度
先建一个全局变量存最新读数,后面显示、判断都用它。
global 当前温度 = 0
第 2 步:连上就订阅温度更新
when BluetoothLE1.Connected() {
标签_状态.Text = "已连接,正在读温度"
Microbit_Temperature1.RequestTemperatureUpdates()
}
中途验证:连上后状态标签变化。数字还是「–」,因为还没接收数据。
第 3 步:收到温度就刷新显示
when Microbit_Temperature1.TemperatureReceived(temperature_value) {
global 当前温度 = temperature_value
刷新显示()
}
procedure 刷新显示() {
标签_温度.Text = 当前温度
if 当前温度 >= 30 {
标签_温度.TextColor = "&HFFE53935"
} else if 当前温度 <= 15 {
标签_温度.TextColor = "&HFF1E88E5"
} else {
标签_温度.TextColor = "&HFF212121"
}
}
中途验证:数字开始显示实际温度。用手心捂住 micro:bit 芯片 10 秒,数字应该往上爬; 超过 30 变红,低于 15 变蓝。
单独抽一个
刷新显示过程,而不是把显示逻辑写在事件里 —— 后面加图表、加最高/最低记录时, 只改这一个地方。
第 4 步:采样周期可调
when 滑动条_周期.PositionChanged(thumbPosition) {
Microbit_Temperature1.WriteTemperaturePeriod(round(thumbPosition) * 1000)
标签_状态.Text = join("采样周期:", round(thumbPosition), " 秒")
}
中途验证:把滑动条拉到 10,捂住 micro:bit —— 数字变化明显变慢(每 10 秒才更新一次)。
周期单位是毫秒,所以要 ×1000。写得太小(比如 100 毫秒)没有意义:温度本身变化很慢, 只会白白耗电、把 BLE 通道塞满。
第 5 步:退出时收尾
when 按钮_断开.Click() {
Microbit_Temperature1.StopTemperatureUpdates()
BluetoothLE1.Disconnect()
}
四、进阶:记录最高最低
global 最高 = -99
global 最低 = 99
procedure 更新极值() {
if 当前温度 > 最高 {
global 最高 = 当前温度
}
if 当前温度 < 最低 {
global 最低 = 当前温度
}
标签_状态.Text = join("最高 ", 最高, "℃ / 最低 ", 最低, "℃")
}
把 更新极值() 加到 刷新显示() 里一起调用即可。
初值故意设成
-99/99这种不可能的值,第一条真实读数就会把它们顶掉。 设成 0 的话,室温永远不会低于 0,「最低」就一直卡在 0 不动。
五、排错表
| 现象 | 原因与处理 |
|---|---|
连上了但一直显示 -- |
① 没调 RequestTemperatureUpdates 订阅;② 固件里没加「蓝牙温度服务」;③ BluetoothDevice 属性没设 |
| 温度比室温高好几度 | 正常。读的是芯片温度,不是环境温度,见第一节说明 |
| 数字很久才变一次 | 采样周期被调大了;或温度本身变化就慢,捂住芯片试 |
| 数字疯狂跳动 | 采样周期设得太小(几百毫秒),改回 1000 毫秒以上 |
| 最低温度一直是 0 | 全局变量初值设成了 0,改成一个不可能的大值(如 99) |
| 断开重连后收不到数据 | 重连后要重新订阅 —— 订阅是连接级的,断开就失效。确保订阅写在 Connected 事件里 |
六、下一步
- 实验04:指南针 —— 磁力计三轴数据 + 方位角
- 实验05:外接按钮 —— 开始接自己的元件
- 想把温度画成折线图:参考 动态图表教程
相关文档
- Microbit_Temperature 组件参考
- 官方原版教程(英文,已标注过时):MIT_App_Inventor_Microbit_Temperature.pdf
扫码添加客服咨询