Рад са ЕСП32 или било којим другим микроконтролерским временом је веома важан јер уграђени тајмер није толико прецизан тако да можемо да користимо НТП сервер за преузимање у реалном времену и може га ускладиштити унутар променљиве која се касније може користити унутар ЕСП32 кода.
Протокол мрежног времена (НТП) користи универзално координисано време (УТЦ) које синхронизује системски сат са великом прецизношћу и прецизношћу. На мањим мрежама НТП нам може пружити тачне сатове од 1 мс, док веће мреже као што је ЛАН (Лоцал Ареа Нетворк) НТП могу дати тачност са десетинама милисекунди преко интернета. Коришћењем овог тачног сата ЕСП32 може извршити инструкције у одређено време.
Овај водич садржи следеће садржаје:
- Увод у НТП (Нетворк Тиме Протоцол)
- Подешавања НТП сервера и времена
- Штампање у реалном времену помоћу функције принтЛоцалТиме().
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.