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
}

, 👍1

Обсуждение

где 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


1 ответ


Лучший ответ:

2

для возврата секунд "эпохи" есть функция 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