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:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren