第 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”
来捕捉读取或写入数据文件时的错误。 如果没有保存具有最高和最低温度的文本文件(例如,首次运行程序时),会将max
和min
变量值设为当前温度。
程序的主要部分为while True:
循环。 这就像Makecode中的forever模块的功能。
第 3 步:完善
- micro:bit的温度传感器位于处理器内部,因此它提供的温度读数通常会高于周围气温。 使用一般的温度计测量差异,并通过从
temperature()
读数中减去差值来向程序添加偏差。 - 更改程序以记录各种数据,例如由加速度计测出的力值。
- 添加无线电功能还可以将数据发送到位于别处的另一个micro:bit。
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.