TigerJython | xx für Gymnasien |
Deutsch English |
Um beim Einschalten des micro:bit automatisch die aktuelle Datumzeit zu erhalten, kann eine externe Realtime Clock (RTC) mit einer Batterie verwendet werden. Für den Anschluss an den I2C-Hub lötet man entweder ein Grove-Kabel oder einen Grove-Stecker ein.
Der RTC-Chip speichert die aktuelle Datumzeit (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Wochentag). Mit dem Aufruf von set(yyyy, mm, dd, h, m, s, w) setzt man die aktuelle Datumzeit. Solange die Stromversorgung durch die Knopfzelle erhalten bleibt, wird die Datumzeit automatisch vorgerückt und man kann sie mit get() abrufen. |
Beispiel 1: Das Programm setzt zuerst die Datumzeit auf einen Startwert und zeigt sie dann periodisch an.
# Rtc1.py import rtc from microbit import * rtc.set(2019, 7, 11, 14, 55, 20, 2) while True: data = rtc.get() display.scroll("%02d:%02d:%02d" % (data[3], data[4], data[5])) delay(10000) |
|
Erklärungen zum Programmcode:
rtc.set(2019, 7 ,11, 14, 55, 20, 2) : Setzt die Datumzeit auf den 11. Juni 2019, 14:55:20 und den Wochentag 2 (üblicherweise Montag). Nach dem ersten Lauf kann diese Zeile auskommentiert werden, und das Programm zeigt bei jedem Start die richtige Zeit. |
Beispiel 2: Aktuelle Zeit von einem Zeitserver holen und anzeigen
Um auf das Internet zu gelangen, loggt sich der ESP32 auf einem Access Point ein, holt sich die Zeitinformation im Rohformat zuerst vom Standard-Server pool.ntp.org und dann im Stringformat vom Server ch.pool.ntp.org. Es wird das Modul ntptime verwendet.
# Rrc2.py import linkup import ntptime linkup.connectAP("mySSID", "myPassword") data = ntptime.getTimeRaw() print("Current time raw:", data) data = ntptime.getTime("ch.pool.ntp.org") print("Current time:", data) |
Erklärungen zum Programmcode:
getTimeRaw(): Liefert die Zeitinformation als Tupel (yyyy, mm, dd, h, m, s, wochentag, jahrestag) |
Beispiel 3: Mit einem NTP-Server die Realtime-Clock setzen
Ein NTP-Server kann dazu benützt werden, eine RTC zu synchronisieren. Dieses Verfahren wird oft bei PCs eingesetzt.
# Rtc3.py from microbit import * import linkup import ntptime import rtc print("Requesting time...") linkup.connectAP("mySSID", "myPassword") tme = ntptime.getTimeRaw() print("Got:", tme) rtc.set(tme) while True: data = rtc.get() display.scroll("%02d:%02d:%02d" % (data[3], data[4], data[5])) delay(10000) |
Erklärungen zum Programmcode:
ntptime.getTimeRaw(): Liefert die Datumzeit als Tupel, dieses kann unmittelbar für rtc.set() verwendet werden |