Krok 1: Wykonaj to
Co to jest?
Zamień swój micro:bit w samodzielny rejestrator danych, który zapisuje odczyty maksymalne i minimalne temperatury i przechowuje je nawet jeśli baterie się wyczerpią lub odłączysz zasilanie.
To program w Pythonie, ale nie musisz rozumieć Pythona, aby użyć ten program.
Czego się nauczysz
- Jak używać Pythona do odczytu i zapisu danych do nieulotnej pamięci, która pozostaje na Twoim micro:bicie nawet po odłączeniu zasilania
- Jak obsługiwać błędy w programach w Pythonie
- Jak konwertować zmienne numeryczne na łąńcuchy i na odwrót
Czego potrzebujesz
- micro:bit
- opcjonalny zestaw baterii
Jak go używać
- Pobierz plik ,hex programu i wgraj go na swój micro:bit.
- Jeśli masz pakiet baterii, dołącz go i pozostaw micro:bit tam, gdzie temperatura będzie się zmieniać. Można to przetestować, umieszczając płytkę na zewnątrz lub w lodówce i pozostawiając ją na kilka minut.
- Wstrząśnij ją, aby pokazać aktualną temperaturę.
- Naciśnij przycisk A, aby wyświetlić minimalną zarejestrowaną temperaturę.
- Naciśnij przycisk B, aby wyświetlić maksymalną zarejestrowaną temperaturę.
- Naciśnij jednocześnie GND i pin 2 palcami, aby zresetować maksymalną i minimalną temperaturę do bieżącej temperatury.
Krok 2: Zakoduj to
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
Jak to działa
Ten rejestrator danych przechowuje odczyty nawet wtedy, gdy zasilanie jest odłączone od Twojego micro:bita. Robi tak, przechowując odczyty w pamięci nieulotnej. To jest pamięć komputera, która utrzymuje zawartość po wyłączeniu zasilania, tak jak Twój micro:bit przechowuje program, który wgrałeś po odłączeniu go od komputera.
Przechowuje dane na Twoim micro:bicie w dwóch plikach tekstowych o nazwach min.txt
i max.txt
, które program w Pythonie może odczytywać i aktualizować.
Program używa trzech zmiennych do śledzenia i porównywania temperatury:
currentTemp
to bieżący odczyt temperatury z wbudowanego czujnika temperatury micro:bitmax
to maksymalna temperatura. Zostaje przypisana jej nowa wartość, jeśli bieżąca temperatura jest większa niż (>) bieżąca wartośćmax
.min
to minimalna temperatura. Zostaje przypisana jej nowa wartość, jeśli bieżąca temperatura jest mniejsza niż (<) bieżąca wartośćmin
.
Dwie funkcje, get_nv_data
i set_nv_data
odczytują i zapisują dane numeryczne do nieulotnych plików tekstowych. Te funkcje konwertują liczby na tekst i na odwrót:
int()
konwertuje tekst (nazywany również string) na zmienną liczbową (integer), którą możemy użyć do porównania z wartościa bieżącej temperatury.str()
konwertuje zmienną liczbową, jak odczyt temperatury, do łańcuch tekstowy, aby można go było zapisać w pliku tekstowym.
Funkcje używają try
i except
, aby wyłapać błędy odczytu lub zapisu plików danych. Jeśli nie ma pliku tekstowego zapisanego z maksymalną i minimalną temperaturą, na przykład podczas pierwszego uruchomienia, ustawia zmienne max
i min
jako bieżącą temperaturę.
Główna część programu działa wewnątrz pętli while True:
. Zachowuje się podobnie jak blok na zawsze w MakeCode.
Krok 3: Ulepsz to
- Czujniek temperatury w micro:bit jest umieszczony wewnątrz procesora i zwykle podaje nieco wyższe odczyty niż temparatura otaczającego powietrza. Zmierz różnicę za pomocą zwykłego termometru i dodaj przesunięcie do programu przez odjęcie różnicy od odczytu
temperature()
- Konwertuj program na logowanie różnych rodzajów danych, takich jak siły mierzone za pomocą akcelerometru.
- Dodaj funkcję radia, aby wysyłać dane do innego micro:bita znajdującego się w innej lokalizacji.
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.