У претходном упутству направили смо РТЦ сат користећи ДС3231 и ЕСП32. Да бисмо минимизирали хардверске захтеве, направићемо Интернет сат без употребе РТЦ модула. Ово је тачније у поређењу са РТЦ сатом. ЕСП32 је Ви-Фи модул и лако се може повезати са Интернетом, па ћемо користити НТП (Нетворк Тиме Протоцол) и УДП (Усер Датаграм Протоцол) да бисмо преузели време са Интернета користећи Ви-Фи. Овај Интернет сат може бити веома користан током израде ИоТ пројеката.
Шта је НТП ??
Нетворк Тиме Протоцол (НТП) је мрежни протокол који се користи за синхронизацију времена између система и мрежа података. НТП оквир зависи од Интернет Тиме сервера. НТП има алгоритме за прецизно подешавање доба дана. НТП сервери имају софтвер који шаље време дана на клијентске рачунаре користећи УДПпорт 123. Дакле, овде у овом пројекту добивамо време од НТП сервера помоћу ЕСП32 и приказује га на ОЛЕД дисплеју.
Потребни материјали:
- ЕСП32
- 128 * 64 ОЛЕД дисплеј
- Бреадбоард
- Мушко-женске жице
Кружни дијаграм:
Овде користимо СПИ режим за повезивање нашег 128 × 64 ОЛЕД модула екрана (ССД1306) са ЕСП32. Дакле, користиће 7 пинова. Везе са ЕСП32 су дате као:
- ЦС (ивер за одабир) ОЛЕД -> ПИН Д5 ЕСП32
- ДЦ пин ОЛЕД -> ПИН Д4 ЕСП32
- РЕС пин ОЛЕД -> ПИН Д2 ЕСП32
- СДА пин ОЛЕД -> ПИН Д23 тј. МОСИ ЕСП32
- СЦК пин на ОЛЕД -> ПИН Д18, односно СЦК на ЕСП32
- Вдд ОЛЕД -> Вцц ЕСП32
- ГНД ОЛЕД -> ГНД ЕСП32
За ЕСП32 су вам потребне датотеке на плочи. Падајући мени менаџера пријава на Ардуино ИДЕ за ЕСП32 дев кит. Ако није тамо, следите кораке дате у доњој вези:
хттпс://цирцуитдигест.цом/мицроцонтроллер-пројецтс/геттинг-стартед-витх-есп32-витх-ардуино-иде
Такође можете користити ЕСП12 за овај пројекат, научите овде да користите ЕСП12.
Користићемо Ардуино ИДЕ за писање нашег програма како је објашњено у горњем чланку.
Објашњење кода:
Комплетни код за Интернет сат ЕСП32 дат је на крају чланка. Овде објашњавамо неколико важних делова кода.
Потребно нам је неколико библиотека које ћемо користити у нашем коду, а које можете преузети са доњих веза:
1. Адафруит_ССД1306: хттпс://гитхуб.цом/адафруит/Адафруит_ССД1306
2. СПИ: хттпс://гитхуб.цом/ПаулСтоффреген/СПИ
3. Адафруит_ГФКС: хттпс://гитхуб.цом/адафруит/Адафруит-ГФКС-Либрари
4. НТПЦлиент: хттпс://гитхуб.цом/ардуино-либрариес/НТПЦлиент
5.ВиФиУдп: хттпс://гитхуб.цом/есп8266/Ардуино/трее/мастер/либрариес/ЕСП8266ВиФи
Дакле, укључили смо све библиотеке и дефинисали променљиву за унос Ви-Фи имена и лозинке.
#инцлуде
Овде се библиотека НТПЦлиент.х користи за повезивање са временским сервером. НТП серверу треба време и одржава га у синхронизацији. А Ххре ВиФиУдп.х библиотека користи се за слање и примање УДП порука. УДП је протокол који шаље и прима кратке поруке из нашег система на НТП сервер.
Да бисмо добили време са Интернета, морамо да дефинишемо три променљиве у нашем програму за НТП.
НТП_ОФФСЕТ која је временска зона ваше земље, односно за Индију је +5: 30 сати. Дакле, 19800 је за секунде.
НТП_ИНТЕРВАЛ који је временски интервал који НТП узима за ажурирање времена. То је 60-64 секунде.
НТП_АДДРЕСС је НТП сервер ваше земље. За Индију можете да користите „ ин.поол.нтп.орг “.
#дефине НТП_ОФФСЕТ 19800 // За неколико секунди #дефине НТП_ИНТЕРВАЛ 60 * 1000 // За милисекунде #дефине НТП_АДДРЕСС "1.асиа.поол.нтп.орг" ВиФиУДП нтпУДП; НТПЦлиент тимеЦлиент (нтпУДП, НТП_АДДРЕСС, НТП_ОФФСЕТ, НТП_ИНТЕРВАЛ);
У функцији подешавања иницирајте Ви-Фи поставке да бисте се повезали са Интернетом.
воид сетуп () { дисплаи.бегин (); Сериал.бегин (9600); Сериал.принтлн (); Сериал.принтлн (); Сериал.принт ("Повезивање са"); Сериал.принтлн (ссид); ВиФи.бегин (ссид, лозинка); вхиле (ВиФи.статус ()! = ВЛ_ЦОННЕЦТЕД) { кашњење (500); Сериал.принт ("."); } Сериал.принтлн (""); Сериал.принтлн („ВиФи повезан.“); Сериал.принтлн ("ИП адреса:"); Сериал.принтлн (ВиФи.лоцалИП ()); тимеЦлиент.бегин ();
Затим иницијализујте функције приказа да бисте приказали време на ОЛЕД-у.
дисплаи.бегин (ССД1306_СВИТЦХЦАПВЦЦ);
У функцији петље користили смо тимеЦлиент.упдате (), ова функција узима ажурирано време са НТП-а у облику низа и чува га у променљивој форматтедТиме . Затим га прикажите на ОЛЕД-у помоћу функције дисплаи.принтлн () .
воид лооп () { тимеЦлиент.упдате (); Стринг форматтедТиме = тимеЦлиент.гетФорматтедТиме (); дисплаи.цлеарДисплаи (); дисплаи.сетТектСизе (2); // подесимо ове параметре према вашим потребама.. дисплаи.сетЦурсор (0, 0); дисплаи.принтлн (форматтедТиме);
Комплетан програм је дат у наставку. Сада напокон програмирајте ЕСП32 са Ардуино ИДЕ и ваш Интернет сат је спреман за приказ времена.