Получение Epoch/Unix времени с ESP8266 NodeMCU (Arduino)
Это краткое руководство показывает, как получить epoch/unix время, используя плату ESP8266 NodeMCU с Arduino IDE. Получение epoch времени может быть полезно для создания временных меток ваших показаний, присвоения уникальных имён файлам и других приложений. Мы будем запрашивать текущее epoch время с NTP-сервера, поэтому плата ESP8266 должна иметь подключение к интернету.
Если вы хотите получить дату и время в удобочитаемом формате, мы рекомендуем следующее руководство:
Что такое 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 (протокол сетевого времени), и это сетевой протокол для синхронизации часов между компьютерными системами. Другими словами, он используется для синхронизации времени компьютерных часов в сети.
Существуют 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 время каждую секунду.
Заключение
Это было краткое руководство, показывающее, как получить epoch, также известное как unix время, с ESP8266 NodeMCU. Epoch время — это количество секунд, прошедших с 1 января 1970 года. Для получения времени нам необходимо подключиться к NTP-серверу, поэтому ESP8266 должен иметь доступ к интернету.
Если вас интересует получение даты и времени в удобочитаемом формате, обратитесь к следующему руководству:
Надеемся, что это руководство было для вас полезным. Если вы хотите узнать больше об ESP8266, ознакомьтесь с нашими ресурсами:
Спасибо за чтение.