发布日期:2026-10-27
适用场景
想观察桌面附近是否逐渐变暖,又不希望每一次整数读数跳动都立刻改变显示,可以制作这块温度变化提示牌。程序每隔约一秒采样一次,每十次形成一个平均值;第一组平均值作为基准,之后根据偏差显示上箭头、下箭头或横线。
这个项目适合学习采样、列表、平均值和状态判断。显示的是相对于基准的变化方向,不是相邻两个窗口之间的升降速度,也不能作为医疗测温、设备过热保护或精密环境监测装置。
原理
micro:bit 的温度读数来自处理器内部,反映的是芯片温度,可能受到板上发热和供电状态影响。micro:bit 官方温度计项目说明了温度读数的来源,并建议与其他温度计比较。因此,实验期间应保持摆放位置和供电方式一致。
每个采样窗口收集十个整数读数,相加后除以十。平均处理可以减弱个别读数的影响,但不会把传感器变成高精度温度计。本例设定偏差达到正两摄氏度时显示上箭头,达到负两摄氏度时显示下箭头,其余情况显示横线。
温度函数、运行时间和休眠函数的定义见 MicroPython 模块文档。按键使用“自上次检查以来是否按过”的事件读取方式,具体语义见官方按键文档。
准备工作
准备一块 micro:bit V2、一条可传输数据的 USB 线,以及能够访问 micro:bit 官方 Python 编辑器的电脑。项目只使用板载功能,无需外接传感器,也无需连接边缘引脚。
先备份板上原有程序。将主板放在干燥、绝缘且通风的位置,避免紧贴电脑散热口。下面程序使用 micro:bit MicroPython,不能直接粘贴到另一种 Python 方言的编辑器中。
分步骤操作
第一步:输入完整程序
在官方 Python 编辑器中新建程序,替换编辑区原有内容:
from microbit import *
WINDOW = 10
INTERVAL_MS = 1000
THRESHOLD = 2.0
samples = []
baseline = None
last_sample = running_time()
flat = Image('00000:00000:99999:00000:00000')
display.show('.')
while True:
if button_a.was_pressed():
samples = []
baseline = None
last_sample = running_time()
display.show('.')
now = running_time()
if now - last_sample >= INTERVAL_MS:
last_sample = now
samples.append(temperature())
if len(samples) == WINDOW:
average = sum(samples) / WINDOW
samples = []
if baseline is None:
baseline = average
difference = average - baseline
if difference >= THRESHOLD:
display.show(Image.ARROW_N)
elif difference <= -THRESHOLD:
display.show(Image.ARROW_S)
else:
display.show(flat)
sleep(20)
窗口变量表示每组十次采样,间隔变量表示约一秒读取一次,阈值变量表示相对基准的温差。这些都是可直接运行的参数,不需要填写设备地址或登录资料。
第二步:下载并建立第一组基准
将编辑器下载的程序文件复制到主板挂载的盘符,等待写入完成。启动后先显示一个点,表示还在收集第一组数据;约十秒后出现横线,表示基准已经建立。
板子刚接通电源时可能逐渐升温。建议先保持供电静置几分钟,再按一次 A 键重新收集基准。按键后不会立即采用某一瞬间的温度,而是清空旧窗口,重新等待十次采样。
第三步:观察相对基准的变化
把板子移到室内另一处干燥、安全的位置,例如远离热源的另一张桌面,等待多个采样窗口。只有温度读数相对基准变化足够大,箭头才会改变。一次没有变化,不能证明程序没有运行。
不要用吹风机、明火、热水或冰箱制造温差。温度变化可能较慢,本项目可以先通过下面的模拟数据验证程序分支,再观察自然变化。
第四步:理解按键与窗口更新
主循环大部分时间每二十毫秒检查一次按键,温度采样则由运行时间控制。显示单张图像不会等待长动画,因此按键响应不会被十秒采样窗口整体阻塞。
每次算出平均值后,样本列表清空,下一组重新收集。这是彼此不重叠的采样窗口,不是每秒更新一次的滑动平均。窗口更大通常意味着响应更慢,不应只追求显示稳定。
验证方法
可以先复制一份程序作为逻辑验证版,仅在副本中把读取温度的语句替换为:
samples.append(20 if baseline is None else 23)
重新下载后,第一组建立二十度基准,下一组平均值为二十三度,应显示上箭头。把二十三改成十七,再重新下载,应显示下箭头;改成二十一,应保持横线。这些数值是模拟输入,用来核对判断逻辑,不代表实际测得的环境温度。
验证完成后恢复真实温度读取语句并重新下载。再检查 A 键是否能让显示回到等待点,并在新窗口完成后显示横线。注意重新上电也会丢弃基准,这是本程序的预期行为。
常见错误
一直显示等待点,先确认是否反复按了 A 键,或者电源连接不稳定。程序在重新建立基准期间不会输出方向箭头,需要耐心等待整个窗口完成。
读数比室温高,并不一定是算法算错,可能与芯片自身温度有关。平均值出现小数也不意味着测量精度提高到了小数位。如果偏差在阈值附近徘徊,箭头仍可能在相邻窗口切换;当前版本没有加入迟滞区间。
修改程序出现错误图案时,应核对缩进、英文标点和名称大小写。不要同时修改窗口、间隔和阈值,先一次只改一个参数,观察其影响。
安全与回退
项目使用主板正常 USB 低压供电,不外接负载。需要检查、清理或增加连线时,先断开电源;若以后扩展外部发光器件,必须另行计算限流,不能直接接到供电引脚。
主板应远离金属杂物、液体和高温表面。撤销实验时,下载此前备份的程序即可。基准只保存在运行内存中,断电后不会留下温度记录,也不涉及长期存储与数据清理。
参考资料与转载说明
本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。
评论一下?