Jython

16. Echtzeit-Clock


RTC-Module

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]))
    sleep(10000)
► In Zwischenablage kopieren
 

 

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.

 

NTP-Zeitserver

Internet-Zeitserver bieten Zeitdienste für weltweit mehrere hundert Millionen Systeme an. Sie benützen ein standardisiertes Datenformat, das Netzwerk Time Protocol (NTP).

Beispiel 2: Aktuelle Zeit über das Internet 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.

# 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)
► In Zwischenablage kopieren
 

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]))
    sleep(10000)
► In Zwischenablage kopieren
 

Erklärungen zum Programmcode:

ntptime.getTimeRaw(): Liefert die Datumzeit als Tupel, dieses kann unmittelbar für rtc.set() verwendet werden