{"id":14487,"date":"2025-02-22T01:00:00","date_gmt":"2025-02-22T00:00:00","guid":{"rendered":"https:\/\/www.picademie.nl\/?p=14487"},"modified":"2025-02-26T07:53:28","modified_gmt":"2025-02-26T06:53:28","slug":"de-juiste-tijd-met-ntp-pico-w","status":"publish","type":"post","link":"https:\/\/www.picademie.nl\/index.php\/2025\/02\/22\/de-juiste-tijd-met-ntp-pico-w\/","title":{"rendered":"De juiste tijd met NTP (Pico W)"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">Wanneer je een computer of tablet opstart, zal je merken dat deze de juiste tijd weergeeft. Dat komt omdat deze apparaten de tijd van het internet halen. Er zijn servers die de juiste tijd leveren, te weten <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Network Time Protocol<\/mark><\/strong> servers genoemd, afgekort: <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">NTP<\/mark><\/strong> servers. NTP servers bestaan \u200b\u200bal lang. Databasesystemen en bedrijfsservers zijn afhankelijk van ze om de systemen te synchroniseren. Mooi meegenomen is dat iedereen die wil toegang mag hebben tot deze servers.<\/pre>\n\n\n\n<p>Zoals bekend is heeft de Raspberry Pi Pico wel een RTC, maar deze houdt de actuele tijd niet vast dus ben je afhankelijk van of een <a href=\"https:\/\/www.picademie.nl\/index.php\/2020\/12\/09\/real-time-clock-ds3231\/\" target=\"_blank\" rel=\"noreferrer noopener\">externe RTC<\/a> of je moet de tijd ergens anders vandaan halen.<\/p>\n\n\n\n<p>Ik dacht dat het niet zo moeilijk kon zijn om de tijd, die de Pico van Thonny ontvangt, vast te houden als je de Pico van een batterijvoeding voorziet. Dat viel tegen! Inmiddels ben ik al een week op zoek naar een werkend script waarmee ik de actuele tijd van het internet (NTP-server) kan halen om daarmee het <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">main.py<\/mark>-script van de actuele tijd te voorzien<\/p>\n\n\n\n<p><em>Daar gaan we!<\/em><\/p>\n\n\n\n<p><strong>De verstopte bibliotheek<\/strong><\/p>\n\n\n\n<p>De website van Luc Volders wees me erop dat er voor MicroPython een speciale bibliotheek was om de tijd van een NTP server te halen. Helaas is deze niet opgenomen in de standaardbibliotheken en een beetje verborgen in de MicroPython Github Repository. Klik <a href=\"https:\/\/github.com\/micropython\/micropython-lib\/blob\/master\/micropython\/net\/ntptime\/ntptime.py\" target=\"_blank\" rel=\"noreferrer noopener\">hier <\/a>voor de link.<br><\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-dd065ced-ade6-4057-a779-fd6fc11d231b\" href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2025\/02\/ntptime.py_.zip\">Download hier de bibliotheek:  ntptime.py<\/a><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2025\/02\/ntptime.py_.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-dd065ced-ade6-4057-a779-fd6fc11d231b\">Downloaden<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>De bibliotheek haalt de tijd op van een NTP server en het script werkt de RTC ermee bij. Daarmee krijgt de RTC van de Pico de juiste tijd en dat kan gebruikt worden in je eigen (mobiele) projecten.<\/p>\n\n\n\n<p><strong>De Code<\/strong><\/p>\n\n\n\n<p>Hieronder staat het microPython script (<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">NTP_Time.py<\/mark>) om de NTP uit te lezen en om te zetten naar de actuele tijd. Vergeet niet om eerst de bibliotheek in de <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">\/lib<\/mark>-directory van de Pico te zetten alvorens het script te starten.<\/p>\n\n\n\n<p>Geef bij <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>ssid<\/strong> <\/mark>de naam van je WiFi in en bij <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>pw<\/strong><\/mark> het bijbehorende wachtwoord.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import time\nimport ntptime    \nimport machine\nimport network\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># Router credentials<\/mark>\nssid = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">WIFI_NAME<\/mark>\"   \npw = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">PASSWORD<\/mark>\"      \nprint(\"Connecting to wifi...\")\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wifi connection<\/mark>\nwifi = network.WLAN(network.STA_IF)   \nwifi.active(True)\nwifi.connect(ssid, pw)\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wait for connection<\/mark>\nwhile not wifi.isconnected():\n    pass\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wifi connected<\/mark>\nprint(\"Connected. IP: \",str(wifi.ifconfig()&#91;0], \"\\n\")) \n\nrtc = machine.RTC()\n\nrtc.datetime((2000, 1, 1, 0, 0, 0, 00, 0))\nprint(time.localtime())\n\nntptime.settime()\ntime.sleep(2)\n\ndstadjust = 1\n\nwhile True:\n    print (\"Year   = \", time.localtime()&#91;0])\n    print (\"Month  = \", time.localtime()&#91;1])\n    print (\"Day    = \", time.localtime()&#91;2])\n    hour = time.localtime()&#91;3]\n    hour = hour + dstadjust\n    print (\"Hour   = \", hour)\n    print (\"Minute = \", time.localtime()&#91;4])\n    print (\"===============\")\n    time.sleep(10)<\/code><\/pre>\n\n\n\n<p><strong>Code uitleg<\/strong><\/p>\n\n\n\n<p>Omdat dit een bijzonder stukje code is, zal ik de onderdelen apart verduidelijken.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import time\nimport ntptime\nimport machine\nimport network<\/code><\/pre>\n\n\n\n<p>De bibliotheken die we nodig hebben zijn geladen. <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">Vergeet niet de <strong>ntptime.py-bibliotheek<\/strong> te kopi\u00ebren naar de lib-map van Pico.<\/mark><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># Router credentials<\/mark>\nssid = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">WiFi name<\/mark>\"     <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wifi naam<\/mark>\npw = \"<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">WiFi password<\/mark>\"   <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wifi wachtwoord<\/mark>\nprint(\"Connecting to wifi...\")\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wifi connection<\/mark>\nwifi = network.WLAN(network.STA_IF)   <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># station mode<\/mark>\nwifi.active(True)\nwifi.connect(ssid, pw)<\/code><\/pre>\n\n\n\n<p>Zorg ervoor dat je hier de inloggegevens van jouw WiFi invult. Het programma gebruikt deze om verbinding te maken met internet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wait for connection<\/mark>\nwhile not wifi.isconnected():\n    pass<\/code><\/pre>\n\n\n\n<p>Het programma wacht tot er een verbinding met het internet tot stand is gebracht.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"># wifi connected<\/mark><br>print(\"Connected. IP: \",str(wifi.ifconfig()[0], \"\\n\")) <\/pre>\n\n\n\n<p>Voor het gemak staat het IP-nummer van de Raspberry Pi Pico in de Shell van Thonny vermeld.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rtc = machine.RTC()\n\nrtc.datetime((2000, 1, 1, 0, 0, 0, 00, 0))\nprint(time.localtime())<\/code><\/pre>\n\n\n\n<p>De RTC (real time clock) wordt geactiveerd en de datum en tijd worden in eerste instantie ingesteld op het jaar 2000, maand 1 en dag 1, 0 uur en 0 minuten.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ntptime.settime()\ntime.sleep(2)<\/code><\/pre>\n\n\n\n<p>De ntptime-bibliotheek haalt de juiste tijd van het internet en zet deze in de RTC van de Raspberry Pi Pico. Vervolgens wachten we 2 seconden tot alles tot rust is gekomen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dstadjust = 1<\/code><\/pre>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">dstadjust<\/mark> is de zomertijdaanpassing. Ik gebruik hier de waarde 1 omdat ik in Nederland woon. Pas deze waarde aan naar je eigen behoefte.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">while True:<br>    print (\"Year   = \", time.localtime()[0])<br>    print (\"Month  = \", time.localtime()[1])<br>    print (\"Day    = \", time.localtime()[2])<br>    hour = time.localtime()[3]<br>    hour = hour + dstadjust<br>    print (\"Hour   = \", hour)<br>    print (\"Minute = \", <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">time.localtime()[4]<\/mark>)<br><br>    print (\"===============\")<br>    time.sleep(10)<\/pre>\n\n\n\n<p>De while-True-lus loopt voor altijd en in de lus wordt de relevante informatie afgedrukt in Thonny&#8217;s shell.<\/p>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">time.localtime()<\/mark> is een tuple. Elk element van de tuple kan als volgt worden geadresseerd:<\/p>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">time.localtime()[X])<\/mark><\/p>\n\n\n\n<p>Hierbij vertegenwoordigt de <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">X<\/mark> de elementen van de tuple.<br><strong>0<\/strong> is het jaar, <strong>1<\/strong> is de maand, <strong>2<\/strong> is de datum, <strong>3<\/strong> is het uur en <strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">4<\/mark><\/strong> zijn de minuten. De elementen <strong>5<\/strong>, <strong>6<\/strong> en <strong>7<\/strong> zijn de seconden, de dag van de week en de dag van het jaar. Deze laatste 3 elementen worden niet gebruikt in dit project.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">    hour = time.localtime()[3]<br>    hour = hour + dstadjust<br>    print (\"Hour   = \", hour)<\/pre>\n\n\n\n<p>Eerst wordt <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">time.localtime()[3]<\/mark> gekopieerd in een variabele met de naam <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">hour<\/mark>. Vervolgens passen we die variabele aan met de <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">dstadjust<\/mark>-waarde om het juiste uur te krijgen en vervolgens printen we de waarde.&nbsp;<\/p>\n\n\n\n<p><strong>Het resultaat<\/strong><\/p>\n\n\n\n<p>Hieronder zie je hoe het programma zijn gegevens toont in Thonny&#8217;s shell.&nbsp;<br>Als je van plan bent om wat tijdgerelateerde projecten te bouwen, zou dit je op weg moeten helpen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"352\" height=\"441\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2025\/02\/Uitkomst_ntp.jpg\" alt=\"\" class=\"wp-image-14489\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2025\/02\/Uitkomst_ntp.jpg 352w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2025\/02\/Uitkomst_ntp-239x300.jpg 239w\" sizes=\"auto, (max-width: 352px) 100vw, 352px\" \/><\/figure>\n\n\n\n<p>Mocht je nog vragen en\/of opmerkingen hebben, plaats dan een reactie hieronder.<\/p>\n\n\n\n<p><em>Have A Nice Day!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Wanneer je een computer of tablet opstart, zal je merken dat deze de juiste tijd weergeeft. Dat komt omdat deze apparaten de tijd van het <a class=\"mh-excerpt-more\" href=\"https:\/\/www.picademie.nl\/index.php\/2025\/02\/22\/de-juiste-tijd-met-ntp-pico-w\/\" title=\"De juiste tijd met NTP (Pico W)\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":14523,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[728,721,725,731,726],"tags":[],"class_list":["post-14487","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handy-stuff","category-iot","category-netwerk","category-pico-w","category-remote-connectie"],"jetpack_featured_media_url":"https:\/\/www.picademie.nl\/wp-content\/uploads\/2025\/02\/NTP-pico-1.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/14487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/comments?post=14487"}],"version-history":[{"count":0,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/14487\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media\/14523"}],"wp:attachment":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media?parent=14487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/categories?post=14487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/tags?post=14487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}