Esp8266 не работает ntp

Arduino.ru

NTP-Clock на ESP8266. Теряется много посылок.

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

Собственно, это мой первый опыт работы с ESP8266, поэтому возникают непонятки.

но китайский аналог: немного отличаются шрифты (хотя более или менее подобраны) и строка на обратной стороне «1. Install 340G driver» смещена на 1 позицию вправо по отношению к другим строкам. Расположение деталей идентично.

к IDE подключена как «NodeMCU 1.0 (ESP-12E Module)»

Роутер, к которому подключаются: Asus RT-N12 VP.

Из лога видно, что получить время удается довольно редко — в среднем раз в 2 минуты. Это при том, что условия, на мой взгляд, идеальные: менее 2 метров в прямой видимости. А в рабочем режиме он должен будет работать через одну железобетонную стену.

Возникает вопрос: какая из ситуаций имеет место быть:

1. Неисправно конкретное устройство — нужно поменять на аналогичное исправное.

2. Неудачно выбрано устройство — вместо него лучше использовать [ссылка на конкретное устройство].

3. Проблема в скетче/библиотеке — следует за заменить библиотеку на [. ], а в скетче поменять строки . на .

4. Так и должно быть — смирись и разрабатывай алгоритм работы устройства, исходя из реалий нашего несовершенного Мира.

Источник

Получение даты и времени от 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 и поэтому имеют наиболее точное время.

Читайте также:  Датчик приближения самсунг а40 настроить

Рисунок 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-клиента.

Источник

Esp8266 не работает ntp

#ifndef STASSID
#define STASSID «DIR-615»
#define STAPSK «network password»
#endif

const char * ssid = STASSID; // your network SSID (name)
const char * pass = STAPSK; // your network password

unsigned int localPort = 2390; // local port to listen for UDP packets

/* Don’t hardwire the IP address or we won’t get the benefits of the pool.
Lookup the IP address for the host name instead */
//IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server
IPAddress timeServerIP; // time.nist.gov NTP server address
const char* ntpServerName = «0.ua.pool.ntp.org»;

const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message

byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets

// A UDP instance to let us send and receive packets over UDP
WiFiUDP udp;

void setup() <
Serial.begin(115200);
Serial.println();
Serial.println();

// We start by connecting to a WiFi network
Serial.print(«Connecting to «);
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) <
delay(500);
Serial.print(«.»);
>
Serial.println(«»);

Serial.println(«WiFi connected»);
Serial.println(«IP address: «);
Serial.println(WiFi.localIP());

Serial.println(«Starting UDP»);
udp.begin(localPort);
Serial.print(«Local port: «);
Serial.println(udp.localPort());
>

void loop() <
//get a random server from the pool
WiFi.hostByName(ntpServerName, timeServerIP);

sendNTPpacket(timeServerIP); // send an NTP packet to a time server
// wait to see if a reply is available

Serial.print(«The packet sent to «);
Serial.print(ntpServerName);
Serial.print(» with IP «);
Serial.println (timeServerIP);

int cb = udp.parsePacket();
if (!cb) <
Serial.println(«no packet yet»);
> else <
Serial.print(«packet received, length=»);
Serial.println(cb);
// We’ve received a packet, read the data from it
udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer

//the timestamp starts at byte 40 of the received packet and is four bytes,
// or two words, long. First, esxtract the two words:

unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Реклама
NStorm
Поставщик валерьянки для Кота

Карма: 10
Рейтинг сообщений: 527
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0

Реклама

JLCPCB, всего $2 за прототип печатной платы! Цвет — любой!

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc

forfrends
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 525
Откуда: Николаев / Украина
Рейтинг сообщения: 0

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Реклама

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

NStorm
Поставщик валерьянки для Кота

Карма: 10
Рейтинг сообщений: 527
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0

Реклама

Компэл 28 октября приглашает всех желающих принять участие в вебинаре, где будет рассмотрена новая и перспективная продукция компании Traco. Мы подробно рассмотрим сильные стороны и преимущества продукции Traco, а также коснемся практических вопросов, связанных с измерением уровня шумов, промывкой изделий после пайки и отдельно разберем, как отличить поддельный ИП Traco от оригинала.

forfrends
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 525
Откуда: Николаев / Украина
Рейтинг сообщения: 0

Обмен пакетами с ua.pool.ntp.org [193.27.208.100] с 32 байтами данных:
Ответ от 193.27.208.100: число байт=32 время=56мс TTL=53
Ответ от 193.27.208.100: число байт=32 время=46мс TTL=53
Ответ от 193.27.208.100: число байт=32 время=86мс TTL=53
Ответ от 193.27.208.100: число байт=32 время=71мс TTL=53

Статистика Ping для 193.27.208.100:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 46мсек, Максимальное = 86 мсек, Среднее = 64 мсек

А как посмотреть какой ответ был от сервера?

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Реклама
Реклама

Замена традиционных реле и предохранителей в автомобильных системах распределения питания и управления нагрузками, а также в промышленных системах электропитания постоянного тока на интеллектуальные силовые ключи – массово идущий процесс. Ведущую роль в нем играют силовые ключи PROFET производства Infineon. Специалисты компании отвечают на основные вопросы, возникающие при этом у разработчиков.

NStorm
Поставщик валерьянки для Кота

Карма: 10
Рейтинг сообщений: 527
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0

Реклама

forfrends
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 525
Откуда: Николаев / Украина
Рейтинг сообщения: 0

Я попробовал раздать интернет с компьютера, чтобы убедиться что проблема точно не в подключении ESP к роутеру. К компьютеру ESP подключилась, но картина та же: не приходят пакеты.
Значит проблема либо в роутере, либо в Антенне-приемнике, либо у моего провайдера.

Добавлено after 7 minutes 15 seconds:
Спасибо за программу. Попробовал. Стандартно установленные сервера вернули ошибку. Написал свои различные сервера — то же самое. Возвращают ошибку.
Хм. Как бы точно узнать что это проблема в роутере, чтобы его не мучить лишний раз? Просто что-то он не хочет принимать новые прошивки.
Подключить антенну к компьютеру не получилось — пишет неопознанная сеть, и нет интернета.
Ладно, попробую роутер перепрошить.

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Реклама

NStorm
Поставщик валерьянки для Кота

Карма: 10
Рейтинг сообщений: 527
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0

Реклама

forfrends
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 525
Откуда: Николаев / Украина
Рейтинг сообщения: 0

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

NStorm
Поставщик валерьянки для Кота

Карма: 10
Рейтинг сообщений: 527
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0

forfrends
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Вс дек 30, 2012 00:32:06
Сообщений: 525
Откуда: Николаев / Украина
Рейтинг сообщения: 0

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

NStorm
Поставщик валерьянки для Кота

Карма: 10
Рейтинг сообщений: 527
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0

Страница 1 из 1 [ Сообщений: 12 ]

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Источник

Оцените статью