如何在 Arduino-ESP8266 中获取时间戳?
How do you get a timestamp in Arduino-ESP8266?
我想获得 Arduino-ESP8266 的时间戳。
但我不知道如何获得它。
我想我们必须从互联网上获取时间,因为 ESP8266 没有任何时钟。我们是只需要这样做一次还是每次需要时间戳时都这样做?
我已经通过 Wi-Fi 连接到互联网。
查看该代码,我认为该微控制器并没有像提到的那样直接内置时钟。由于您有 Wi-Fi,但您可以通过网络查询来获取它。
我会使用 REST 查询到这样的地方:
这会给你一个 JSON 格式化的时间。如果您只需要精度 +/- 几秒钟就可以了。您可以通过这样设置时间来降低带宽/延长电池寿命,然后使用内部计时器计算偏移量,而不是每次需要时间戳时都进行查询。最终你需要重新查询时间 'correct' 因为你的计时器可能在很长一段时间内都不准确,而且它最终可能会翻转。
如果您需要更准确的时间,那么您可能需要一个时钟。您可以尝试根据 ping 进行一些校正,但总的来说,它需要多准确取决于您的项目要求。
联系互联网上的特定 date/time API as described by user2927848. Or send a simple HTTP request to a server you trust and read the Date
回复 header。
如果您需要更高的精度,您可能需要使用 NTP client for Arduino。
NTP is the proven way of getting time remotely. NTP libraries, like @Marcel denotes, is making 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();
我想获得 Arduino-ESP8266 的时间戳。
但我不知道如何获得它。
我想我们必须从互联网上获取时间,因为 ESP8266 没有任何时钟。我们是只需要这样做一次还是每次需要时间戳时都这样做?
我已经通过 Wi-Fi 连接到互联网。
查看该代码,我认为该微控制器并没有像提到的那样直接内置时钟。由于您有 Wi-Fi,但您可以通过网络查询来获取它。
我会使用 REST 查询到这样的地方:
这会给你一个 JSON 格式化的时间。如果您只需要精度 +/- 几秒钟就可以了。您可以通过这样设置时间来降低带宽/延长电池寿命,然后使用内部计时器计算偏移量,而不是每次需要时间戳时都进行查询。最终你需要重新查询时间 'correct' 因为你的计时器可能在很长一段时间内都不准确,而且它最终可能会翻转。
如果您需要更准确的时间,那么您可能需要一个时钟。您可以尝试根据 ping 进行一些校正,但总的来说,它需要多准确取决于您的项目要求。
联系互联网上的特定 date/time API as described by user2927848. Or send a simple HTTP request to a server you trust and read the Date
回复 header。
如果您需要更高的精度,您可能需要使用 NTP client for Arduino。
NTP is the proven way of getting time remotely. NTP libraries, like @Marcel denotes, is making 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();