Получение Epoch/Unix времени на ESP32 (Arduino)
Это краткое руководство показывает, как получить epoch/unix время, используя плату ESP32 с Arduino IDE. Получение epoch времени может быть полезно для создания временных меток ваших показаний, присвоения уникальных имён файлам и других приложений. Мы будем запрашивать текущее epoch время с NTP-сервера, поэтому ESP32 должен иметь подключение к интернету.
Если вы хотите получить дату и время в читаемом формате, мы рекомендуем следующее руководство:
Что такое epoch время?
Epoch время (также известное как Unix epoch, Unix время, POSIX время или Unix временная метка) — это количество секунд, прошедших с 1 января 1970 года (полночь UTC/GMT), без учёта високосных секунд (в формате ISO 8601: 1970-01-01T00:00:00Z).
NTP (Network Time Protocol)
NTP расшифровывается как Network Time Protocol (протокол сетевого времени) — это сетевой протокол для синхронизации часов между компьютерными системами. Другими словами, он используется для синхронизации времени компьютерных часов в сети.
Существуют NTP-серверы, такие как pool.ntp.org, которые любой может использовать для запроса времени в качестве клиента. В данном случае ESP32 является NTP-клиентом, который запрашивает время у NTP-сервера (pool.ntp.org).
Функция получения Epoch/Unix времени на ESP32
Для получения epoch/unix времени на ESP32 вы можете использовать следующую функцию getTime():
// Function that gets current epoch time
unsigned long getTime() {
time_t now;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
//Serial.println("Failed to obtain time");
return(0);
}
time(&now);
return now;
}
Эта функция возвращает текущее epoch время. Продолжайте чтение для полного примера.
Пример получения Epoch/Unix времени на ESP32
Скопируйте следующий код в вашу Arduino IDE. Этот код подключается к интернету и запрашивает время у NTP-сервера (pool.ntp.org).
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/epoch-unix-time-esp32-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 <WiFi.h>
#include "time.h"
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// NTP server to request epoch time
const char* ntpServer = "pool.ntp.org";
// Variable to save current epoch time
unsigned long epochTime;
// Function that gets current epoch time
unsigned long getTime() {
time_t now;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
//Serial.println("Failed to obtain time");
return(0);
}
time(&now);
return now;
}
// Initialize 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();
configTime(0, 0, ntpServer);
}
void loop() {
epochTime = getTime();
Serial.print("Epoch Time: ");
Serial.println(epochTime);
delay(1000);
}
Вставьте ваши сетевые учётные данные в следующие переменные, и код будет работать сразу:
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Как работает код
Давайте кратко рассмотрим, как работает код.
Библиотеки
Сначала вам нужно подключить библиотеку WiFi для подключения ESP32 к вашей локальной сети; и библиотеку time для работы со структурами времени.
#include <WiFi.h>
#include "time.h"
Сетевые учётные данные
Вставьте ваши сетевые учётные данные в следующие переменные, чтобы ESP32 мог подключиться к вашей сети.
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
NTP-сервер
Мы будем запрашивать время у pool.ntp.org — это кластер серверов времени, которые любой может использовать для запроса времени.
const char* ntpServer = "pool.ntp.org";
Функция getTime()
Функция getTime() получает и возвращает текущее epoch время. Если она не может получить время, то возвращает 0.
// Function that gets current epoch time
unsigned long getTime() {
time_t now;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
//Serial.println("Failed to obtain time");
return(0);
}
time(&now);
return now;
}
Функция initWiFi()
Функция initWiFi() инициализирует Wi-Fi и подключает ESP32 к вашей локальной сети.
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() инициализируйте Serial Monitor на скорости 115200 бод.
Serial.begin(115200);
Вызовите функцию initWiFi() для инициализации Wi-Fi:
initWiFi();
Настройте время с помощью функции configTime(). Первый и второй аргументы соответствуют смещению по GMT и переходу на летнее время. Однако, поскольку нас интересует получение epoch времени, эти аргументы должны быть равны 0. Последний аргумент — это NTP-сервер (ntpServer):
configTime(0, 0, ntpServer);
loop()
В функции loop() получите epoch время и сохраните его в переменной epochTime:
epochTime = getTime();
Наконец, выводите epoch время каждую секунду:
Serial.print("Epoch Time: ");
Serial.println(epochTime);
delay(1000);
Демонстрация
Загрузите код на вашу плату ESP32. Затем откройте Serial Monitor на скорости 115200 бод. Нажмите встроенную кнопку RST на ESP32. Плата должна подключиться к Wi-Fi и начать выводить текущее epoch/unix время каждую секунду.
Заключение
Это было краткое руководство, показывающее, как получить epoch/unix время на ESP32. Epoch время — это количество секунд, прошедших с 1 января 1970 года. Для получения времени нам нужно подключиться к NTP-серверу, поэтому ESP32 должен иметь доступ к интернету.
Если вас интересует получение даты и времени в читаемом формате, обратитесь к следующему руководству:
Мы надеемся, что это руководство было для вас полезным. Если вы хотите узнать больше об ESP32, ознакомьтесь с нашими ресурсами:
Спасибо за чтение.