Ntp client ардуино

Получение даты и времени от ESP32 в Arduino IDE (NTP-клиент)

В этом уроке мы покажем вам, как получить дату и время, используя ESP32 и Arduino IDE. Если ваш проект ESP32 имеет доступ к Интернету, вы можете получить дату и время, используя сетевой протокол времени (NTP) — вам не нужно никакого дополнительного оборудования.

Клиентская библиотека NTP

Самый простой способ получить дату и время с NTP-сервера — это использовать клиентскую библиотеку NTP. Для этого мы будем использовать клиентскую библиотеку NTP, форкнутую Taranais. Выполните следующие шаги, чтобы установить эту библиотеку в Arduino IDE:

  1. Нажмите здесь, чтобы загрузить клиентскую библиотеку NTP.
  2. Разархивируйте папку .zip, и вы должны получить папку NTPClient-master.
  3. Переименуйте вашу папку из NTPClient-master в NTPClient.
  4. Переместите папку NTPClient в папку библиотек установки Arduino IDE.
  5. Наконец, заново откройте вашу среду Arduino IDE.

Получение даты и времени с NTP-сервера

Здесь мы предоставляем пример кода для получения даты и времени с NTP-сервера. Этот код — немного изменённая часть одного из примеров библиотеки.

Чтобы получить больше примеров NTP, в Arduino IDE перейдите в меню File> examples> NTPClient.

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

Давайте кратко рассмотрим код, чтобы увидеть, как он работает. Сначала вы включаете библиотеки для подключения к Wi-Fi и получаете время и создаете NTP-клиента.

Установка SSID и пароля

Введите свои сетевые учетные данные в следующих переменных, чтобы ESP32 мог устанавливать подключение к Интернету и получать дату и время с NTP-сервера.

Подготовка клиента NTP

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

Затем инициализируйте строковые переменные, чтобы сохранить дату и время.

В setup() вы инициализируете последовательную связь со скоростью 115200 бод, чтобы распечатать результаты:

Эти следующие строки подключают ESP32 к вашему маршрутизатору.

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

Вы можете использовать метод setTimeOffset (), чтобы настроить время для вашего часового пояса в миллисекундах.

Вот несколько примеров для разных часовых поясов:

  • GMT +1 = 3600GMT +8 = 28800GMT -1 = -3600GMT 0 = 0

Следующие строки гарантируют, что мы получим правильную дату и время:

Примечание: иногда NTP-клиент извлекает 1970-е годы. Чтобы этого не произошло, нам нужно принудительно установить обновление.

Получение даты и времени

Преобразуйте дату и время в читаемый формат с помощью метода getFormattedDate():

Дата и время возвращаются в следующем формате:

Если вы хотите получить дату и время отдельно, вам нужно разделить эту строку. Буква «Т» отделяет дату от времени, поэтому мы можем легко разделить эту строку. Вот что мы делаем в следующих строках.

Дата сохраняется в переменной dayStamp, а время — в переменной timeStamp. Время запрашивается и печатается каждую секунду.

Тестирование кода

Загрузите код в ESP32. Убедитесь, что вы выбрали правильную плату и COM-порт. После загрузки кода нажмите кнопку «Включить» на ESP32, и вы должны получать дату и время каждую секунду, как показано на следующем рисунке.

Источник

Network Time Protocol (NTP) Client

In this example, you will use your Ethernet Shield and your Arduino to query a Network Time Protocol (NTP) server. This way, your Arduino can get the time from the Internet.

Hardware Required

Circuit

The Ethernet shield allows you to connect a WIZNet Ethernet controller to the Arduino boards via the SPI bus. It uses the ICSP header pins and pin 10 as chip select for the SPI connection to the Ethernet controller chip. Later models of the Ethernet shield also have an SD Card on board. Digital pin 4 is used to control the slave select pin on the SD card.

The shield should be connected to a network with an Ethernet cable. You will need to change the network settings in the program to correspond to your network.

Image developed using Fritzing. For more circuit examples, see the Fritzing project page

In the above image, the Arduino board would be stacked below the Ethernet shield.

Schematic

See also

Ethernet library — Your reference for the Ethernet Library.

ChatServer — A simple server that distributes any incoming messages to all connected clients.

WebClient — Query the web and get the answer through the serial monitor

WebClientRepeating — How to make repeated HTTP requests using the Ethernet shield.

WebServer — A simple web server that shows the value of the analog input.

DhcpAddressPrinter — Get a DHCP address and print it on serial monitor.

DhcpChatServer — Connect to a Telnet server and print on serial monitor all the received messages; uses DHCP.

TelnetClient — Connect to a Telnet server and print on serial monitor all the received messages

BarometricPressureWebServer — Post data read from a pressure sensor using SPI.

UDPSendReceiveString — Send and receive text strings via the UDP protocol (Universal Datagram Packet).

Источник

Получение даты и времени от NTP сервера с помощью ESP8266 NodeMCU

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

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

Решение в этом случае – использовать протокол сетевого времени (NTP). Если у вашего проекта на ESP8266 есть доступ к Интернету, вы можете бесплатно получить дату и время (с точностью до нескольких миллисекунд от UTC). Дополнительное оборудование не требуется.

Получение даты и времени от NTP сервера с помощью ESP8266 NodeMCU

Что такое NTP?

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

Данный протокол может использоваться для синхронизации всех сетевых устройств с всемирным координированным временем (UTC) с точностью до нескольких миллисекунд (50 миллисекунд в общедоступном Интернете и менее 5 миллисекунд в среде LAN).

Всемирное координированное время (UTC) – это всемирный стандарт времени, тесно связанный с GMT (средним временем по Гринвичу). UTC не меняется, оно одинаково во всем мире.

NTP устанавливает часы компьютеров в формате UTC, любое смещение местного часового пояса или смещение летнего времени применяется уже клиентом. Таким образом, клиенты могут синхронизироваться с серверами независимо от местоположения и разницы часовых поясов.

Архитектура NTP

NTP использует иерархическую архитектуру. Каждый уровень иерархии известен как слой (англ. stratum).

На самом верху находятся высокоточные устройства для измерения времени, известные как аппаратные часы уровня 0; это, например, атомные часы, GPS или радиочасы.

Серверы слоя 1 имеют прямое соединение с аппаратными часами слоя 0 и поэтому имеют наиболее точное время.

Рисунок 1 – Иерархическая архитектура NTP со слоями

Каждый слой в иерархии синхронизируется с уровнем выше и действует как серверы для компьютеров нижнего слоя.

Как работает NTP?

NTP может работать разными способами. Наиболее распространенная конфигурация – работа в режиме клиент-сервер. Основной принцип работы следующий:

  1. клиентское устройство, такое как ESP8266, подключается к серверу с помощью протокола пользовательских датаграмм (UDP) через порт 123;
  2. затем клиент передает пакет запроса на сервер NTP;
  3. в ответ на этот запрос сервер NTP отправляет пакет с меткой времени;
  4. пакет с меткой времени содержит множество информации, такой как метка времени UNIX, точность, задержка или часовой пояс;
  5. затем клиент может проанализировать текущие значения даты и времени.

Рисунок 2 – Работа с NTP-сервером: передача пакета запроса и метки времени

Подготовка IDE Arduino

Хватит теории, приступим к практике!

Но прежде чем углубляться в данное руководство, вы должны установить в вашу Arduino IDE дополнение для ESP8266. Чтобы подготовить Arduino IDE к работе с ESP8266 (если вы еще этого не сделали) следуйте инструкциям из статьи по ссылке ниже:

Установка библиотеки NTP-клиента

Самый простой способ получить дату и время с сервера NTP – это использовать клиент NTP из библиотек Arduino. Выполните следующие шаги, чтобы установить эту библиотеку в свою Arduino IDE.

Перейдите в раздел Скетч → Подключить библиотеку → Управлять библиотеками…. Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте результаты поиска, набрав «ntpclient». Должна остаться пара записей. Ищите NTPClient by Fabrice Weinberg. Щелкните на эту запись и выберите «Установить».

Рисунок 3 – Установка библиотеки NTP-клиента в Arduino IDE

Получение текущих дня недели и времени от NTP-сервера

Следующий скетч даст вам полное представление о том, как получить текущие день недели и время с NTP-сервера.

Прежде чем вы отправитесь загружать скетч, вам нужно внести пару изменений, чтобы он у вас заработал.

  • Чтобы ESP8266 мог установить соединение с существующей сетью WiFi, вам необходимо изменить следующие две переменные в соответствии с учетными данными вашей сети.
  • Вам необходимо настроить смещение UTC для вашего часового пояса в секундах. Смотрите список часовых поясов относительно UTC. Вот несколько примеров для разных часовых поясов:
    • для UTC -5.00: -5 * 60 * 60: -18000
    • для UTC +1.00: 1 * 60 * 60: 3600
    • для UTC +0.00: 0 * 60 * 60: 0

Как только вы закончите, загрузите скетч в ESP8266.

После загрузки скетча нажмите кнопку RST на вашей плате NodeMCU, и вы должны будете получать текущие день недели и время каждую секунду, как показано ниже.

Рисунок 4 – ESP8266 считывает день недели и время из ответа NTP-сервера и выводит их монитор последовательного порта

Объяснение кода

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

  • NTPClient.h – это библиотека работы со временем, которая выполняет синхронизацию с NTP-сервером;
  • библиотека ESP8266WiFi.h предоставляет специальные методы для работы ESP8266 с WiFi, которые мы вызываем для подключения к сети;
  • библиотека WiFiUdp.h обрабатывает протокол UDP, например открытие порта UDP, отправку и получение пакетов UDP и т.д.

Затем мы настраиваем несколько констант, таких как SSID, пароль WiFi и смещение UTC, о которых вы уже знаете. Мы также определяем двумерный массив daysOfTheWeek .

Теперь, прежде чем инициализировать объект NTP-клиента, нам нужно указать адрес NTP-сервера, который мы хотим использовать. pool.ntp.org – это открытый проект NTP, отлично подходящий для подобных вещей.

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

Зона Адрес сервера
Весь мир pool.ntp.org
Азия asia.pool.ntp.org
Европа europe.pool.ntp.org
Северная Америка north-america.pool.ntp.org
Океания oceania.pool.ntp.org
Южная Америка south-america.pool.ntp.org

В функции setup() мы сначала инициализируем последовательную связь с ПК и подключаемся к сети WiFi с помощью функции WiFi.begin() .

Когда ESP8266 подключится к сети, мы инициализируем NTP-клиент с помощью функции begin() .

Теперь мы можем просто вызывать функцию update() всякий раз, когда нам нужны текущие день недели и время. Эта функция передает пакет с запросом на NTP-сервер, используя протокол UDP, и преобразует полученный пакет с меткой времени в читаемый формат.

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

Источник

arduino-libraries/NTPClient

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Connect to a NTP server, here is how:

«; WiFiUDP ntpUDP; // By default ‘pool.ntp.org’ is used with 60 seconds update interval and // no offset NTPClient timeClient(ntpUDP); // You can specify the time server pool and the offset, (in seconds) // additionally you can specify the update interval (in milliseconds). // NTPClient timeClient(ntpUDP, «europe.pool.ntp.org», 3600, 60000); void setup() < Serial.begin(115200); WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED ) < delay ( 500 ); Serial.print ( "." ); >timeClient.begin(); > void loop() < timeClient.update(); Serial.println(timeClient.getFormattedTime()); delay(1000); >«>

getEpochTime returns the Unix epoch, which are the seconds elapsed since 00:00:00 UTC on 1 January 1970 (leap seconds are ignored, every day is treated as having 86400 seconds). Attention: If you have set a time offset this time offset will be added to your epoch timestamp.

Источник

Adblock
detector