34. Lektion: NTP/RTC

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche

Vorbereitung

Für diese Lektion muss die Funktion "Synchronisiere die Echtzeituhr des Gerätes" abgeschaltet werden.
Dieses geschieht unter Werkzeuge/Optionen/Interpreter:
Echtzeituhr ausschalten

Unix-Zeit

Micropython verwendet das Zeitkonzept von UNIX/LINUX. Es zählt die Sekunden, die seit dem Beginn der Epoche vergangen sind. Bei UNIX/LINUX ist das der 1.1.1970. In Micropython wird häufig der 1.1.2000 als Epochenbeginn genommen. Beim Pico entspricht die Epoche der von UNIX/LINUX.
ACHTUNG ESP32 und Pico arbeiten mit unterschiedlichen Epochen:

MicroPython v1.20.0 on 2023-04-26; Raspberry Pi Pico W with RP2040
>>> import time
>>> time.gmtime(0)
(1970, 1, 1, 0, 0, 0, 3, 1)
>>> 
MicroPython v1.20.0 on 2023-04-26; ESP32 module with ESP32
>>> import time
>>> time.gmtime(0)
(2000, 1, 1, 0, 0, 0, 5, 1)
>>> 

NTP/RTC

Mit Micropython auf unserem Pico haben wir zwei Zeitsysteme zur Verfügung. Das Eine ist die Netzzeit, die wir uns aus dem Internet herunterladen können. Das Andere ist die interne RealTimeClock (RTC) aus der wir das aktuelle Datum und die aktuelle Uhrzeit beziehen können.
Da der Pico keine Backup-Batterie an Board hat, so wie der PC, muss die RTC beim Programmstart gestellt werden. Wenn der Pico kontakt zum Internet hat geht das ganz einfach:

# automatisches Stellen der RTC in Thonny wurde abgeschaltet.
# Thonny und der Pico wurden neu gestartet.

>>> import time

>>> import wlantools as wl
    connecting to network...
    network config: ('192.168.5.120', '255.255.255.0', '192.168.5.1', '192.168.5.1')

>>> time.localtime()
    (2021, 1, 1, 0, 0, 36, 4, 1)    # Hier sind Datum und Uhrzeit falsch.

>>> import ntptime
>>> ntptime.settime()
>>> time.localtime()
    (2024, 1, 10, 13, 33, 1, 2, 10)    # Hier sind Datum und Uhrzeit richtig.
>>> 

Mit ntptime.settime() wird die RTC mit der Netzzeit sychronisiert.

Stuff

Die RTC des ESP32 soll sehr ungenau sein.

MicroPython v1.20.0 on 2023-04-26; ESP32S3 module with ESP32S3

Type "help()" for more information.

>>> import network
>>> import ntptime
>>> from machine import RTC

# WLAN einrichten

>>> wlan = network.WLAN(network.STA_IF)
>>> wlan.active(True)
True
>>> wlan.connect('SSID', 'PW')
>>> wlan.isconnected()
False
>>> wlan.isconnected()
True
>>> wlan.ifconfig()
('192.168.5.109', '255.255.255.0', '192.168.5.1', '192.168.5.1')

# Die RTC mit NTP einstellen

>>> ntptime.settime()

# Die RTC einrichten

>>> rtc = RTC()

>>> rtc.datetime()
(2023, 9, 5, 1, 15, 39, 56, 427762)
>>> rtc.datetime()
(2023, 9, 5, 1, 16, 14, 5, 837765)
>>> rtc.datetime()
(2023, 9, 5, 1, 16, 21, 42, 597764)
>>> dir(ntptime)
['__class__', '__name__', '__dict__', '__file__', 'socket', 'struct', 'time', 'timeout', 'utime', '__version__', 'host', 'settime']
>>> ntptime.time()
747246194
>>> rtc.datetime()
(2023, 9, 5, 1, 16, 23, 49, 897771)
>>> ntptime.time()
747246234
>>> ntptime.utime
<module 'utime'>
>>> rtc.datetime()
(2023, 9, 5, 1, 16, 24, 29, 867765)
>>> ntptime.time()
747246276
>>> import time
>>> dir(time)
['__class__', '__name__', '__dict__', 'gmtime', 'localtime', 'mktime', 'sleep', 'sleep_ms', 'sleep_us', 'ticks_add', 'ticks_cpu', 'ticks_diff', 'ticks_ms', 'ticks_us', 'time', 'time_ns']
>>> time.gmtime()
(2023, 9, 5, 16, 25, 39, 1, 248)
>>> time.localtime()
(2023, 9, 5, 16, 25, 57, 1, 248)
>>> time.mktime(rtc.datetime())
747191787
>>> ntptime.time()
747246461
>>> time.mktime(rtc.datetime())
747191787
>>> ntptime.time()
747246472
>>> time.mktime(rtc.datetime())
747191788
>>> ntptime.time()
747246489
>>> 

Navigation

Zurück zur "Micropython Kurs 2023 Teil 2" Startseite
Zurück zur "Micropython Kurs 2023" Startseite
Zurück zur Programmieren Startseite
Zurück zur Wiki Startseite