Pico W ネットワークで日時を取得表示する

Pico W日時を取得表示する

Pico Wでインターネットから現在の日時を取得して、表示したいと思い調べると、以外にも簡単にできるので説明します。
これによりPicoWをスタンドアローンで動作させ、一定期間のデータを取得、記録する時など、いろいろ面白いことができると思います。

用意するもの

Raspberry Pi Pico W
Windowsパソコン
接続ケーブル

プログラム

前回はpicoWでWi-Fiの記事を書きましたが、今回そのWi-Fiに接続して日時を取得して表示したいと思います。前回の投稿にプログラムを1つ追加したので、2つです。

プログラム1

import time
import network
import ntptime
import machine
#自宅Wi-FiのSSIDとパスワードを入力 
ssid = '???????????'
password = '??????????'
# Wi-Fi設定 
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)
if wlan.status() != 3:
    raise RuntimeError('Wi-Fi connection failed')
else:
    print('Connected')
    status = wlan.ifconfig()
    print( 'IPアドレス = ' + status[0] )
timezone = 9
ntptime.host = "ntp.nict.jp"
ntptime.settime()
day_time = machine.RTC().datetime()
#day_timtのなかを確認するため
print(day_time)
year = day_time[0]
month = day_time[1]
day = day_time[2]
hour = day_time[4] + timezone
minutes = day_time[5]
second = day_time[6]
if hour >= 24:
    hour -= 24
    day += 1
#リスト内表記でとりあえず4年に一度だけのうるう年のみ確認
month_days = [31, 29 if year % 4 == 0 else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if day > month_days[month - 1]:
    day -= month_days[month - 1]
    month += 1
if month > 12:
    month -= 12
    year += 1
print(f"{year}/{month}/{day}  {hour},{minutes},{second}")

プログラムを簡単に説明します。
Wi-Fiに接続する部分は割愛します。
ntptime.host = “ntp.nict.jp”日時を取得しますが、日本の時刻と9時間ずれていますので
timzone = 9 です。
次にday_time = machine.RTC().datetime()の中身を調べると
(2023, 11, 9, 3, 6, 12, 15, 0)の内容でした。
4番目は何かわかりませんが日時が取れてます。
そして、うるう年も考慮【例外として、西暦年号が100で割り切れて400で割り切れない年は平年とするは考慮せず】日本時間に訂正、プリントして確認です。
下の画面です。

プログラム2

import time
import network
import ntptime
import machine
import utime
#自宅Wi-FiのSSIDとパスワードを入力 
ssid = '?????????'
password = '????????'
# Wi-Fi設定 
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)
if wlan.status() != 3:
    raise RuntimeError('Wi-Fi connection failed')
else:
    print('Connected')
    status = wlan.ifconfig()
    print( 'IPアドレス = ' + status[0] )
    
jst_time=ntptime.time() + 3600 * 9
local_t=utime.localtime(jst_time)
print(f"{local_t[0]}/{local_t[1]}/{local_t[2]}  {local_t[3]},{local_t[4]},{local_t[5]}")

こちらのプログラムの方法はネットで見つけました、非常にシンプルで使いやすいです。
jst_time=ntptime.time() + 3600 * 9 でタイムゾーン訂正です。
local_t=utime.localtime(jst_time) で配列として年日時などが帰ってきます。
結果下の画面です。

タイトルとURLをコピーしました