首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Arduino-ESP8266中获取时间戳?

如何在Arduino-ESP8266中获取时间戳?
EN

Stack Overflow用户
提问于 2016-11-10 04:11:18
回答 3查看 23.8K关注 0票数 11

我想用Arduino-ESP8266得到一个时间戳。

但我完全不知道该怎么做。

我想我们得从网上获取时间,因为ESP8266没有时钟。我们是只需要做一次还是每次都需要时间戳?

我已经通过Wi-Fi连接到互联网了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-11 13:59:01

NTP是一种行之有效的远程获取时间的方法。NTP库,就像@Marcel所指出的那样,以一定的时间间隔与服务器建立UDP连接。因此,在使用它之前,您不需要对服务器进行任何轮询。

以下是具有一小时偏移和一分钟刷新间隔的NTP库的用法:

代码语言:javascript
复制
#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();
}

要随时获取时间戳或格式化时间,请使用以下函数:

代码语言:javascript
复制
String formattedTime = timeClient.getFormattedTime();
unsigned long epcohTime =  timeClient.getEpochTime();
票数 15
EN

Stack Overflow用户

发布于 2016-11-10 04:40:14

看看这段代码,我认为这个微控制器并没有像前面提到的那样直接内置时钟。因为你有Wi-Fi,所以你可以通过网络查询来获取它。

我会对这样的地方使用REST查询:

https://timezonedb.com/api

这将为您返回JSON格式的时间。如果你只需要精确度+/-几秒钟就可以了。您可以像这样设置时间,然后使用内部计时器来计算偏移量,而不是每次需要时间戳时都进行查询,从而降低带宽/提高电池寿命。最终,你需要重新查询时间并“纠正”它,因为你的计时器可能在很长一段时间内都不准确,而且它最终可能会滚动。

如果你需要更准确的时间,那么你可能需要一个时钟。您可以尝试基于ping进行一些修正,但总而言之,它需要多精确取决于您的项目需求。

票数 1
EN

Stack Overflow用户

发布于 2016-11-10 05:36:09

请联系互联网as described by user2927848上的特定日期/时间API。或者向您信任的服务器发送一个简单的HTTP请求并读取Date响应头。

如果您需要更高的精度,您可能需要使用NTP client for Arduino

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40515177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档