--- disqus: paoyung --- # 適用於 MicroPython 和 ESP32 的 ntptime 模組 ###### tags: `MicroPython` `ESP32` > [color=#58f][name=Paoyung][time=Jun 03, 2022] [:snake: ℳ𝒾𝒸𝓇ℴ𝒫𝓎𝓉𝒽ℴ𝓃 隨手記](/@PaoyungChang/mpy_trifiles) ntptime module --- MicroPython因為開源之故,所以有多種版本,因此在一些模組的操作與在網路上找到的使用範例並不一致。以 ntptime 這個模組來說,為了校正時差想到的屬性就是 timezone,但目前從官網下載的 ESP32 v1.18 firmware 並沒有 ntptime.timezone,可以用 help 指令得知: ```python >>> help(ntptime) object <module 'ntptime' from 'ntptime.py'> is of type module socket -- <module 'usocket'> NTP_DELTA -- 3155673600 struct -- <module 'ustruct'> __name__ -- ntptime __file__ -- ntptime.py host -- pool.ntp.org time -- <function time at 0x3ffe5410> settime -- <function settime at 0x3ffe5420> >>> ``` timezone --- 雖沒找到 timezone 但却發現 NTP_DELTA 這個值 3155673600 有點莫名,查看原始檔 [ntptime.py](https://github.com/micropython/micropython/blob/master/ports/esp8266/modules/ntptime.py) ```python=9 #... # (date(2000, 1, 1) - date(1900, 1, 1)).days * 24*60*60 NTP_DELTA = 3155673600 #... ``` 原來 ntp 的秒數是從 1900/01/01 開始起算,而 MicroPython 是從 2000/01/01 起算,所以要做差值才能正確的計算,而台灣是 UTC+8 亦即提早 28800 秒,因此把 NTP_DELTA 改為 3155644800 就會是台灣的當地時間。 ntp server --- 再則在執行 ntptime.settime() 偶爾會出現 timeout 的異常,從原始檔中得知 ntptime.host 預設值為 pool.ntp.org,既然在台灣就用台灣的 ntp server 吧!若擔心 timeout 異常造成對時不成功,可以下參數 must=True 強制對時,就把以上這些寫成 function,以利日後使用。 :::warning :rocket: 記得要先連上網路.... 不然下了 must=True 就變成大迴圈了... ::: {%gist paoyung/c8f3dddb9cf57722532e6e24b351849d %} 三點不一樣 :coffee: --- > [color=darkgreen] > * <span class="c_black">已 UTC+8</span> > * <span class="c_black">台灣 NTP Server</span> > * <span class="c_black">可要求強制對時</span> {%hackmd /@PaoyungChang/css_01 %} {%hackmd /@PaoyungChang/intro_v0702 %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up