前言
首先:这个东西有什么用?
答:没有任何用处,但是能让你内网的设备时间精度达到亚毫秒级
当然,不要以这个网页为参考,实际误差要远远低于显示:
实际应该是几个微秒的误差。
材料准备
1 | 1. Orange Pi Zero LTS 一个 |
硬件配置
GPS模块
使用USB-TTL板将模块连接到电脑,使用对应的工具将GPS模块的串口波特率调整到115200(模块一般默认为9600,过低,时间报文传输时间太长,会导致延迟过高)
我使用的ATGM336H模块可以用GnssToolKit3进行配置 https://www.icofchina.com/xiazai/
其他模块可以参考手册进行配置
DS3231模块
如果你使用的是同款模块(大概率),使用烙铁拆焊掉这里的电阻以防止VCC倒灌进入电池
接线图
系统配置
参考:https://github.com/moonbuggy/Orange-Pi-Zero-GPS-NTP
下载对应的armbian系统并将系统安装到TF卡
系统初始化完成后,使用armbian-config
工具,进入System => Hardware
启用i2c0, pps-gpio, uart2
运行命令
1 | sudo sh -c "echo 'param_pps_pin=PA3' >> /boot/armbianEnv.txt" |
指定PA3为PPS输入
新建文件ds3231.dts
:
1 | /dts-v1/; |
运行命令
1 | sudo armbian-add-overlay ds3231.dts |
启用DS3231的DTS
软件配置
配置gpsd
安装
1 | sudo apt install gpsd gpsd-tools pps-tools i2c-tools |
修改配置文件/etc/default/gpsd
:
1 | # Devices gpsd should connect to at boot time. |
运行命令启动gpsd
服务:
1 | sudo systemctl daemon-reload |
运行gpsmon
查看是否有输出,如配置正确应该可以看到NMEA报文,位置,卫星数等信息
手动调整天线的位置、角度,尽量靠窗,让可见卫星数尽可能的多,使定位误差尽可能的小
配置chrony
安装:
1 | sudo apt install chrony |
创建配置文件/etc/chrony/conf.d/gpsd.conf
:
1 | refclock SHM 0 precision 1e-1 offset 0.0 delay 0.2 refid NMEA noselect |
修改配置文件/etc/default/chrony
1 | # This is a configuration file for /etc/init.d/chrony and |
配置DS3231:
1 | # E̅O̅S̅C̅ |
杂项与微调
配置上游NTP server
使用就近的NTP server
将配置文件/etc/chrony/chrony.conf
中原来的pool/server部分修改如下:
1 | server 0.cn.pool.ntp.org iburst |
offset整定
前文在配置文件/etc/chrony/conf.d/gpsd.conf
中,暂时将offset
设置为了0.0
,在chrony服务正常运行半小时后,运行命令:
1 | chronyc sourcestats |
查看NMEA
项的Offset
部分:
1 | Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev |
将Offset
的数值转化为秒,填入配置文件中,重启chrony
我的数值已经整定过了,所以只有几毫秒,未整定情况下一般会在±0.2秒。
offset值不应超过±0.45秒。
开启chrony的服务器模式
在配置文件/etc/chrony/chrony.conf
末尾,加一行:
1 | allow |
现在chrony已经可以被局域网内的设备访问到了,将服务器地址设为chrony的IP后同步时间,然后就可以截图去炫耀了。
- 本文作者: Disappear9
- 本文链接: https://thinkalone.win/orangepi-zero-ntp.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!