インターネットに繋がらない環境でもPCやMac、マイコンなどで正確な時刻合わせを行いたい(*´ェ`)
GPSから時刻を取得してNTPサーバを作れば良さそう(*゚ェ゚*) ということで作ってみた(*゚ェ゚*)

使用部品は
・GPS受信機 GT-505GGBL5-DR-N 1つ
・マイコンボード W55RP20-EVB-Pico 1つ
GT-505GGBL5-DR-Nは1PPS出力も付いていてUARTで通信する(*゚ェ゚*)
1PPS出力を使用して精度を上げて信号確認用にLEDも付けてみると1Hzでピカピカしている(*´ェ`)
W55RP20-EVB-Pico は Raspberry Pi Pico互換のマイコンボードでRP2040とTCP/IPコントローラーW5500を統合したSoC「W55RP20」を搭載している(*゚ェ゚*)
Raspberry Pi Picoにイーサネット接続機能も使えて便利(*゚ェ゚*)
Raspberry Pi Pico側でNTPサーバを稼働させて各端末からはNTPクライアントで接続してもらえば良い(*´ェ`)
GPS/GNSSやNTPサーバの情報が見られたら良いなと思ったので簡易HTTPサーバも搭載してみた(*゚ェ゚*)
こうなるとネットワーク周りの設定値も変えられると便利かもと思い実装してみた(*´ェ`)
sntpコマンドで確認すると
$ sntp -d 192.168.11.88
sntp_exchange {
result: 0 (Success)
header: 24 (li:0 vn:4 mode:4)
stratum: 01 (1)
poll: 00 (1)
precision: FFFFFFEC (9.536743e-07)
delay: 0000.0000 (0.000000000)
dispersion: 0000.5F37 (0.371932983)
ref: 47505373 ("GPSs")
t_ref: EDCE4F6E.E2A6DED8 (3989720942.885358741)
t1: EDCE4F6E.7ABC0E38 (3989720942.479431999)
t2: EDCE4F6E.E2A6DED8 (3989720942.885358741)
t3: EDCE4F6E.E2A76510 (3989720942.885366741)
t4: EDCE4F6E.7DB77C02 (3989720942.491080999)
offset: 0000000000000000.666D5CD700000000 (0.400106242)
delay: 0000000000000000.02FAE79200000000 (0.011641000)
mean: 00000000EDCE4F6E.E2A721F400000000 (3989720942.885362625)
error: 0000000000000000.5F37000000000000 (0.371932983)
addr: 192.168.11.88
}
sntp_exchange {
result: 0 (Success)
header: 24 (li:0 vn:4 mode:4)
stratum: 01 (1)
poll: 00 (1)
precision: FFFFFFEC (9.536743e-07)
delay: 0000.0000 (0.000000000)
dispersion: 0000.695F (0.411605835)
ref: 47505373 ("GPSs")
t_ref: EDCE4F6E.ECF55EB4 (3989720942.925619048)
t1: EDCE4F6E.7DC810A5 (3989720942.491333999)
t2: EDCE4F6E.ECF55EB4 (3989720942.925619048)
t3: EDCE4F6E.ECF5B297 (3989720942.925624048)
t4: EDCE4F6E.88432CA5 (3989720942.532274999)
offset: 0000000000000000.69EFEA0080000000 (0.413817048)
delay: 0000000000000000.0A7AC81D00000000 (0.040936000)
mean: 00000000EDCE4F6E.ECF588A580000000 (3989720942.925621510)
error: 0000000000000000.695F000000000000 (0.411605835)
addr: 192.168.11.88
}
sntp_exchange {
result: 0 (Success)
header: 24 (li:0 vn:4 mode:4)
stratum: 01 (1)
poll: 00 (1)
precision: FFFFFFEC (9.536743e-07)
delay: 0000.0000 (0.000000000)
dispersion: 0000.7387 (0.451278687)
ref: 47505373 ("GPSs")
t_ref: EDCE4F6E.F7429FCB (3989720942.965860354)
t1: EDCE4F6E.885F394B (3989720942.532702999)
t2: EDCE4F6E.F7429FCB (3989720942.965860354)
t3: EDCE4F6E.F7430475 (3989720942.965866354)
t4: EDCE4F6E.928900C5 (3989720942.572402999)
offset: 0000000000000000.69CEB51800000000 (0.413310355)
delay: 0000000000000000.0A2962D000000000 (0.039694000)
mean: 00000000EDCE4F6E.F742D22000000000 (3989720942.965863228)
error: 0000000000000000.7387000000000000 (0.451278687)
addr: 192.168.11.88
}
sntp_exchange {
result: 0 (Success)
header: 24 (li:0 vn:4 mode:4)
stratum: 01 (1)
poll: 00 (1)
precision: FFFFFFEC (9.536743e-07)
delay: 0000.0000 (0.000000000)
dispersion: 0000.7DF0 (0.491943359)
ref: 47505373 ("GPSs")
t_ref: EDCE4F6E.01911558 (3989720942.006120046)
t1: EDCE4F6E.92B4FA48 (3989720942.573073999)
t2: EDCE4F6E.01911558 (3989720942.006120046)
t3: EDCE4F6E.01917A02 (3989720942.006126046)
t4: EDCE4F6E.9D425F20 (3989720942.614293999)
offset: FFFFFFFFFFFFFFFF.69959AF900000000 (-0.587560953)
delay: 0000000000000000.0A8D002E00000000 (0.041214000)
mean: 00000000EDCE4F6E.019147AD00000000 (3989720942.006123066)
error: 0000000000000000.7DF0000000000000 (0.491943359)
addr: 192.168.11.88
}
sntp_exchange {
result: 0 (Success)
header: 24 (li:0 vn:4 mode:4)
stratum: 01 (1)
poll: 00 (1)
precision: FFFFFFEC (9.536743e-07)
delay: 0000.0000 (0.000000000)
dispersion: 0000.8818 (0.531616211)
ref: 47505373 ("GPSs")
t_ref: EDCE4F6E.0BDEAA52 (3989720942.046366353)
t1: EDCE4F6E.9D5A187A (3989720942.614655999)
t2: EDCE4F6E.0BDEAA52 (3989720942.046366353)
t3: EDCE4F6E.0BDEED6E (3989720942.046370353)
t4: EDCE4F6E.A723FEE2 (3989720942.652892999)
offset: FFFFFFFFFFFFFFFF.699FC03200000000 (-0.587406147)
delay: 0000000000000000.09C9A34C00000000 (0.038233000)
mean: 00000000EDCE4F6E.0BDECBE000000000 (3989720942.046368122)
error: 0000000000000000.8818000000000000 (0.531616211)
addr: 192.168.11.88
}
selected:
sntp_exchange {
result: 0 (Success)
header: 24 (li:0 vn:4 mode:4)
stratum: 01 (1)
poll: 00 (1)
precision: FFFFFFEC (9.536743e-07)
delay: 0000.0000 (0.000000000)
dispersion: 0000.5F37 (0.371932983)
ref: 47505373 ("GPSs")
t_ref: EDCE4F6E.E2A6DED8 (3989720942.885358741)
t1: EDCE4F6E.7ABC0E38 (3989720942.479431999)
t2: EDCE4F6E.E2A6DED8 (3989720942.885358741)
t3: EDCE4F6E.E2A76510 (3989720942.885366741)
t4: EDCE4F6E.7DB77C02 (3989720942.491080999)
offset: 0000000000000000.666D5CD700000000 (0.400106242)
delay: 0000000000000000.02FAE79200000000 (0.011641000)
mean: 00000000EDCE4F6E.E2A721F400000000 (3989720942.885362625)
error: 0000000000000000.5F37000000000000 (0.371932983)
addr: 192.168.11.88
}
+0.400106 +/- 0.383574 192.168.11.88 192.168.11.88
stratum: 01 (1)というのが確認できる(*´ェ`)自分で作ったのだから当たり前だけど…
















