Получение Epoch/Unix времени с ESP8266 NodeMCU (Arduino)

Это краткое руководство показывает, как получить epoch/unix время, используя плату ESP8266 NodeMCU с Arduino IDE. Получение epoch времени может быть полезно для создания временных меток ваших показаний, присвоения уникальных имён файлам и других приложений. Мы будем запрашивать текущее epoch время с NTP-сервера, поэтому плата ESP8266 должна иметь подключение к интернету.

Получение Epoch Unix времени с ESP8266 NodeMCU Arduino

Если вы хотите получить дату и время в удобочитаемом формате, мы рекомендуем следующее руководство:

Что такое epoch время?

Epoch время (также известное как Unix epoch, Unix time, POSIX time или Unix timestamp) — это количество секунд, прошедших с 1 января 1970 года (полночь UTC/GMT), не считая високосных секунд (в формате ISO 8601: 1970-01-01T00:00:00Z).

NTP (Network Time Protocol)

NTP означает Network Time Protocol (протокол сетевого времени), и это сетевой протокол для синхронизации часов между компьютерными системами. Другими словами, он используется для синхронизации времени компьютерных часов в сети.

ESP8266 NodeMCU NTP Network Time Protocol сервер клиент как это работает

Существуют NTP-серверы, такие как pool.ntp.org, которые любой может использовать для запроса времени в качестве клиента. В данном случае ESP8266 является NTP-клиентом, который запрашивает время у NTP-сервера (pool.ntp.org).

Функция получения Epoch/Unix времени на ESP8266

Для получения epoch/unix времени с ESP8266 вы можете использовать следующую функцию getTime():

// Функция, которая получает текущее epoch время
unsigned long getTime() {
  timeClient.update();
  unsigned long now = timeClient.getEpochTime();
  return now;
}

Эта функция возвращает текущее epoch время. Продолжайте чтение для полного примера.

Пример получения Epoch/Unix времени на ESP8266 NodeMCU

Скопируйте следующий код в вашу Arduino IDE. Этот код подключается к интернету и запрашивает время у NTP-сервера (pool.ntp.org).

/*
  Rui Santos
  Полная информация о проекте: https://RandomNerdTutorials.com/epoch-unix-time-esp8266-nodemcu-arduino/

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.

  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

// Замените на ваши сетевые учётные данные
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Определение NTP-клиента для получения времени
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

// Переменная для сохранения текущего epoch времени
unsigned long epochTime;

// Функция, которая получает текущее epoch время
unsigned long getTime() {
  timeClient.update();
  unsigned long now = timeClient.getEpochTime();
  return now;
}

// Инициализация WiFi
void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  initWiFi();
  timeClient.begin();
}

void loop() {
  epochTime = getTime();
  Serial.print("Epoch Time: ");
  Serial.println(epochTime);
  delay(1000);
}

Просмотреть исходный код

Вставьте ваши сетевые учётные данные в следующие переменные, и код будет работать сразу:

// Замените на ваши сетевые учётные данные
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Как работает код

Давайте кратко рассмотрим, как работает код.

Библиотеки

Сначала подключите необходимые библиотеки:

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

Сетевые учётные данные

Вставьте ваши сетевые учётные данные в следующие переменные, чтобы ESP8266 мог подключиться к вашей сети.

// Замените на ваши сетевые учётные данные
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

NTP-сервер

Определите NTP-клиент для получения времени.

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

Мы будем запрашивать время у pool.ntp.org, который является кластером серверов времени, доступных для всех.

Функция getTime()

Функция getTime() получает и возвращает текущее epoch время.

// Функция, которая получает текущее epoch время
unsigned long getTime() {
  timeClient.update();
  unsigned long now = timeClient.getEpochTime();
  return now;
}

initWiFi()

Функция initWiFi() инициализирует Wi-Fi и подключает ESP8266 к вашей локальной сети.

void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

setup()

В setup() инициализируйте монитор порта со скоростью 115200 бод.

Serial.begin(115200);

Вызовите функцию initWiFi() для инициализации Wi-Fi:

initWiFi();

Инициализируйте NTP-клиент.

timeClient.begin();

loop()

В loop() получите epoch время и сохраните его в переменной epochTime:

epochTime = getTime();

Наконец, выводите epoch время каждую секунду:

Serial.print("Epoch Time: ");
Serial.println(epochTime);
delay(1000);

Демонстрация

Загрузите код на вашу плату ESP8266. Затем откройте монитор порта со скоростью 115200 бод. Плата должна подключиться к Wi-Fi и начать выводить текущее epoch/unix время каждую секунду.

ESP8266 NodeMCU получение Epoch Unix времени монитор порта

Заключение

Это было краткое руководство, показывающее, как получить epoch, также известное как unix время, с ESP8266 NodeMCU. Epoch время — это количество секунд, прошедших с 1 января 1970 года. Для получения времени нам необходимо подключиться к NTP-серверу, поэтому ESP8266 должен иметь доступ к интернету.

Если вас интересует получение даты и времени в удобочитаемом формате, обратитесь к следующему руководству:

Надеемся, что это руководство было для вас полезным. Если вы хотите узнать больше об ESP8266, ознакомьтесь с нашими ресурсами:

Спасибо за чтение.