我使用带有蓝牙适配器的树莓派来模拟灯塔。我想测量移动应用程序在覆盆子中更改它时检测信标的UUID所需的时间。通过这段代码,我找到了智能手机用来同步磁贴的服务器
final Resources res = this.getResources();
final int id = Resources.getSystem().getIdentifier(
"config_ntpServer", "string","android");
final String defaultServer = res.getString(id);
比我用树莓派同步时间
sudo ntpdate -u 2.android.pool.ntp.org
在更改信标的ID之前,我打印时间
timestamp() {
date +"%T,%3N"
}
timestamp # print timestamp
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1.....
然后我比较了我第一次看到UUID时改变UUID的时间和logcat中的时间,结果总是负面的 UUID在15:33:03,276更改,并在15:33:02.301检测到。
这是同步问题吗?有更好的方法吗?
答案 0 :(得分:1)
一些想法:
默认情况下,Android设备和Pi都会自动将时间同步到NTP服务器(如果他们有网络连接)。你不应该做任何事情。
NTP守护程序并不总是立即更改时钟 - 它会随着时间的推移缓慢调整它,以免通过立即跳转来扰乱linux进程。由于Raspberry Pi没有实时时钟,因此启动时总是有不正确的时间。在与Android设备同步之前,您可能需要在启动后等待几分钟。
NTP并不完美。在使用互联网时间服务器时,不要期望让您的时钟同步到超过几十毫秒。由于蓝牙检测时间可以非常快(也在10毫秒的范围内),如果您的检测时间为-100毫秒,则可能在此设置的限制范围内。
您所展示的是大约-1.0秒的检测时间。这表明时间不太好。我怀疑Pi是问题并在那里排除故障。在两台设备上并排显示毫秒级的时间进行故障排除可能会有所帮助。