我正在做一个物联网项目。我的物联网设备(带有 Arduino 的硬件)每分钟测量一些温度信息。并将这些数据发送到服务器。硬件有一个显示器。显示温度值和时间。我想将此时间与服务器时间同步。我不能使用 NTP,因为我没有使用 UDP。我可以使用 HTTP 来同步时间吗?有什么建议吗?
答案1
使用 NTP。它适用于 1985 年的计算机,也适用于当今的小型设备。
极有可能已经存在 NTP 守护程序或库。如果没有,则可以使用任何 IP 堆栈编写基本的 SNTP 代码。这是了解网络上的 UDP 的一个好理由。
如果 Web 服务器具有准确的时间,则 HTTP 日期标头可提供一秒的精度。openntpd 使用这个,但仅仅作为健全性检查约束。警告:日期格式不太适合机器阅读。用 Python 来做就足够了,但如果你有 Python,你可以使用ntplib...
答案2
如果您的 Arduino 设备仅处理 HTTP 请求,例如使用收集的传感器数据向服务器发送简单的 HTTP GET 请求,您可以:
- 在 GET 请求主体内返回服务器时间信息,并使用该数据定期同步 arduino 设备的时间。
- 例如调用:
GET
http://yourserver/sensordatacollector/record?temperature=22&humidity=45
- 使用返回的响应日期时间值
- 例如调用:
- 或者为服务器实现一个单独的 HTTP 端点,用于提供时间信息。Arduino 设备会定期调用此时间端点,以同步设备的时间。
- 例如调用:
GET
http://yourserver/sensordatacolletor/datetime
- 使用响应日期时间值来同步 Arduino
- 例如调用:
另请参阅https://arduinojson.org/v6/example/http-client/以供参考。
编辑:如果可能的话,您还可以利用已经开放的提供日期时间信息的 API,例如:http://worldtimeapi.org/