РТЦ или сат у реалном времену су најчешће коришћени модул у електроници и уграђеним уређајима за праћење времена. Али проблем РТЦ-а је тај што микрочипови у рачунарима нису толико прецизни и могу пружити само време локалног уређаја. С друге стране, коришћење Интернета за дохваћање времена са НТП сервера је боље решење за добијање времена, јер је тачније и може обезбедити време било ког географског подручја на свету. Потребан нам је само Ви-Фи модул и приступ Интернету да бисмо помоћу НТП сервера утврдили време било које локације на свету. У овом упутству ћемо користити ЕСП8266 НодеМЦУ за добијање тренутног времена и датума са НТП сервера и приказивање на ОЛЕД дисплеју.
Мрежни протокол времена (НТП)
НТП је један од најстаријих мрежних Интернет протокола (ИП) за синхронизацију сатова између рачунарских мрежа. Дизајнирао га је Давид Л. Миллс са Универзитета у Делавареу 1981. Овај протокол се може користити за синхронизацију многих мрежа са координисаним универзалним временом (УТЦ) у року од неколико милисекунди. УТЦ је примарни временски стандард којим свет регулише сат и време. УТЦ се не мења и не разликује се за различите географске локације. НТП користи УТЦ као временску референцу и пружа тачно и синхронизовано време на Интернету.
НТП ради на хијерархијском моделу клијент-сервер. Врхунски модел има референтне сатове познате као „стратум0“ попут атомских сатова, радио таласа, ГПС-а, ГСМ-а који прима време са сателита. Сервери који примају време из стратум0 називају се „стратум1“, а сервери који примају време из стратум1 „стратум2“ и тако даље. То се наставља и тачност времена се смањује након сваке фазе. НТП аутоматски бира најбољи од неколико доступних извора времена за синхронизацију, што га чини протоколом способним за толеранцију кварова.
Дакле, овде у овом пројекту добивамо време од НТП сервера користећи ЕСП8266 НодеМЦУ и приказујемо га на ОЛЕД дисплеју. Ова иста врста Интернет сата направљена је употребом ЕСП32 у претходном водичу.
ЕСП8266 може приступити НТП серверима користећи Интернет да би добио тачно време. Овде НТП ради у режиму клијент-сервер, ЕСП8266 ради као клијентски уређај и повезује се са НТП серверима користећи УДП (Усер Датаграм Протоцол). Клијент преноси пакет захтева на НТП сервере, а заузврат НТП шаље пакет временске ознаке који се састоји од информација попут тачности, временске зоне, временске ознаке УНИКС итд. Затим клијент раздваја податке о датуму и времену који се могу даље користити у апликацијама у складу са захтевима.
Компоненте потребне
- Монохроматски 7-пински ССД1306 0.96 ”ОЛЕД екран
- ЕСП8266 НодеМЦУ
- Микро УСБ кабл
- Бреадбоард
- Жице од мушког до мушког споја
Кружни дијаграм и везе
Овај 7-пински ОЛЕД екран комуницира са модулом ЕСП8266 користећи СПИ протокол, доле су шема и табела веза за повезивање ОЛЕД СПИ пинова са НодеМЦУ за приказ интернетског времена.
Не. |
ОЛЕД екран |
НодеМЦУ |
1 |
ГНД |
ГНД |
2 |
ВДД |
3.3В |
3 |
СЦК |
Д5 |
4 |
МОСИ (СПИ) или СДА (И2Ц) |
Д7 |
5 |
РЕСЕТОВАТИ |
Д3 |
6 |
ДЦ |
Д2 |
7 |
ЦС |
Д8 |
Да бисте сазнали више о овом монохроматском 7-пинском ОЛЕД дисплеју и његовом повезивању са ЕСП8266 НодеМЦУ, следите везу.
Објашњење кода
Прво морамо да преузмемо и инсталирамо НТП библиотеку у ЕСП8266. Постоји много библиотека доступних за НТП клијент. Било који од њих можете инсталирати из Ардуино ИДЕ-а. У овом упутству сам инсталирао НТПЦлиент библиотеку компаније Таранаис, јер је једноставан за употребу и има функције за добијање датума и времена са НТП сервера. ЕСП8266 НодеМЦУ се лако може програмирати помоћу Ардуино ИДЕ-а.
Да бисте инсталирали НТП библиотеку, прво преузмите библиотеку помоћу горњег линка, а затим је инсталирајте помоћу Ардуино ИДЕ-а. Да бисте га инсталирали, идите на Скица> Укључи библиотеку> Додај.ЗИП библиотеку , а затим отворите фасциклу Зип тако што ћете отићи на место где сте преузели зип фасциклу и поново покрените Ардуино ИДЕ.
НТПЦлиент библиотека долази са примерима. Отворите Ардуино ИДЕ и идите на Примери> НТПЦлиент> Адванцед . Код дат у овој скици приказује време са НТП сервера на серијском монитору. Ову скицу ћемо користити за приказ тренутног времена и датума на ОЛЕД дисплеју.
Комплетни код је доступан на крају овог водича, овде сам објаснио неколико важних делова кода.
ЕСП8266ВиФи библиотека пружа специфичне ЕСП8266 Ви-Фи рутине за повезивање на мрежу. ВиФиУДП.х рукује слањем и примањем УДП пакета. Пошто користимо СПИ протокол за повезивање ОЛЕД-а са НодеМЦУ, зато ћемо увести библиотеку „СПИ.х“. А „Адафруит_ГФКС.х“ и „Адафруит_ССД1306.х“ се користе за ОЛЕД екран.
#инцлуде
Наша ОЛЕД величина је 128к64, тако да ширину и висину екрана постављамо на 128, односно 64. Дакле, дефинишите променљиве за ОЛЕД пинове повезане на НодеМЦУ за СПИ комуникацију.
#дефине СЦРЕЕН_ВИДТХ 128 // ОЛЕД ширина екрана, у пикселима #дефине СЦРЕЕН_ХЕИГХТ 64 // ОЛЕД висина екрана, у пикселима // Декларација за ССД1306 екран повезан софтверским СПИ (подразумевани случај): #дефине ОЛЕД_МОСИ Д7 #дефине ОЛЕД_ЦЛК Д5 #дефине ОЛЕД_ДЦ Д2 #дефине ОЛЕД_ЦС Д8 #дефине ОЛЕД_РЕСЕТ Д3
Екран Адафруит_ССД1306 (СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ, ОЛЕД_МОСИ, ОЛЕД_ЦЛК, ОЛЕД_ДЦ, ОЛЕД_РЕСЕТ, ОЛЕД_ЦС);
Замените „иоур_ссид“ и „иоур_пассворд“ својим Ви-Фи ССИД-ом и лозинком у доњим редовима кода.
цонст цхар * ссид = "иоур_ссид"; цонст цхар * пассворд = "иоур_пассворд";
Подесите ВИ-Фи везу давањем ССИД-а и лозинке за функцију ВиФи.бегин . Повезивању ЕСП8266 треба неко време да се повеже са НодеМЦУ, тако да морамо сачекати док се не повеже.
ВиФи.бегин (ссид, лозинка); вхиле (ВиФи.статус ()! = ВЛ_ЦОННЕЦТЕД) { кашњење (500); Сериал.принт ("."); }
Да бисте захтевали датум и време, иницијализујте временског клијента са адресом НТП сервера. За бољу прецизност одаберите адресу НТП сервера који су у близини вашег географског подручја. Овде користимо „ поол.нтп.орг “ који даје сервере из целог света. Ако желите да изаберете сервере из Азије, можете да користите „ асиа.поол.нтп.орг “. тимеЦлиент такође узима УТЦ време померено у милисекундама ваше временске зоне. На пример, УТЦ помак за Индију је +5: 30, па претварамо овај помак у милисекундама што је једнако 5 * 60 * 60 + 30 * 60 = 19800.
Површина |
Помак УТЦ времена (сати и минуте) |
УТЦ помак времена (у секундама) |
ИНДИЈА |
+5: 30 |
19800 |
ЛОНДОН |
0:00 |
0 |
ЊУ ЈОРК |
-5: 00 |
-18000 |
ВиФиУДП нтпУДП; НТПЦлиент тимеЦлиент (нтпУДП, "поол.нтп.орг", 19800,60000);
ССД1306_СВИТЦХЦАПВЦЦ је дат за интерно генерисање 3.3В ради иницијализације екрана. Када се ОЛЕД покрене, приказује „ ДОБРОДОШЛИ У ДИГЕСТ ЦИРЦУИТ ДИГЕСТ “ са величином текста 2 и бојом ПЛАВЕ 3 секунде.
иф (! дисплаи.бегин (ССД1306_СВИТЦХЦАПВЦЦ)) { Сериал.принтлн (Ф ("ССД1306 алокација није успела")); за(;;); // Не настављајте, петљајте заувек } дисплаи.цлеарДисплаи (); дисплаи.сетТектСизе (2); // Цртање текстуалног приказа величине 2Кс.сетТектЦолор (ПЛАВИ); дисплаи.сетЦурсор (5, 2); дисплаи.принтлн ("ДОБРО ДОШЛИ У"); дисплаи.принтлн ("КРУГ"); дисплаи.принтлн ("ДИГЕСТ"); дисплаи.дисплаи (); кашњење (3000);
НТП клијент се иницијализује помоћу функције бегин () за подешавање датума и времена са НТП сервера.
тимеЦлиент.бегин ();
Функција Упдате () се користи за примање датума и времена кад год затражимо НТП сервере.
тимеЦлиент.упдате ();
Брзина преноса од 115200 постављена је за штампање времена на серијском монитору.
Сериал.бегин (115200); Сериал.принтлн (тимеЦлиент.гетФорматтедТиме ());
гетХоурс (), гетМинутес (), гетСецондс (), гетДаи су функција библиотеке и даје тренутни сат, минуте, секунде и дан са НТП сервера. Доњи код се користи за разликовање времена између АМ и ПМ. Ако је сат који добијемо помоћу гетХоурс () већи од 12, тада то време постављамо као ПМ у противном.
инт хх = тимеЦлиент.гетХоурс (); инт мм = тимеЦлиент.гетМинутес (); инт сс = тимеЦлиент.гетСецондс (); инт дан = тимеЦлиент.гетДаи (); ако је (хх> 12) { хх = хх-12; дисплаи.принт (хх); дисплаи.принт (":"); дисплаи.принт (мм); дисплаи.принт (":"); дисплаи.принт (сс); дисплаи.принтлн ("ПМ"); } елсе { дисплаи.принт (хх); дисплаи.принт (":"); дисплаи.принт (мм); дисплаи.принт (":"); дисплаи.принт (сс); дисплаи.принтлн ("АМ"); } инт дан = тимеЦлиент.гетДаи (); дисплаи.принтлн ("'" + арр_даис + "'");
гетФорматтедДате () користи се датум добивања у формату „ииии-мм-дд“ са НТП сервера. Ова функција даје датум и време у формату „ииии-мм-дд Т хх: мм: сс формат. Али потребан нам је само датум, тако да морамо раздвојити овај низ који је ускладиштен у формату дате_тиме до „Т“, што чини функција субстринг (), а затим датум сачувати у променљивој „дате“ .
дате_тиме = тимеЦлиент.гетФорматтедДате (); инт индек_дате = дате_тиме.индекОф ("Т"); Низ низа = датум_времена.супстринг (0, датум_индекса); Сериал.принтлн (датум); дисплаи.принтлн (датум); дисплаи.дисплаи ();
Ево како ће коначно изгледати ОЛЕД Интернет часовник: