micro:bit 实验03 - 做一块实时温度看板

« 返回 micro:bit 平台  IoT 专题

实验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:外接按钮 —— 开始接自己的元件
  • 想把温度画成折线图:参考 动态图表教程

相关文档

文档反馈