iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
自我挑戰組

Micropython x ESP H/W 之三十個錦囊妙計系列 第 15

[錦囊XV] NTP (網路校時) 服務時好時壞怎麼辦?

  • 分享至 

  • xImage
  •  

在這篇文章中將介紹如何使用網路時間同步的功能及如何做簡易的troubleshoot

  1. 匯入ntptime 中的settime
from ntptime import settime
  1. 直接使用settime 做網路校時
settime()
  1. 看到類似下面的字樣, 就代表網路校時成功
(2018, 10, 20, 9, 11, 19, 3, 120)

謎之音: 真的會那麼順利嗎?
筆者: /images/emoticon/emoticon02.gif

NTP 同步的時候常常會遇到網路超時而同步失敗的狀態, 如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20181029/20103824D5tPwSgSqh.png

讓筆者帶大家看看, 原始碼中寫了什麼?
[秘訣]
(1) 內建模組檔案存位於: ports\ esp8266\ modules\ ntptime.py
(2) 原來是在Query time server 後沒有取到回應的數值導致錯誤
https://ithelp.ithome.com.tw/upload/images/20181029/20103824cwAaaMYrus.png
https://ithelp.ithome.com.tw/upload/images/20181029/20103824n2J4ouZCK7.png
[秘訣] 筆者目前無法完全解決這個狀況, 採取的消極解法為多設定delay 時間或採取這次同步失敗後 等幾秒後再重新同步的作法, 這樣的成功機率就會大很多

筆者也發現在13行有定義會跟哪一台time server 做時間同步, 若想改成其他的time server 可在此修改, 但因為這是內建模組, 如果不想要重新編譯的話. 可以改由檔案的方式直接存在rom 中再去import 即可

host=pool.ntp.org

[實作] 修改host 成tw.pool.ntg.org

  1. 複製ntptime.py 成ntpd.py
cp ntptime.py ntpd.py
  1. 將host 的指向改成 tw.pool.ntp.org
host=tw.pool.ntp.org
  1. 上傳ntpd.py 到ESP01S 裝置內
ampy /dev/ttyUSB0 -b115200 put ntpd.py
* USB0 請自行換成您的裝置路徑
  1. 測試模組是否可以使用
    https://ithelp.ithome.com.tw/upload/images/20181029/20103824dXEnGmzYBO.png

上一篇
[錦囊XIV] 要如何得到目前的時間? (以台灣時區為例)
下一篇
[錦囊XVI] 連線到AP的種類有哪些及天線訊號容易被干擾嗎?
系列文
Micropython x ESP H/W 之三十個錦囊妙計31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言