ESP32 секунды от эпохи
При использовании ESP8266 получение секунд из эпохи выполняется с помощью
NTP.begin(NTPserver, 2, true);
delay(delay_tries);
time_t t = now();
в то время как t
хранит количество секунд с 1-1-1970.
При попытке сделать то же самое, используя ESP32, я не могу получить это числовое представление.
приведенный ниже код взят из примера ESP32 — время обновления с использованием NTP-сервера (процесс выполнен правильно). НО при использовании now()
дает 1970, как будто обновление NTP никогда не происходило.
Как я могу получить время от Epoch?
#include <WiFi.h>
#include "time.h"
#include <TimeLib.h> <------- Added to original Code
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
void printLocalTime()
{
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}
void setup()
{
Serial.begin(115200);
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop()
{
delay(1000);
printLocalTime();
Serial.println(now()); <-------- Added to original code
}
@Guy . D, 👍1
Обсуждение1 ответ
Лучший ответ:
для возврата секунд "эпохи" есть функция time
в time.h
time_t now;
time(&now);
time_t
определяется как long
это время извлекается SDK ESP32 с серверов NTP, настроенных с помощью функции ESP32 Arduino configTime
EDIT: это стандартная функция C time()
поскольку time
также возвращает time_t
, вы можете использовать его как now()
... то есть time (nullptr);
, @Jaromanda X
- Документация ESP32 для "time.h"
- Установить время настенных часов или изменить смещение GMT без ntp-сервера?
- Как установить RTC в ES32 с помощью NTP-сервера?
- Ошибка при передаче `time_t` и `struct tm`, ESP32
- Обратная связь ESP32 от NTP
- (Почему) успешное завершение getLocalTime() на ESP32 занимает несколько секунд
- Не удалось преобразовать time_T из прошлого в структуру tm
- Размер структуры tm (datetime) отличается в ESP32 от linux64x
где
now ()
определен или даже используется в коде, который вы разместили?, @Jaromanda XВаш код выводит «Не удалось получить время»?, @Jaromanda X
попробуйте
time(nullptr)
вместоnow()
- посколькуnow()
даже не является допустимой функцией в коде, который вы разместили, @Jaromanda Xвы можете использовать библиотеку NTP на ESP32, а также функции времени SDK на esp8266., @Juraj
@JaromandaX - извините, теперь с 2 дополнительными строками к исходному коду, @Guy . D
@Juraj - Также с
#include <NTPClient.h>
иtimeClient.begin();
timeClient.setTimeOffset(3600);
дает тот же результат (время обновляется, но не может получить эпоху)\, @Guy . D@Guy.D - то, что вы добавили
now()
в код, который вы показали, не делает его действительным (если я попытаюсь использоватьnow()
в коде ESP32, это даже не ** скомпилировать** :p, @Jaromanda X