Точное время и дата без часов. NTP сервер точного времени.

Точное время и дата без часов. NTP сервер точного времени.

Как узнать точное время без часов. Нам понадобится только ESP. Получать время и дату будем с сервера точного времени NTP.
Сегодня будет видео, про то как узнать время и дату без часов. Используя  только ESP и доступ в интернет.  У меня на канале много видео про часы, но все они деланы на базе модуля часов DS3231, но как вы узнаете сегодня  можно сделать часы и без часов.
Для чего это может понадобиться. Например, чтобы синхронизировать разные устройства с сервером точного времени. Чтобы уменьшить само устройство и сделать его более дешёвым. А ещё оно будет меньше потреблять электричество.
Для этого мы будем использовать NTP.
NTP — это сетевой протокол для синхронизации часов. В интернете есть NTP сервера которые показывают точное время в любой точке мира, вот мы и будем забирать от туда своё время и дату.
Посмотрим что у нас получится.

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

Для работы нам понадобится одноимённая библиотека.
В ней есть 2 примера. Базовый и продвинутый.
Мы же не чайники какие-то поэтому сразу смотрим Продвинутый вариант.
Я буду показывать на своём варианте. Он отличается тем, что я его русифицировал и ввёл Тайм зону московского региона.
Если вы не знаете в какой зоне живёте, то можете посмотреть на этом сайте.
Так как в этом примере Таймзону надо указывать в секундах, вот формула для перевода. Надо свою зону умножить на 60 и ещё раз на 60. Или просто сразу умножить на 3600. У меня получилось 10800.

Здесь как обычно вставляем название сети и пароль от неё.
Создаём объект класса WiFiUdp. Так как NTPработает поверх UDP. Но вам это знать не обязательно.
Сюда записываем к какому серверу будем подключаться. Указываем зону в секундах, и время обновления данных с сервера. Я указал раз в минуту.
Теперь ждём пока подключимся к WIFI.

Если всё прошло успешно, по запускаем клиент и получаем время. Чтобы цифры не мельтишили, я сделал паузу в 1 секунду.
Посмотрим что у нас получилось. Видим, что время выводится на экран. Это именно то чего мы хотели. Этот пример нам нужен был для того чтобы узнать что мы действительно подключились к серверу. Теперь настало время для более сложного примера. Будем выводить дату, время и день недели.

Этот пример посложнее, но и более функциональней. Здесь будет не только время, но и день, месяц и год. А также день недели. Всё это может пригодиться в разных разработках, когда например надо установить будильник только по рабочим дням. Дни недели и месяцы можно выводить как цифрами, так и по названиям.

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

А перенёс я её вот сюда. Можно было и не делать такие сложные вычисления, а записать в этой функции таймзону прямо в часах.

Здесь мы постоянно обновляем данные с сервера точного времени.
Теперь давайте рассмотрим, что мы можем получить.
Первое это таймстамп.
Это 4-байтное целое число, равное количеству секунд, прошедших с полуночи 1 января 1970 года по усреднённому времени Гринвича (т.е. нулевой часовой пояс, точка отсчёта часовых поясов). При получении из базы отображается с учётом часового пояса.

Дальше идут часы, минуты и секунды. Всю грязную работу за нас делает библиотека, а нам выводятся уже готовые данные. Мы присваиваем их переменным. Чтобы потом легче было к ним обращаться.

Тоже самое с днями, месяцами и годами. Месяцы и дни недели можно выводить как в числовом формате, так и с названиями месяцев.

Ну и наконец полный вывод даты и времени. Посмотрим как это выводится в мониторе порта.
Видим, что мы имеем доступ к каждой переменной по отдельности, а это значит мы сможем теперь вывести эти значения на любой экран или дисплеи. Будь то телефон, LED, LCD или OLED дисплеи. Чем мы и займёмся с следующем видео.
Я сейчас сделал так что данные выводятся каждые 5 секунд. Но это только в мониторе порта. Так значения в переменных обновляются каждую секунду.
Я пока разбирался с NTP пробовал много различных библиотек. Вот например NTPTimeESP,  тоже неплохая библиотека. Может она кому понравится больше. Поэтому покажу как она работает.

Так же указываем адрес сервера. Дальше всё тоже самое как и везде. А здесь указываем часовой пояс и переход на летнее время. В общем у меня вот такие значения.
А вот так полученные значения о дате и времени присваиваются переменным. В основном все значения кроме года двухзначные, поэтому и переменные были созданы с типом byte.
А здесь мне пришлось из дней недели вычесть единицу, так как у них первый день недели – это воскресенье.

Смотрим, что выводится. Вроде всё правильно. Но сейчас выводятся не переменные, а массив значений и к нему мы доступа не имеем, и ничего изменить не можем. Теперь давайте немного подрехтуем скетч.

Я сделал вывод каждой переменной по отдельности, и добавил свои разделители. А ещё я убрал стандартный вывод. Смотрим как стало сейчас.
Ну конечно не шедевр, но тоже имеет право на существование. Какой библиотекой пользоваться решайте сами. И та и другая работают быстро и стабильно и какую выбирать решать вам. Я на первую потратил больше времени, и наверное по этому буду пользоваться ей.

Если вам интересна эта тема, то я могу снять ещё много видео про получение и вывод даты и времени и не только про это.
Объём вашего интереса, я буду оценивать по количеству лайков и комментариев. Чем их будет больше, тем быстрее выйдет новое видео.
Ну, а если вам нравятся мои уроки, то ставьте лайк и делитесь моими видео с другими. Это очень поможет мне в продвижении канала, а меня будет стимулировать выпускать уроки чаще и интереснее.
Вы видите ссылки на видео, которые, я думаю будут вам интересны. Перейдя на любое из этих видео вы узнаете что-то новое, а ещё поможете мне.
Спасибо.
А пока на этом всё. До встречи в новых видео.  И ещё раз спасибо за то, что досмотрели до конца.
Пока!!!