我想用Arduino-ESP8266获得时间戳。
但我不知道如何得到它。
我想我们必须从互联网上获取时间,因为 ESP8266 没有任何时钟。我们是否只需要一次或每次需要时间戳时都这样做?
我已经通过 Wi-Fi 连接到互联网。
我想用Arduino-ESP8266获得时间戳。
但我不知道如何得到它。
我想我们必须从互联网上获取时间,因为 ESP8266 没有任何时钟。我们是否只需要一次或每次需要时间戳时都这样做?
我已经通过 Wi-Fi 连接到互联网。
NTP是经过验证的远程获取时间的方法。NTP 库,如@Marcel 所表示的,正在以一定间隔与服务器建立UDP连接。所以你不需要在使用它之前对服务器进行任何轮询。
下面是一个 NTP 库的用法,它具有一小时的偏移量和一分钟的刷新间隔:
#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define NTP_OFFSET 60 * 60 // In seconds
#define NTP_INTERVAL 60 * 1000 // In miliseconds
#define NTP_ADDRESS "europe.pool.ntp.org"
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
void setup(){
timeClient.begin();
}
void loop() {
timeClient.update();
}
要随时获取时间戳或格式化时间,请使用以下函数:
String formattedTime = timeClient.getFormattedTime();
unsigned long epcohTime = timeClient.getEpochTime();
看看那个代码,我不认为这个微控制器直接有一个内置的时钟。由于您有 Wi-Fi,但您可以通过网络查询来获取它。
我会使用 REST 查询到这样的地方:
这会给你一个 JSON 格式的时间。如果您只需要精度+/-几秒钟就可以了。您可以通过设置这样的时间,然后使用内部计时器计算偏移量来降低带宽/延长电池寿命,而不是每次需要时间戳时都进行查询。最终,您需要重新查询时间并“更正”它,因为您的计时器可能在很长一段时间内都不准确,而且它最终可能会翻转。
如果您需要更准确的时间,那么您可能需要一个时钟。您可以尝试根据 ping 进行一些更正,但总而言之,它需要多准确取决于您的项目要求。
如 user2927848 所述,联系Internet 上的特定日期/时间 API 。或者向您信任的服务器发送一个简单的 HTTP 请求并读取Date
响应标头。
如果您需要更高的精度,您可能需要为 Arduino 使用NTP 客户端。