Forum: Mikrocontroller und Digitale Elektronik NTP-Wifi-Empfänger-Modul


von Martin M. (martin9)


Lesenswert?

Hallo zusammen,

ich überlege, wie ich bei einer Röhrenuhr hin und wieder die Zeit 
korrigieren könnte. Naheliegend wäre DCF-77; aber nehmen wir mal an der 
Empfang wäre zu schwach oder gestört. GPS geht indoor kaum.


Wie wärs mit NTP: Was wäre eine einfache Möglichkeit, übers WLAN eine 
NTP-Abfrage zu machen? Technisch gesehen kann das jeder Microcontroller 
mit WLAN-Schnittstelle, mit "einfach" meine ich nicht gigabyteweise 
kryptische IDEs (Stichwort Espressif) installieren zu müssen und 
Netzwerkprotokolle in C implementieren zu müssen.

Mir fällt Micropython ein, z.B. das Wipy von Pycom oder das Pyboard D. 
Weder von ESP32 noch von Pycom bin ich ein grosser Fan und der Preis vom 
Pyboard D ist doch happig.


Weiss jemand eine andere Möglichkeit? Idealerweise wäre es ein Modul, 
das nach dem Einschalten sich ins WLAN einloggt (Zugangsdaten müsste man 
konfigurieren können), sich an einem NTP-Server einloggt und die 
aktuelle Zeit per serieller Schnittstelle verfügbar macht.


Oder ginge Mobilfunk vielleicht? Könnte man zumindest die Zeit ohne 
aktive SIM-Karte bekommen?

- Martin

von TestX (Gast)


Lesenswert?

Raspberry pi Zero. Günstig und einfach zuvprogrammieren. NTP wlan etc. 
alles verfügbar

von Martin M. (martin9)


Lesenswert?

Kannst Du den so konfigurieren, dass er nach dem Einschalten direkt z.B. 
ein Python-Programm ausführt, ohne Tastatur/Monitor?

von Johannes S. (Gast)


Lesenswert?

Für so ein paar Zeilen reicht doch ein ESP8266 und die Arduino IDE:
https://github.com/PaulStoffregen/Time/blob/master/examples/TimeNTP/TimeNTP.ino

von Gerd A. (gerd_a289)


Lesenswert?

Also ich würde den ESP8266 nehmen, eine Micropython Firmware 
draufbruzeln. Am einfachsten geht das mit dem WEMOS D1-Mini da ist das 
USB-Interface schon drauf.
Es gibt genug fertige Images und ich verwende die Teile schon eine ganze 
Zeit. NTP geht recht einfach, nur bei der Zeitzone ist es etwas 
frickelig. Aber wenn das Ding im WLAN hängt und Internetzugang hat kann 
man das auch mit einem Request leicht abhandeln. Den Code kannst zu Not 
sogar von mir haben ;). Einzige Frage wie soll denn das Interface zu der 
Röhrenuhr aussehen?

- Gerd

von Martin M. (martin9)


Lesenswert?

Hallo Gerd - super, da komme ich gegebenenfalls drauf zurück!

Wegen des Interface habe ich mir noch keine Gedanken gemacht. 
Röhrenmaster wird ein STM32, wohl als Nucleo-32. Da wäre SPI oder 
Seriell asynchron naheliegend. Eventuell so, dass man einen GPIO-Pin 
setzt und dann das WLAN-Modul die Zeit liest und zurückschickt. Ein 
extra Kommando über die Schnittstelle ist ja fast übertrieben - es sei 
denn, es fallen einem noch mehr Anwendungen ein...

- Martin

von Heinz R. (heijz)


Lesenswert?

Martin M. schrieb:
> mit "einfach" meine ich nicht gigabyteweise
> kryptische IDEs (Stichwort Espressif) installieren zu müssen und
> Netzwerkprotokolle in C implementieren zu müssen.

Martin M. schrieb:
> Idealerweise wäre es ein Modul,
> das nach dem Einschalten sich ins WLAN einloggt (Zugangsdaten müsste man
> konfigurieren können), sich an einem NTP-Server einloggt und die
> aktuelle Zeit per serieller Schnittstelle verfügbar macht.

Auch hier kann ich wieder nur sagen ESPEasy, das flashst als fertig 
kompilitiertes Teil drauf, brauchst DIch um nichts zu kümmern, das DIng 
macht erst mal sein eigenes WLAN auf, dort kannst es dann mit deinem 
eigenen WLAN verheiraten
(gibt aber bei Bedarf nauch  wesentlich einfachere Möglichkeiten über 
die serielle Schnittstelle)

Das Ding kann problemlos die Zeit über NTP holen

Nur was machst dann damit? Irgendwie muss es zu Deiner Uhr kommen? über 
die serielle Schnittstelle?
Es gibt "Rules" - auch über die Weboberfläche erreichbar

https://www.letscontrolit.com/wiki/index.php/ESPEasy_System_Variables

mit den Rules bekommst sicher die Zeit seriell  raus geschickt, aber da 
musst dich dann wohl leider doch etwas einarbeiten..

Habe mich nie mit Nixie-Uhren beschäftigt, wahrscheinlich wäre es am 
Ende am einfachsten direkt mit ESPEasy über einen /mehrere Portexpander 
die Nixie-Röhren direkt über Rules anzusteuern, brauchst ja nur 4 x 10 
Ausgänge?

Hier noch ein ganz anderes Projekt:

https://github.com/elkayem/ESP_NIXIE

von Jens M. (schuchkleisser)


Lesenswert?

Die Uhr mit einem DCF-Dekoder ausstatten, dann funzt die universell mit 
offizieller Zeit, auch wenn kein WLAN da ist.
Dann evtl. einen NTP/DCF-Adapter davorschalten für die Fälle wo DCF 
unerwünscht aber WLAN verfügbar ist: 
https://www.elektormagazine.com/labs/dcf77-emulator-with-esp8266-elektor-labs-version-150713

von Harald (Gast)


Lesenswert?

FM Radio Empfänger SI4735 mit RDS (Singlechip) wäre auch noch eine 
Möglichkeit. Beliebigen lokalen RDS Sender autotunen und die Uhrzeit aus 
dem RDS holen. Nicht sonderlich kompliziert.

Bloß nicht den unsäglichen RDA5807, der ist im RDS total verbuggt.

von oszi40 (Gast)


Lesenswert?

Jens M. schrieb:
> Uhr mit einem DCF-Dekoder ausstatten, dann funzt

Naja DCF77 funktioniert auch nicht überall zuverlässig im Keller. Man 
sollte auf jeden Fall eine Plausibilitätsprüfung vorsehen, wenn man 
nicht 78:61Uhr haben möchte. Im heutigen Störnebel von Schaltnetzteilen 
kann man "viel Spaß" haben.

von Ozvald K. (Gast)


Lesenswert?

Martin M. schrieb:
> ich überlege, wie ich bei einer Röhrenuhr hin und wieder die Zeit
> korrigieren könnte.

Hallo Martin,

ich mache es mit einer selbst entwickelten Android App. Es wird die Zeit 
über Bluetooth an die Uhr geschickt. Es wird derzeit die lokale Zeit 
genommen. Der nächste Schritt wäre die Zeit über NTP zu holen, aber das 
ist noch eine Baustelle.

von Jens M. (schuchkleisser)


Lesenswert?

oszi40 schrieb:
> Naja DCF77 funktioniert auch nicht überall zuverlässig im Keller.

Nicht zuende gelesen. Und:
Gute Empfänger und gute Software funktionieren einwandfrei in einem 
Betonkeller unter einer Betondecke an der Wand auf deren anderer Seite 
der 1,5m breite Stromkasten sitzt, und die Antenne ist auch noch mit dem 
Ende Richtung Sender ausgerichtet.
Bei mir zumindest.
Ich glaube, weder deinen noch meinen Fall kann man pauschalisieren.

Eine Software die DCF dekodieren kann ist relativ einfach, und wenn man 
den Weg mit dem NTP/DCF-Adapter geht, kann man leicht eine DCF- oder 
eine NTP-Antenne einsetzen, auch abgesetzt wenn der lokale Empfang oder 
die Antennenausrichtung schlecht ist.

von Martin M. (martin9)


Lesenswert?

Hallo zusammen,

fantastisch, was hier an Ideen zusammengekommen ist. Vielen Dank!
Raspi, ESP8266 in C oder Micropython, RDS...

Die finde ich alle sehr spannend! Den Preis für Originalität räumt aber 
Harald mit dem RDS ab. Da wäre ich nie von selbst draufgekommen.
Zwei Probleme sehe ich dabei: Wo soll die UKW-Antenne hin (Platzproblem) 
und wie sieht der Sendersuchalgorithmus aus? Fixe Frequenz? Durchscannen 
und stärksten Sender suchen? Fallback falls kein brauchbares Signal auf 
dieser Frequenz?
Trotzdem genial, weil es ohne WLAN mit allen verbundenen Problemen 
läuft.
Um den ESP8266 habe ich bisher einen Bogen gemacht; vielleicht lohnt 
sich doch noch ein Blick.

Danke nochmal - Martin

von Harald (Gast)


Lesenswert?

Martin M. schrieb:
> Wo soll die UKW-Antenne hin (Platzproblem)

Muss man schauen, irgendwo außen drum herum? Kürzere Antenne versuchen?

> und wie sieht der Sendersuchalgorithmus aus? Fixe Frequenz? Durchscannen
> und stärksten Sender suchen?

Es gibt da Funktionen, die einfach den nächsten Sender sucht. Dann kann 
man auf die Feldstärke schauen und man kann eine ganze Weile das RDS auf 
Plausibilität prüfen.

Es gibt fertige ArudinoLibs für den Baustein.

Martin M. schrieb:
> Um den ESP8266 habe ich bisher einen Bogen gemacht;

Auch das ist bocksimpel, Arduino einrichten, fertiges Beispiel laden, 
SSID, Passwort eintragen (kann ja dein GastWLAN sein, wenn Du Bedenken 
hast), fertig!

von Harald (Gast)


Lesenswert?

Martin M. schrieb:
> Oder ginge Mobilfunk vielleicht? Könnte man zumindest die Zeit ohne
> aktive SIM-Karte bekommen?

Dazu könnte ich noch beitragen, dass es tatsächlich noch Karten gibt, 
die ohne Aufladung trotzdem nicht verfallen. FONIC ist eine davon. Oder 
die Datenkarten von Things Mobile (da bin ich mir aber nicht 100% 
sicher).

von Stefan F. (Gast)


Lesenswert?

Die aktuelle Version der AT-Firmware, mit denen die Module ausgeliefert 
werden (sollten), unterstützt bereits NTP.

https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf
AT+CIPSNTPCF=1,1,"cn.ntp.org.cn","ntp.sjtu.edu.cn","us.pool.ntp.org
AT+CIPSNTPTIME?

Ansonsten kann man die Uhrzeit von jedem beliebigen Webserver des 
Vertrauens mit einem simplen HTTP-GET Befehl abrufen. Das geht ganz 
einfach per AT-Befehl. Nach dem Verbindungsaufbau zum Webserver sendet 
man den Text:

GET / HTTP/1.0\r\n\r\n

Die Antwort sind mehrere Zeilen Text, von denen eine so aussieht:

Date: Sun, 08 Nov 2020 09:28:12 GMT\r\n

Da kann man sich bequem die einzelnen Ziffern für die Uhr heraus parsen.

von Martin M. (martin9)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die aktuelle Version der AT-Firmware, mit denen die Module ausgeliefert
> werden (sollten), unterstützt bereits NTP.
Hallo Stefan, danke für den Hinweis!
Das wäre ja auch nützlich. Ich hätte das Adafruit ESP8266 breakout 
bestellt, dort ist schon NodeMCU drauf, da müsste ich die AT-Firmware 
wieder draufprogrammieren.

Wie es scheint gibt es folgende Möglichkeiten, den ESP8266 zu nutzen:
- AT-Kommandos
- C über Arduino
- Micropython (bzw. Circuitpython von Adafruit)
- NodeMCU mit Lua

Was ist denn so am verbreitetsten?
Wenn das AT-Kommandoset reicht, ist das sicher am einfachsten. Ansonsten 
programmiere ich hauptsächlich C (STM32), von Arduino bin ich nicht Fan, 
besonders der "IDE", um es mal ohne Kraftworte auszudrücken. 
Python/Micropython brauche ich auch gelegentlich. Mit NodeMCU oder Lua 
hatte ich bisher noch nichts zu tun.

- Martin

von Stefan F. (Gast)


Lesenswert?

Martin M. schrieb:
> - C über Arduino

Das ist C++

Du hast Espressif SDK vergessen, das ist C.

> Was ist denn so am verbreitetsten?

Keine Ahnung. Ich programmiere den Chip mit Arduino Framework aber einem 
"externen" besseren Editor. Inzwischen soll das SDK aber auch ganz gut 
geworden sein. Damals, als ich mich für Arduino entschied, musste man 
sich eine ganz bestimmte Linux Version installieren, um das SDK nutzen 
zu können. Darauf hatte ich keinen Bock.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.