我添加了
ntp
,并通过ntpd
通过UMTS 3G加密狗或以太网将时间与通用ntp池同步。此板与Olimex的一些ESP32 PoE板通过非托管交换机连接。
用途
ESP32板具有传感器,这些传感器收集信息并为其添加时间戳,然后通过以太网将其发送到运行在主嵌入式板上的InfluxDB,使其成为有线传感器网络。 。这些ESP32板上还带有RTC DS3231,所以我希望它们首先从运行在此嵌入式板上的NTP服务器获取时间来同步RTC,然后将信息发送到InfluxDB。
问题
如何在嵌入式板上创建NTP服务器?我可以在
ntp.conf
文件中添加一行,以用于例如提高服务器的性能。 192.168.4.11
的NTP服务器?在我的arduino代码中使用该IP地址,我可以要求提供时间戳记。如果进行测试,如果我以某种方式在嵌入式主板上设置了NTP服务器,该如何初步测试来自它的时间?是否有命令行实用程序来轮询NTP服务器,以查看时间是否正确(在常规计算机上)?
#1 楼
查询的精确描述初始NTP时间同步
在Yocto构建系统中,在
conf/local.conf
下添加ntp
配方,如下所示: IMAGE_INSTALL_append = " ntp"
在目标板上,首先停止
systemd
服务: systemctl stop ntp
假设板是连接到互联网:
ntpd -gq
信息:使用
date
检查时间为了安全起见,还将硬件时钟同步到NTP时间:
hwclock -w --localtime
重新启动
systemd
服务 systemctl start ntp
设置一个嵌入式板上的本地NTP服务器
停止
systemd
服务: systemctl stop ntp
编辑
/etc/ntp.conf
,以使嵌入式板在端口123上广播NTP时间戳。添加以下行: # Here the IP Address could that of your board but make sure to use
# Broadcast address (x.x.x.255) and if you have a larger network
# select your subnet masks accordingly
broadcast 192.168.1.255
重新启动
systemd
服务:systemctl start ntp
使用传感器编号实现时间同步des
假设其中有一块可以用Arduino编程的板子;下载
NTPClient
Arduino库。在您的Sketch中,使用
NTPClient
构造函数通过其IP地址连接到本地NTP服务器。NTPClient timeServer(ntpUDP, "192.168.1.123", 0, 60000);
并从本地NTP服务器获取时间戳
参考文献
NTPClient Arduino库
询问@hardillb的答案提到的Ubuntu SE查询以上
#2 楼
为了回答您的拳头问题,我将指向“询问Ubuntu”答案:https://askubuntu.com/questions/14558/how-do-i-setup-a-local-ntp-server
它是Ubuntu特有的,但应该为您指出在Yocto上搜索哪些软件包的正确方向。
第二,
ntpdate <ip address of ntp server>
可用于向ntp服务器查询日期。
评论
我知道这个问题的答案是可以接受的,但是我也会考虑时间戳的精确度,以及从没有时间戳的ESP32开发板发送数据并将其添加到主菜单中是否更简单板。就个人而言,由于我通常将数据存储在MySQL或SQLite中,因此我通过声明诸如time_stamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP之类的列来让数据库为我处理。除非我需要微秒的精度,否则数据库代码已经编写并且调试良好;为什么要编写我自己的错误?