Skip to content

活动

最高 - 最低温度记录仪

高级 | Python | LED显示器, 引脚, 按钮, 温度传感器 | 变量, 数据处理, 数据类型, 输入/输出

第 1 步:制作

它是什么?

将micro:bit变成一个独立的数据记录仪,记录最高和最低的温度读数,并存储它们,以便在电池没电或断开电源的情况下仍保留数据。

这是一个Python程序,但是你无需了解任何有关Python的知识即可使用它。

学习目标

  • 如何使用Python读取数据并将数据写入持久性存储器,使得数据即使在断电的情况下也保留在micro:bit上。
  • 如何处理错误Python程序中)
  • 如何将数字变量转换为字符串并且复原。

所需材料

  • 一个micro:bit
  • 可选电池组

如何使用

  • 下载.hex程序文件,并将其刷入到你的micro:bit
  • 如果你有电池组,请装上电池并将micro:bit放在温度会变化的地方。 可以将其放在户外或在冰箱中放置几分钟,然后进行测试
  • 摇动以显示当前温度。
  • 按下按键A以显示记录的最低温度。
  • 按下按键B以显示记录的最高温度。
  • 用手指同时按GND和引脚2以将最高和最低温度重设为当前温度。

第 2 步:编程

1from microbit import *
2
3# function to read data file:
4def get_nv_data(name):
5    try:
6        with open(name) as f:
7            v = int(f.read())
8    except OSError:
9        v = temperature()
10        try:
11            with open(name, 'w') as f:
12                f.write(str(v))
13        except OSError:
14            display.scroll('Cannot create file %s' % name)
15
16    except ValueError:
17        display.scroll('invalid data in file %s' % name)
18        v = temperature()
19
20    return v
21
22# function to write data file:
23def set_nv_data(name, value):
24    try:
25        with open(name, 'w') as f:
26            f.write(str(value))
27    except OSError:
28        display.scroll('Cannot write to file %s' % name)
29
30min = get_nv_data('min.txt')
31max = get_nv_data('max.txt')
32
33while True:
34    currentTemp = temperature()
35    if currentTemp < min:
36        min = currentTemp
37        set_nv_data('min.txt', min)
38    if currentTemp > max:
39        max = currentTemp
40        set_nv_data('max.txt', max)
41    if accelerometer.was_gesture('shake'):
42        display.scroll(currentTemp)
43    if button_a.was_pressed():
44        display.scroll(get_nv_data('min.txt'))
45    if button_b.was_pressed():
46        display.scroll(get_nv_data('max.txt'))
47    if pin2.is_touched():
48        display.scroll('clearing data')
49        set_nv_data('min.txt', currentTemp)
50        set_nv_data('max.txt', currentTemp)
51

工作原理

即使将micro:bit断开电源,此数据记录仪也会储存其读数。 它通过将读数储存在持久性存储器中来实现这一点。 这是一种电脑存储单元,它在关闭电源时仍会保留其内容,就像从电脑上拔下micro:bit时,它仍会保留之前已经刷入的程序一样。

它将数据储存在micro:bit上的两个文本文件中,分别为“min.txt” “max.txt”,Python程式可以读取并更新这些文件。

程序使用三个变量来追踪和比较温度:

  • currentTemp是从micro:bit的内置温度传感器读取的当前温度。
  • max是最高温度。 如果当前温度高于当前的max值,则会赋予一个新的值。
  • min是最低温度。 如果当前温度低于当前的min值,亦会赋予一个新值。

“get_nv_data”“set_nv_data”两个函数会读取数字数据并将它们写入持久性存储器的文本文件中。 这些函数将数字转换为文本并复原:

  • int()可将文本(也称为字符串)转换为数字(整数)变量,我们随后可以将该变量与当前温度进行比较。
  • str()将数字变量(如温度读数)转换为文本字符串,以便将其保存在文本文件中。

此函数使用“try”“expect”来捕捉读取或写入数据文件时的错误。 如果没有保存具有最高和最低温度的文本文件(例如,首次运行程序时),会将maxmin变量值设为当前温度。

程序的主要部分为while True:循环。 这就像Makecode中的forever模块的功能。

第 3 步:完善

  • micro:bit的温度传感器位于处理器内部,因此它提供的温度读数通常会高于周围气温。 使用一般的温度计测量差异,并通过从temperature()读数中减去差值来向程序添加偏差。
  • 更改程序以记录各种数据,例如由加速度计测出的力值。
  • 添加无线电功能还可以将数据发送到位于别处的另一个micro:bit。
了解有关在Python中储存数据的更多信息