我想获得arduino-esp8266的时间戳 (https://github.com/esp8266/Arduino)。
但我不知道该怎么做。
我想我们必须从互联网上获取时间,因为ESP8266没有时钟。我们是否只需要一次或每次需要时间戳时都这样做?
我已经通过wifi连接到互联网。
答案 0 :(得分:7)
NTP是远程获取时间的有效方法。像@Marcel这样的NTP库表示正在与服务器建立UDP间隔。因此,在使用之前,您无需对服务器进行任何轮询。 以下是NTP库的使用,包括1小时偏移和1分钟刷新间隔:
#include <NTPClient.h>
#include <ESP8266WiFi.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();
答案 1 :(得分:1)
看看那段代码我不认为这个微控制器直接有一个内置的时钟如上所述。虽然你有wifi,但你可以做一个网页查询来取而代之。
我会在这样的地方使用REST查询
这会给你一个json格式的时间。如果你只需要精确度+/-几秒就可以了。您可以通过设置这样的时间来降低带宽/延长电池寿命,然后使用内部计时器计算偏移量,而不是每次需要时间戳时进行查询。最终你需要重新查询时间并“纠正”它,因为你的计时器可能在很长一段时间内都不准确,而且最终可能会翻身。
如果您需要更准确的时间,那么您可能需要一个时钟。您可以尝试基于ping进行一些修正,但总的来说它需要的准确程度取决于您的项目要求。
答案 2 :(得分:1)
按@ user2927848所述,联系Internet上的特定日期/时间API。或者向您信任的服务器发送简单的HTTP请求,并阅读Date
响应标头。
如果您需要更高的精确度,可能需要使用NTP client for Arduino。