ЕСП32 НТП клијент-сервер: Добијте датум и време – Ардуино ИДЕ

Esp32 Ntp Klijent Server Dobijte Datum I Vreme Arduino Ide



ЕСП32 је плоча Интернета ствари (ИоТ) заснована на микроконтролеру која се може повезати са широким спектром уређаја. ЕСП32 се широко користи у пројектима заснованим на ИоТ-у.

Рад са ЕСП32 или било којим другим микроконтролерским временом је веома важан јер уграђени тајмер није толико прецизан тако да можемо да користимо НТП сервер за преузимање у реалном времену и може га ускладиштити унутар променљиве која се касније може користити унутар ЕСП32 кода.

Протокол мрежног времена (НТП) користи универзално координисано време (УТЦ) које синхронизује системски сат са великом прецизношћу и прецизношћу. На мањим мрежама НТП нам може пружити тачне сатове од 1 мс, док веће мреже као што је ЛАН (Лоцал Ареа Нетворк) НТП могу дати тачност са десетинама милисекунди преко интернета. Коришћењем овог тачног сата ЕСП32 може извршити инструкције у одређено време.







Овај водич садржи следеће садржаје:



  1. Увод у НТП (Нетворк Тиме Протоцол)
  2. Подешавања НТП сервера и времена



  3. Штампање у реалном времену помоћу функције принтЛоцалТиме().





1: Увод у НТП (Нетворк Тиме Протоцол)

НТП је акроним од Н етворк Т урадити П ротоцол је стандард који се користи за синхронизацију времена уређаја са њиховом временском зоном. Протокол мрежног времена синхронизује време свих мрежних уређаја са УТЦ-ом, такође познатим као координисано универзално време.

УТЦ је као ГМТ (средње време по Гриничу), али се не мења и остаје исти у целом свету. Главна идеја коришћења УТЦ-а је очитавање времена из НТП сервер и применом УТЦ офсета можемо добити локално време према нашој временској зони.



2: НТП сервер и подешавања времена

Да бисмо прочитали време са НТП сервера, потребно је да декларишемо следеће променљиве унутар кода користећи ове варијабле можемо добити време са НТП сервера.

  • НТП сервер
  • ГМТ Оффсет
  • Даилигхт Оффсет

2.1: НТП сервер

Затражићемо време од поол.нтп.орг који садржи податке о времену широм света на серверу и свако може да затражи своје локално време користећи овај скуп. Следе неки други сервери којима можемо да приступимо:

Подручје Име хоста
широм света поол.нтп.орг
Азија асиа.поол.нтп.орг
Европа еуропе.поол.нтп.орг
Северна Америка нортх-америца.поол.нтп.орг
Океанија оцеаниа.поол.нтп.орг
Јужна Америка соутх-америца.поол.нтп.орг

2.2: ГМТ Оффсет

ГМТ офсет описује временску разлику у сатима између временске зоне у којој живите до ГМТ. На пример, ако користимо временску зону САД, можемо је поставити на УТЦ = -11:00 .

2.3: Померање дневног светла

Овде померање дневног светла је летње време које се обично узима као 1 сат. Летње рачунање времена значи померање сата за 1 сат унапред током лета и враћање на зими. Ова команда се обично користи када се користи прилагођена временска зона и примењује правило летњег рачунања времена.

Пошто смо покрили основе НТП сервера, сада ћемо проверити како можемо да пошаљемо захтев НТП серверу и прочитамо локално време користећи ЕСП32 са Ардуино ИДЕ кодом.

3: Штампање у реалном времену помоћу функције принтЛоцалТиме().

Тхе принтЛоцалТиме() функција ће позвати гетЛоцалТиме() функција која шаље захтев НТП серверу и чува примљени датум и време унутар информације о времену променљива.

3.1: Код за штампање у реалном времену

Налепите дати код за НТП клијент сервер у Ардуино ИДЕ едитор. Повежите ЕСП32 са рачунаром, изаберите ЦОМ порт и отпремите код.

#инцлуде <ВиФи.х>
#инцлуде 'тиме.х'
цонст цхар * ссид     = „РЕПЛАЦЕ_ВИТХ_ИОУР_ССИД“;
цонст цхар * лозинка = “РЕПЛАЦЕ_ВИТХ_ИОУР_ПАССВОРД”;
цонст цхар * нтпСервер = 'поол.нтп.орг' ;
цонст лонг  гмтОффсет_сец = 18000 ; /* ГМТ ОФФСЕТ + 5 ХОУРС ( 18000 СЕЦ ) */
цонст инт   даилигхтОффсет_сец = 3600 ; /* 1 сат дневног одступања */
воид принтЛоцалТиме ( )
{
струцт тм тимеинфо;
ако ( ! гетЛоцалТиме ( & информације о времену ) ) {
Сериал.принтлн ( „Неуспешно добијање времена“ ) ;
повратак ;
}
Сериал.принтлн ( & информације о времену, „%А, %Б %д %И %Х:%М:%С“ ) ;
}
воид сетуп ( )
{
Сериал.бегин ( 115200 ) ;
// повежите се на ВиФи
Сериал.принтф ( „Повезивање са %с“ , ссид ) ;
ВиФи.бегин ( ссид, лозинка ) ;
док ( ВиФи.статус ( ) ! = ВЛ_ЦОННЕЦТЕД ) {
кашњење ( 500 ) ;
Сериал.принт ( '.' ) ;
}
Сериал.принтлн ( ' ПОВЕЗАН' ) ;
// инит и добијте време
цонфигТиме ( гмтОффсет_сец, даилигхтОффсет_сец, нтпСервер ) ;
принтЛоцалТиме ( ) ;
// искључите ВиФи као то више није потребно
ВиФи.дисцоннецт(труе);
ВиФи.моде(ВИФИ_ОФФ);
}
воид лооп()
{
кашњење(1000);
принтЛоцалТиме();
}

Код је започео укључивањем ВиФи и временске библиотеке. Ви-фи библиотека ће помоћи да повежете ЕСП32 са мрежом док време библиотека ће управљати синхронизацијом НТП сервера.

Након тога се дефинише ССИД и лозинка мреже на коју ће се ЕСП32 повезати. Замените свој мрежни акредитив овде. Након тога смо дефинисали ГМТ офсет као 18000 секунди што је (УТЦ+5 сати). Овде можете заменити своју временску зону УТЦ. Пратите линк да бисте добили ГМТ офсет за вашу временску зону.

Поред тога, адреса НТП сервера је наведена помоћу команде:

цонст цхар * нтпСервер = 'поол.нтп.орг' ;

Ова команда аутоматски бира сервер времена који ће вас претраживати. Међутим, такође можемо поставити временску зону користећи НТП сервере објашњене у НТП сервер одељак.

На крају конфигуришемо ЕСП32 као НТП клијент и да добијемо датум и време. За то смо користили цонфигТиме() функција.

На крају, коришћењем принтЛоцалТиме() функција, тренутни датум и време се штампају на серијском монитору. Ова функција садржи временску структуру тм који чува све информације у тимеинфо променљива.

Следеће команде представљају информације о времену структура.

Сериал.принтлн ( & информације о времену, „%А, %Б %д %И %Х:%М:%С“ ) ;

Свако слово временске структуре се односи на одређену информацију:

Спецификатори Информације
Повратак дан у недељи
Месец повратка
Повратни дан у месецу
Вратите текућу годину
Вратите тренутни сат
Врати тренутне минуте
Врати тренутне секунде

3.2: Излаз

Након учитавања кода ЕСП32 ће се повезати са ВиФи мрежом и послати захтев НТП серверу да добије тренутни датум и време. Следећи излаз се може видети на Ардуино серијском монитору.

Тренутно време на мом рачунару и ЕСП32 се поклапају.

Успешно смо прочитали време са НТП сервера користећи ЕСП32 као клијент.

Закључак

Време је веома важно за апликације као што су временско означавање и извршавање инструкција у одређено време за генерисање излаза. Уграђени тајмери ​​нису толико тачни, тако да можемо користити НТП сервер за читање тренутног времена и датума. Ово време се може сачувати у променљивој за коришћење у нашем коду. Ова лекција помаже у добијању тачног времена било које временске зоне широм света помоћу ЕСП32.