print(rtc.datetime())
Wenn man ein Programm mit einer aktuellen Systemzeit "stand alone" (d. h. nicht über eine Programmierumgebung wie Thonny) starten, dann beginnt die Uhr bei 00:00:00 Uhr, Samstag 1.1.2000, zu laufen. Es besteht allerdings, die Möglichkeit, ein korrektes datetime-Tupel über WLAN von einem entsprechenden Zeit-Server zu beziehen. Dies geschieht mit Hilfe der Methode settime der Klasse ntptime (mehr dazu hier).
Dies leistet das folgende Programm; die Funktionsweise wird durch Kommentare erläutert. Bei den Angaben für die SSID und das Passwort müssen Sie natürlich die Daten des von Ihnen benutzten WLAN einsetzen.
Code: Alles auswählen
# local_time_wlan_3.py
# nach: https://www.engineersgarage.com/micropython-esp8266-esp32-rtc-utc-local-time/
# Format des datetime-Tupels ist (Jahr, Monat, Tag, Wochentag(!), Stunde, Minute, Sekunde, "Subseconds")
# Dabei ergibt sich der Wochentag schon durch die restlichen Angaben.
print('MEZ durch Zeitserver bestimmen...')
print('---------------------------------')
from machine import RTC
import network
import ntptime
from time import time, sleep
def eingabe():
jahr = int(input('Jahr [4 Stellen]: '))
monat = int(input('Monat [1-12]: '))
tag = int(input('Tag [1-31]: '))
stunde = int(input('Stunde [0-23]: '))
minute = int(input('Minute [0-59]: '))
sekunde = int(input('Sekunde [0-59]: '))
datetime_list = [jahr, monat, tag, 0, stunde, minute, sekunde, 0]
datetime_tuple = tuple(datetime_list) # Liste -> Tupel
return datetime_tuple
############## hier ihre SSID und ihr Passwort einfügen ################
ssid = 'ABCDEFG'
password = 'abcdefg'
#################################################################
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(ssid, password)
print('Verbindung zum Zeitserver aufbauen ', end = '')
time0 = time()
while (station.isconnected() == False) and (time() - time0 < 5): # 5 s auf Verbindung warten
sleep(0.5)
print('.', end = '')
print()
if station.isconnected():
print('WiFi connected')
rtc = RTC() # RTC-Objekt zum Lesen und Schreiben der Systemzeit instanziieren
ntptime.settime() # setzt die Systemzeit mittels ntptime
# Jetzt GMZ in MEZ umwandeln...
datetime_list = list(rtc.datetime()) # Tupel -> Liste
datetime_list[4] = datetime_list[4] + 1 # Stundenwert um 1 erhöhen; wenn 24 addiert wird, dann Wechsel zum nächsten Tag!
datetime_tuple = tuple(datetime_list) # Liste -> Tupel
rtc.datetime(datetime_tuple) # Systemzeit neu festlegen; datetime liefert jetzt MEZ = GMT + 1 )
print('MEZ:', rtc.datetime()[4], ':', rtc.datetime()[5], ':', rtc.datetime()[6])
station.disconnect()
else:
print('Verbindung zum Zeitserver fehlgeschlagen')
print('Geben Sie hier Datum und Uhrzeit ein (MEZ): ')
datetime_tuple = eingabe()
rtc = RTC() # RTC-Objekt zum Lesen und Schreiben der Systemzeit instanziieren
rtc.datetime(datetime_tuple) # Systemzeit neu festlegen; datetime liefert jetzt MEZ = GMT + 1 )
print('MEZ:', rtc.datetime()[4], ':', rtc.datetime()[5], ':', rtc.datetime()[6])
print('ENDE')
station.active(False)