Клиент-сервер ESP32 NTP: получение даты и времени — Arduino IDE

Klient Server Esp32 Ntp Polucenie Daty I Vremeni Arduino Ide



ESP32 — это плата Интернета вещей (IoT) на базе микроконтроллера, которая может взаимодействовать с широким спектром устройств. ESP32 широко используется в проектах, основанных на IoT.

Работа с ESP32 или любым другим временем микроконтроллера очень важна, так как встроенный таймер не так точен, поэтому мы можем использовать НТП сервер для получения данных в реальном времени и может хранить их в переменной, которую можно использовать позже в коде ESP32.

Протокол сетевого времени (NTP) использует всемирное координированное время (UTC), которое синхронизирует системные часы с высокой точностью и точностью. В небольших сетях NTP может предоставить нам часы с точностью до 1 мс, в то время как в более крупных сетях, таких как LAN (локальная сеть) NTP может обеспечить точность до десятков миллисекунд через Интернет. Используя эти точные часы, ESP32 может выполнять инструкции в определенное время.







Это руководство содержит следующее содержание:



  1. Введение в NTP (протокол сетевого времени)
  2. NTP-сервер и настройки времени



  3. Печать в реальном времени с помощью функции printLocalTime()





1: Введение в NTP (протокол сетевого времени)

НТП — это аббревиатура от Н сеть Т сделать п rotocol — это стандарт, используемый для синхронизации времени устройств с их часовым поясом. Протокол сетевого времени синхронизирует время всех сетевых устройств с UTC, также известным как всемирное координированное время.

UTC похоже на GMT (время по Гринвичу), но оно не меняется и остается одинаковым во всем мире. Основная идея использования UTC заключается в том, чтобы считывать время с НТП server, и, применяя смещение UTC, мы можем получить местное время в соответствии с нашим часовым поясом.



2: NTP-сервер и настройки времени

Чтобы прочитать время с сервера NTP, нам нужно объявить следующие переменные внутри кода, используя эти переменные, мы можем получить время с сервера NTP.

  • NTP-сервер
  • Смещение по Гринвичу
  • Смещение дневного света

2.1: NTP-сервер

Мы запросим время от pool.ntp.org который содержит мировые данные о времени на сервере, и любой может запросить свое местное время, используя этот пул. Ниже приведены некоторые другие серверы, к которым мы можем получить доступ:

Область Имя хоста
Мировой pool.ntp.org
Азия asia.pool.ntp.org
Европа europe.pool.ntp.org
Северная Америка северная америка.pool.ntp.org
Океания Oceania.pool.ntp.org
Южная Америка Южная Америка.pool.ntp.org

2.2: Смещение по Гринвичу

Смещение по Гринвичу описывает разницу во времени в часах между часовым поясом, в котором вы живете, и временем по Гринвичу. Например, если мы используем часовой пояс США, мы можем установить его на Всемирное координированное время = -11:00 .

2.3: Смещение дневного света

Здесь летнее смещение — это летнее время, которое обычно принимается равным 1 часу. Переход на летнее время означает перевод часов на 1 час вперед летом и перевод их обратно зимой. Эта команда обычно используется, когда используется пользовательский часовой пояс и применяется правило перехода на летнее время.

Поскольку мы рассмотрели основы NTP-сервера, теперь мы проверим, как мы можем отправить запрос на NTP-сервер и прочитать местное время, используя ESP32 с кодом Arduino IDE.

3: Печать в реальном времени с помощью функции printLocalTime()

печать по местному времени () функция будет вызывать получить местное время () функция, которая отправляет запрос на NTP-сервер и сохраняет полученные дату и время внутри информация о времени переменная.

3.1: Код для печати в реальном времени

Вставьте данный код для клиентского сервера NTP в редактор Arduino IDE. Подключите ESP32 к ПК, выберите COM-порт и загрузите код.

#include
#include 'время.ч'
константный символ * ssid     = 'REPLACE_WITH_YOUR_SSID';
константный символ * пароль = «ЗАМЕНИТЬ_С_ВАШИМ_ПАРОЛЕМ»;
константный символ * нтпсервер = 'pool.ntp.org' ;
константное длинное gmtOffset_sec = 18000 ; /* СМЕЩЕНИЕ по Гринвичу + 5 ЧАСЫ ( 18000 СПК ) */
const int   daylightOffset_sec = 3600 ; /* 1 часовое смещение дневного света */
недействительным printLocalTime ( )
{
структура tm timeinfo;
если ( ! getLocalTime ( & информация о времени ) ) {
Серийный.println ( «Не удалось получить время» ) ;
возвращаться ;
}
Серийный.println ( & информация о времени, '%A, %B %d %Y %H:%M:%S' ) ;
}
недействительная установка ( )
{
Серийный.начало ( 115200 ) ;
// подключиться к Wi-Fi
Серийный.printf ( 'Подключение к %s' , ССИД ) ;
WiFi.начать ( ssid, пароль ) ;
пока ( Статус WiFi ( ) ! = WL_CONNECTED ) {
задерживать ( 500 ) ;
Серийный.печать ( '.' ) ;
}
Серийный.println ( ' СВЯЗАНО' ) ;
// инициируйте и получите время
время конфигурации ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// отключить Wi-Fi в качестве Это больше не нужен
WiFi.отключить (истина);
WiFi.режим(WIFI_OFF);
}
пустой цикл ()
{
задержка(1000);
печатьМестноеВремя();
}

Код начался с включения WiFi и библиотеки времени. Wi-Fi библиотека поможет связать ESP32 с сетью при время библиотека будет обрабатывать синхронизацию с сервером NTP.

После этого определяется SSID и пароль сети, к которой будет подключаться ESP32. Замените свои сетевые учетные данные здесь. После этого мы определили Смещение по Гринвичу как 18000 секунд, что составляет (UTC + 5 часов). Здесь вы можете заменить свой собственный часовой пояс UTC. Следовать ссылка на сайт чтобы получить Смещение по Гринвичу для вашего часового пояса.

Кроме того, адрес NTP-сервера задается с помощью команды:

константный символ * нтпсервер = 'pool.ntp.org' ;

Эта команда автоматически выбирает сервер времени, который будет вас искать. Однако мы также можем установить часовой пояс, используя серверы NTP, описанные в NTP-сервер раздел.

В конце мы настраиваем ESP32 в качестве NTP-клиента и получаем дату и время. Для этого мы использовали конфигвремя() функция.

Наконец, с помощью печать по местному времени () функция, текущая дата и время печатаются на последовательном мониторе. Эта функция содержит временную структуру тм который хранит всю информацию в информация о времени переменная.

Следующие команды представляют информация о времени структура.

Серийный.println ( & информация о времени, '%A, %B %d %Y %H:%M:%S' ) ;

Каждая буква структуры времени относится к определенной информации:

Спецификаторы Информация
Возвратный день недели
Месяц возврата
%d День месяца возврата
%Y Вернуть текущий год
%ЧАС Вернуть текущий час
Вернуть текущие минуты
%S Вернуть текущие секунды

3.2: Выход

После загрузки кода ESP32 подключится к сети Wi-Fi и отправит запрос на сервер NTP для получения текущей даты и времени. Следующий вывод можно увидеть на последовательном мониторе Arduino.

Текущее время на моем ПК и ESP32 совпадает.

Мы успешно прочитали время с NTP-сервера, используя ESP32 в качестве клиента.

Вывод

Время очень важно для приложений, таких как отметка времени и выполнение инструкций в определенное время для создания выходных данных. Встроенные таймеры не так точны, поэтому мы можем использовать NTP-сервер для чтения текущего времени и даты. Это время можно сохранить в переменной для использования внутри нашего кода. Этот урок поможет узнать точное время в любом часовом поясе мира с помощью ESP32.