我想用Arduino-ESP8266得到一个时间戳。
但我完全不知道该怎么做。
我想我们得从网上获取时间,因为ESP8266没有时钟。我们是只需要做一次还是每次都需要时间戳?
我已经通过Wi-Fi连接到互联网了。
发布于 2016-11-11 13:59:01
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();发布于 2016-11-10 04:40:14
看看这段代码,我认为这个微控制器并没有像前面提到的那样直接内置时钟。因为你有Wi-Fi,所以你可以通过网络查询来获取它。
我会对这样的地方使用REST查询:
这将为您返回JSON格式的时间。如果你只需要精确度+/-几秒钟就可以了。您可以像这样设置时间,然后使用内部计时器来计算偏移量,而不是每次需要时间戳时都进行查询,从而降低带宽/提高电池寿命。最终,你需要重新查询时间并“纠正”它,因为你的计时器可能在很长一段时间内都不准确,而且它最终可能会滚动。
如果你需要更准确的时间,那么你可能需要一个时钟。您可以尝试基于ping进行一些修正,但总而言之,它需要多精确取决于您的项目需求。
发布于 2016-11-10 05:36:09
请联系互联网as described by user2927848上的特定日期/时间API。或者向您信任的服务器发送一个简单的HTTP请求并读取Date响应头。
如果您需要更高的精度,您可能需要使用NTP client for Arduino。
https://stackoverflow.com/questions/40515177
复制相似问题