树莓派做一个获取GPS时间的NTP服务器

由于单位用的是内部网络,机器时间无法与internet同步,导致内网的所有设备各自为政,对工作和管理带来的麻烦说不清,为解决这个问题,决定用手里的树莓派做通过GPS获取时间,然后提供NTP服务。在某宝逛了一圈,找到一个GPS模块L76X GPS Module,91包邮,就下手拿来做测试吧!。
在这里插入图片描述

第一步:烧录系统

下载烧录树莓派系统,到官网下载了一个Raspberry Pi Imager,烧录的最新的系统;本文用的是包含桌面版的的镜像(Raspberry Pi OS),烧录好以后拔出读卡器,再插回去,修改一下无线鼠标卡顿的问题。
打开 /boot/cmdline.txt,在最后面加上空格在输入 usbhid.mousepoll=0;然后把TF卡插入树莓派开启做初始化设置。

第二步:接线

将模块上的接口依次连接到树莓派上GPIO:

树莓派GPS模块
GPIO18PPS
GPIO14(UART_TXD)RX
GPIO15(UART_RXD)TX
GNDGND
5VVCC

如下图接法:
在这里插入图片描述
这是我接好的照片:
在这里插入图片描述

第三步:配置树莓派串口

1、关闭串口登录功能
关闭树莓派的串口登陆功能,使得树莓派可以使用GPIO 14和GPIO15作为串口通信。
进入系统后,进行配置:

sudo raspi-config

选择【Interface Options】找到【Serial Port】回车进入,第一个问使用串口登录(关闭),第二个问是否开启串口(开启)

2、关闭蓝牙功能
需要注意的是Raspberry-Pi 3相比于1和2在使用串口的时候会有问题

原因是树莓派CPU内部有两个串口,一个是硬件串口(官方称为PL011
UART),一个是迷你串口(官方成为mini-uart)。在树莓派2B/B+这些老版树莓派上,官方设计时都是将“硬件串口”分配给GPIO中的UART(GPIO14&GPIO15),因此可以独立调整串口的速率和模式。而树莓派3的设计上,官方在设计时将硬件串口分配给了新增的蓝牙模块上,而将一个没有时钟源,必须由内核提供时钟参考源的“迷你串口”分配给了GPIO的串口,这样以来由于内核的频率本身是变化的,就会导致“迷你串口”的速率不稳定,这样就出现了无法正常使用的情况。

A、修改/boot/config.txt

sudo nano /boot/config.txt

把 enable_uart=0 改为 enable_uart=1;
在最后面添加

dtoverlay=pi3-miniuart-bt
force_turbo=1

B、修改/boot/cmdline.txt

sudo nano /boot/cmdline.txt

删除所有的console=xxx的语句,例如将

console=tty1 root=PARTUUID=06850cc7-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles usbhid.mousepoll=0

改为

root=PARTUUID=06850cc7-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles usbhid.mousepoll=0

C、修改蓝牙服务 /lib/systemd/system/hciuart.service

sudo nano /lib/systemd/system/hciuart.service

修改[Unit]中的After字段,由

After=dev-serial1.device

改至

After=dev-ttyS0.device

修改[Service]中的ExecStart字段,由

ExecStart=/usr/bin/btuart

改成

ExecStart=/usr/lib/hciattach /dev/ttyS0 bcm43xx 460800 noflow -

注:其中的bcm43xx真的是xx哦

保存退出后,直接reboot重启派,串口接下来可以用作通信了

D、测试串口

cat /dev/ttyAMA0

在这里插入图片描述
如果显示上面的数据,那就证明以上的工作正常了!

第四步:安装PPS-tools

A、PPS-tools

sudo apt-get install pps-tools
sudo apt-get install libcap-dev

B、修改/boot/config.txt

sudo nano /boot/config.txt

在文件的最后加入如下内容保存退出

dtoverlay=pps-gpio,gpiopin=18

C、修改/etc/modules

sudo nano /etc/modules

在文件的最后加入如下内容保存退出

pps-gpio

到此PPS-tools的安装配置完成,reboot重启派测试一下PPS是否正常

D、测试PPS是否正常

使用 lsmod | grep pps 验证模块是否正常加载
如输出下面信息,说明工作正常

在这里插入图片描述

使用 dmesg | grep pps 命令检查 PPS GPIO 是否被配置

若输出如下信息系正常
在这里插入图片描述
使用 sudo ppstest /dev/pps0 将会看到类似下面的输出
在这里插入图片描述
正常情况下每一秒输出一条,如果发现输出间隔不是一秒,可能是连线错误或者 GPS 模块未设置导致的,如果出现time_pps_fetch() error -1 (Connection timed out) 说明信号不好,试试放到室外。

第五步:安装GPSD

sudo apt install gpsd gpsd-clients python3-gps

安装后修改 /etc/default/gpsd 文件

sudo nano /etc/default/gpsd

修改如下:

DEVICES="/dev/ttyAMA0"
GPSD_OPTIONS="-n -G"

配置开机启动服务,修改/lib/systemd/system/gpsd.service文件

sudo nano /lib/systemd/system/gpsd.service

修改[Unit]中的After=chrony.serviceBefore=chrony.service

保存退出后,运行以下命令,设为开机启动

sudo systemctl enable gpsd

再reboot重启以下树莓派

接下来通过运行

cgps -s

来查看gpsd的数据,你将会看到类似下面的输出
在这里插入图片描述

第六步:安装 chrony

sudo apt install chrony -y

安装后修改配置文件 /etc/chrony/chrony.conf

sudo nano /etc/chrony/chrony.conf

在最后加上:

refclock PPS /dev/pps0 lock GPSD prefer refid PPS
refclock SHM 0 offset 0.0 delay 0.2 refid GPSD
allow

并检查一下配置文件是否包含一下内容,如果没有,就添加进去

leapsectz right/UTC
makestep 1.0 -1
rtcsync

配置完成后重启服务

sudo service chrony restart

可以通过下面两个命令来查看连接状态

watch -n1 chronyc sources -v
watch -n1 chronyc sourcestats -v

好了,现在其他设备可以直接把时间同步服务器设为树莓派的IP即可同步了!!写了一个小时,做个记录,以后忘记了可以看看!!

参考资源:
https://www.txisfine.cn/archives/b3317436
https://blog.csdn.net/xiaohu50/article/details/78731534

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352469.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

自动(智能)驾驶 | 全网第一本激光雷达手册阅读指南(下)

接着从上篇继续说,本部分主要介绍激光雷达数据等内容,这个可以说是看懂激光雷达手册的重中之重,也就是关键问题的关键(皮~)。同样由于velodyne的手册比较难啃但是内容完整丰富,本期我们依然以velodyne 128&…

GEO-SPARK 2000X PPS使用记录(三)

最近单位突然要使用GeoSpark电火花,至少有4年没有用过了。我一直没有独立操作过,只是看同事操作过,碰巧的是会使用这个设备的同事去大洋了,悲剧的是他们把所有的采集狗都拿走了,留下一个巨大的坑让我来填。 1、首先看看…

CMOS图像传感器——工作原理

一、像素阵列结构 一般像素阵列是由水平方向的行( Row ) 和垂直方向的列(Column)正交排列构成的。像素排列的最基本设计原则是:摄像器件像素排列的坐标,必须在显示的时候能够准确地还原在图像原来的相对位置上。在大多数情况下,每个像素中心线在行的方向和列的方向,即…

Kerberos从入门到精通以及案例实操系列(二)

5、安全集群使用说明 5.1、用户要求 具体要求以下使用说明均基于普通用户,安全集群对用户有以下要求: 集群中的每个节点都需要创建该用户该用户需要属于hadoop用户组需要创建该用户对应的Kerberos主体 实操,此处以atguigu用户为例&#x…

3.了解Spring Boot2自动配置原理

了解Spring Boot2自动配置原理 1、SpringBoot特点 1.1、依赖管理 1.父项目做依赖管理 依赖管理 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEAS…

Docker搭建Elasticsearch方法及启动后服务自动关闭的问题

太长不看&#xff0c;一句话总结 内存太小&#xff0c;启动命令中添加参数修改虚拟机大小即可 docker run -e ES_JAVA_OPTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:7.6.0配…

NTP自动退出问题排查

为什么80%的码农都做不了架构师?>>> 问题现象:ntp进程运行一段时间后自动退出 排查过程: 查看/var/log/message ntp异常信息如下 Feb 20 22:54:41 xnu_1 ntpd[2187]: 0.0.0.0 0617 07 panic_stop -28777 s; set clock manually within 1000 s. Feb 20 22:54:57 …

Docker部署Elasticsearch及安装后自动关闭的问题

Docker搭建Elasticsearch方法 前往dockerhub官网&#xff1a;dockerhub 可查看elasticsearch相应版本 拉取镜像 选取一个版本拉取镜像&#xff0c;如docker pull elasticsearch:7.9.2 不输入版本默认拉取最新版 启动容器 映射端口为9200和9300 docker pull elasticsearch:…

自动化基础笔记--元素操作

元素操作&#xff08;附带鼠标悬停&#xff09; 一些课程回顾&#xff0c;问题原因总结 函数只有在return的时候&#xff0c;才会返回一个数据。返回数据了才可以赋值的 报错&#xff1a; 等待时间不够返回的元素不是你想要的确实是你表达式写错了有句柄未切换或者有iframe未…

服务器设置了自动校时但是,同步时钟配置电脑自动校时

同步时钟配置电脑自动校时 一、同步时钟操作和指示灯说明。 同步时钟可接收全球定位系统GPS、北斗卫星信号。当GPS/北斗天线架设到屋顶时&#xff0c;天线的高度必须低于房屋顶避雷天线的高度&#xff0c;防止被雷击。 先关闭电源后再连接或者去掉天线。 电源指示灯&#xff1a…

计算机怎么关闭开机自启应用,如何关闭电脑开机自动启动的软件程序

如何关闭电脑开机自动启动的软件程序 我们在电脑中安装软件的时候,不小心设置了开机启动,该怎么取消呢?今天就跟大家介绍一下如何关闭电脑开机自动启动的软件程序的具体操作步骤。 1. 首先打开电脑,找到桌面上的【360安全卫士】软件,双击打开: 2. 进入主页面后,点击上方…

Latex使用algorithm2e包写伪代码

用Latex写伪代码我们需要用到一个包&#xff0c;Algorithm2e&#xff0c;这个工具包的使用手册下载地址为&#xff08;http://mlg.ulb.ac.be/files/algorithm2e.pdf&#xff09;CSDN的链接为&#xff08;&#xff09; 准备 导入该包 \usepackage[ruled,linesnumbered]{algor…

【复杂网络建模】——基于微博数据的影响力最大化算法(PageRank)

&#x1f935;‍♂️ 个人主页&#xff1a;Lingxw_w的个人主页 ✍&#x1f3fb;作者简介&#xff1a;计算机科学与技术研究生在读 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4a…

【Markdown小技巧】 整理小图标和表情符号

&#x1f40b;作者简介&#xff1a;博主是一位.Net开发者&#xff0c;同时也是RPA和低代码平台的践行者。 &#x1f42c;个人主页&#xff1a;会敲键盘的肘子 &#x1f436;座右铭&#xff1a;总有一天你所坚持的会反过来拥抱你。 &#x1f308;写在前面&#xff1a; 让博客变得…

工信部—高级软件开发工程师认证

工业和信息化部教育与考试中心是工业和信息化部直属事业单位&#xff0c;承担计算机技术与软件专业技术资格考试、通信专业技术人员职业水平考试、电子通信行业职业技能鉴定、全国信息技术人才培养工程、产业工人网络平台建设等人才培养选拔工作。 软件工程师(Software Enginee…

EasyCVR视频汇聚智能边缘网关在多平台级联及上下级对接中的应用说明

一、行业背景 近年来&#xff0c;在政务数据共享平台的建设上&#xff0c;对国家、省数据、市数据及区县对接上要求打破“信息孤岛”&#xff0c;拔掉“数据烟囱”&#xff0c;全面打通数据“脉络”的主通道。省市平台“级联对接”工作&#xff0c;由国家数据共享平台、省级数据…

水球图的使用

水球图的使用 注意&#xff1a; echarts-liquidfill3 版本匹配 echarts5 版本&#xff0c;echarts-liquidfill2 版本匹配 echarts4 版本 npm install echarts-liquidfill2.0.2 --savevue代码演示&#xff1a; <template> <div class"com-container">…

python制作水球图

水球图是一种适合于展现单个百分比数据的图表类型&#xff0c;pyecharts模块能够非常方便画出水球图&#xff0c;进而实现酷炫的数据展示效果。 下面给大家介绍一下常见水球图的实现方法&#xff1a; 一、基本水球图 from pyecharts import options as opts from pyecharts.cha…

vue3实现水球图

水球图实现的方式有很多种&#xff0c;譬如&#xff1a; a.通过canvas 的sin 绘制水波实现 b.通过canvas的贝塞尔曲线实现水波 c.通过echarts的echarts-liquidfill水球图插件实现 canvas手写水球图确实也不难&#xff0c;只不过效果没有使用echarts-liquidfill插件的好&…

动态水球效果

&#xff08;1&#xff09;首先画出两条虚线之间的弧&#xff0c;以左上的那个点为原点 <div class"wave"></div> .wave { height: 100px; background-color: rgb(125, 242, 142); margin-top…