CircuitPython: Echtzeituhr (RTC) mit NTP-Server einstellen
Der Raspberry Pi Pico hat eine Echtzeituhr (Real-time Clock, RTC), die aber mangels eigener Stromversorgung die Uhrzeit nicht dauerhaft mitführen kann. Das heißt, die interne RTC beginnt bei jedem Neustart des Picos wieder von vorne. Trotzdem kann man die RTC für zeitabhängige Funktionen nutzen. Wenn aber die Funktionen von einem konkreten Datum oder der Uhrzeit abhängig ist, dann muss vorher eingestellt werde. Eine Möglichkeit wäre ein externes RTC-Modul mit integrierter Batterie. Aber auch die muss zumindest einmal manuell eingestellt werden.
Hinweis: Wenn Du den Thonny-Editor zum Programmieren verwendest, dann stellt dieser automatisch die Uhrzeit der Echtzeituhr auf dem verbundenen Pico ein.
Eine echte Alternative kann hier der Raspberry Pi Pico W sein, der dank WLAN auf das Internet zugreifen kann, sofern ein WLAN mit Internet-Zugang verfügbar ist. Im Internet gibt es Zeit-Server, von denen man die aktuelle Uhrzeit und das Datum abfragen kann. Hierfür gibt es mit NTP (Network Time Protocol) sogar ein eigenes Kommunikationsprotokoll.
Im folgenden CircuitPython-Programmcode geht es darum, eine Verbindung zum WLAN herzustellen und anschließend Datum und Uhrzeit von einem Zeitserver per NTP abzurufen und die interne RTC des Raspberry Pi Pico W einzustellen.
CircuitPython-Bibliothek für die NTP-Zeitabfrage
Zum Abfragen eines NTP-Servers gibt es von Adafruit eine Bibliothek. Die erforderliche Bibliothek befindet sich in einem Bundle mit allen Bibliotheken für CircuitPython von Adafruit.
Hier muss man das Bundle als ZIP-Datei herunterladen. Zu beachten ist, dass man die Version herunterlädt, die zur CircuitPython-Version auf dem Raspberry Pi Pico passt. Welche das ist, zeigt die Thonny Python IDE in der Kommandozeile an, wenn man den Raspberry Pi Pico mit dem Host-Computer verbindet.
Nach dem Download entpackt man die ZIP-Datei und kopiert die Datei „adafruit_ntp“ von „lib“ in das Verzeichnis „lib“ auf dem Pico. Damit ist die Installation der Bibliothek erledigt.
Hinweis: Die Bibliothek berücksichtigt weder die Sommerzeit noch die Ortszeit. Die Zeitabfrage fordert einfach die UTC von einem NTP-Server an. Abweichende Zeitzonen und regionale Zeitumstellungen muss man selber implementieren.
Programmcode
Der Programmcode stellt eine Verbindung zum WLAN her, sofern keine besteht. Gleich danach wird die Verbindung zum NTP-Server initialisiert, die Zeit abgefragt und die UTC zurückgeliefert. Dann wird die Echtzeituhr (RTC) gesetzt und Datum und Uhrzeit mit drei verschiedenen Werten ausgegeben.
# Bibliotheken laden import os import wifi import adafruit_ntp import socketpool import time import rtc # WLAN-Zugangsdaten WLAN_NAME = os.getenv('CIRCUITPY_WIFI_SSID') WLAN_PW = os.getenv('CIRCUITPY_WIFI_PASSWORD') # WLAN-Verbindung herstellen if wifi.radio.connected is False: print('Mit WLAN verbinden:', WLAN_NAME) wifi.radio.connect(WLAN_NAME, WLAN_PW) # Verbindung zum NTP-Server initialisieren pool = socketpool.SocketPool(wifi.radio) ntp = adafruit_ntp.NTP(pool, tz_offset=1) # Zeit abfragen ntp_datetime = ntp.datetime # RTC setzen rtc.RTC().datetime = ntp_datetime # Datum/Uhrzeit ausgeben print(' NTP:', ntp_datetime) print(' RTC:', rtc.RTC().datetime) print('time:', time.localtime())
Der Zugriff auf „ntp.datetime“ löst die NTP-Zeitanforderung aus, es sei denn, es gab bereits eine aktuelle Anforderung. Wenn der NTP-Server (von Adafruit) nicht erreichbar ist, dann löst das einen „OSError“ aus. Im Produktiveinsatz ist hier eine Fehlerbehandlung zu empfehlen.
Erweiterung
Die Ausgabe von Datum und Uhrzeit erfolgt als Tuple. Alternativ besteht die Möglichkeit beides formatiert auszugeben.
Weitere verwandte Themen:
- Raspberry Pi Pico W als WLAN-Client (mit CircuitPython)
- Raspberry Pi Pico: TOP 10 Tipps und Tricks für CircuitPython
- Raspberry Pi Pico: Grundlegende Befehle von CircuitPython
- Raspberry Pi Pico: CircuitPython-Programmier-Kurs
- Raspberry Pi Pico: CircuitPython
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.