Мазмуну:

Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү: 6 кадам
Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү: 6 кадам

Video: Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү: 6 кадам

Video: Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү: 6 кадам
Video: Как использовать ESP32 WiFi и Bluetooth с Arduino IDE, полная информация с примерами и кодом. 2024, Июнь
Anonim
Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү
Интернет сааты: NTP протоколу менен ESP8266 NodeMCU колдонуп OLED менен күндү жана убакытты көрсөтүү

Салам балдар, бул көрсөтмөлөрдө биз интернеттен убакыт ала турган интернет саатын курабыз, андыктан бул проектти иштетүү үчүн эч кандай РТКнын кереги жок, болгону иштей турган интернет байланышы керек

Бул долбоор үчүн сизге esp8266 керек, ал интернетке кирүү үчүн Wi -Fiга ээ болот жана анда убакытты көрсөтүү үчүн дисплей бар жана esp8266 NTP протоколу менен интернеттен убакытты алат, ntp тармак убактысынын протоколун билдирет, андыктан негизинен ntp серверлери бар Интернетте компьютердик сааттарды синхрондоштуруу үчүн колдонулат жана биз долбоорубузга убакыт алуу үчүн бул серверлерди колдонобуз.

1 -кадам: Сизге керектүү нерселер

Сиз керек
Сиз керек
Сиз керек
Сиз керек
Сиз керек
Сиз керек

бул долбоор үчүн сизге төмөнкү нерселер керек болот:

Esp8266/nodemcu

Олед ssd1306 0.96"

Өткөргүч зымдар

Breadboard

USB кабели

2 -кадам: Байланыштар

Байланыштар
Байланыштар

Бул 4-пин OLED дисплей I2C протоколун колдонуп ESP8266 модулу менен байланышат, төмөндө OLED I2C казыктарын Интернет убактысын көрсөтүү үчүн NodeMCU менен туташтыруу үчүн схема жана туташуу таблицасы.

3 -кадам: Китепканаларды жүктөп алыңыз

Китепканаларды жүктөп алуу
Китепканаларды жүктөп алуу
Китепканаларды жүктөп алуу
Китепканаларды жүктөп алуу

Сүрөттө көрсөтүлгөндөй сиздин Arduino ide SD1306 китепканаларын жүктөп алганыңызды текшериңиз жана Adafruit GFX китепканасы экениңизге ишениңиз, эгер болбосо, анда бул эки китепкананы орнотуңуз.

Сиздин Arduino IDEде Libraries менеджерине барып NTPти издеп, мен жүктөгөндөй эле NTP кардар китепканасын жүктөп алыңыз, андан ары жардам алуу үчүн сүрөттү караңыз.

4 -кадам: NTP деген эмне?

NTP деген эмне
NTP деген эмне

NTP компьютер тармактарынын ортосундагы сааттарды синхрондоштуруу үчүн эң эски тармактык Интернет протоколунун (IP) бири. Ал 1981 -жылы Делавэр университетинин Дэвид Л. Миллс тарабынан иштелип чыккан. Бул протокол көптөгөн тармактарды бир нече миллисекунд ичинде Координацияланган Убакыт Убактысына (UTC) синхрондоштуруу үчүн колдонулушу мүмкүн. UTC - бул дүйнөлүк саат менен убакытты жөнгө салуучу негизги убакыт стандарты. UTC өзгөрбөйт жана ар кандай географиялык аймактар үчүн өзгөрөт. NTP убакытты маалымдама катары UTC колдонот жана Интернет боюнча так жана мезгилдештирилген убакытты камсыз кылат.

NTP иерархиялык кардар-сервер моделинде иштейт. Топ моделдин спутниктен убакыт алган атомдук сааттар, радио толкундары, GPS, GSM сыяктуу "stratum0" деп аталган маалымдама сааттары бар. 0 катмарынан убакыт алган серверлер "катмар1" деп аталат жана 1 катмынан убакыт алган серверлер "катмар2" ж.б.у.с. Бул улана берет жана убакыттын тактыгы ар бир этаптан кийин төмөндөйт. NTP автоматтык түрдө синхрондоштуруу үчүн бир нече жеткиликтүү убакыт булактарынын эң жакшысын тандайт, бул аны катачылыкка чыдамдуу протоколго айландырат. Бул жерде, бул долбоордо, биз NSP серверинен ESP8266 NodeMCU колдонуп, аны OLED дисплейинде көрсөтөбүз. Ушул эле интернет сааты мурунку окуу куралында ESP32 колдонуу менен курулган.

5 -кадам: Коддоо бөлүгү

Коддоо бөлүгү
Коддоо бөлүгү

Күндү жана убакытты сурап алуу үчүн, NTP серверлеринин дареги менен убакыт кардарын инициалдаңыз. Жакшыраак тактык үчүн географиялык аймакка жакын NTP серверлеринин дарегин тандаңыз. Бул жерде биз "pool.ntp.org" колдонобуз, ал дүйнө жүзү боюнча серверлерди берет. Эгерде сиз Азиядан серверлерди тандагыңыз келсе, "asia.pool.ntp.org" колдоно аласыз. timeClient ошондой эле UTC убактысын сиздин убакыт алкагыңыздын миллисекундунда алмаштырат. Мисалы, Индия үчүн UTC офсети +5: 30, ошондуктан биз бул офсетти 5*60*60 +30*60 = 19800 барабар болгон миллисекундтарга которобуз.

Аймак. UTC убактысы (саат жана мүнөт). UTC убактысы (секунд)

Индия +5: 30 19800

ЛОНДОН 0:00. 0

НЬЮ -ЙОРК -5: 00 -18000

Сураныч, төмөнкү кодду көчүрүп, кодуңузга wifi менен сырсөзүңүздү киргизиңиз жана кодго убакытты киргизиңиз, андан кийин esp8266 такталарына жүктөңүз.:

#"NTPClient.h" кошуу

#"SPI.h" // SPIди NodeMCu менен OLED менен иштөө үчүн

#"Adafruit_GFX.h" кошуу

#кошуу "Adafruit_SSD1306.h"

#define SCREEN_WIDTH 128 // OLED дисплейдин туурасы, пиксел менен

#define SCREEN_HEIGHT 64 // OLED дисплейдин бийиктиги, пиксел менен

#аныктоо OLED_RESET -1

Adafruit_SSD1306 дисплейи (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET);

constchar *ssid = "yourwifissid";

const char *password = "yourwifipass";

WiFiUDP ntPUDP;

NTPClient timeClient (ntPUDP, "pool.ntp.org", 19800, 60000);

String arr_days = {"жекшемби", "дүйшөмбү", "шейшемби", "шаршемби", "бейшемби", "жума", "ишемби"};

String date_time; // Сиз убакыт серверинин бассейнин жана жылышын көрсөтө аласыз (секунда менен // кийинчерээк setTimeOffset () менен өзгөртүлүшү мүмкүн). Кошумча түрдө сиз // жаңыртуу интервалын көрсөтө аласыз (миллисекундтарда, setUpdateInterval () аркылуу өзгөртүлүшү мүмкүн).

жараксыз орнотуу ()

{

Serial.begin (115200);

WiFi.begin (ssid, сырсөз);

while (WiFi.status ()! = WL_CONNECTED)

{

кечигүү (500);

Serial.print (".");

}

эгер (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C))

{

Serial.println (F ("SSD1306 бөлүштүрүлбөй калды"));

үчүн (;;); // Улантпаңыз, түбөлүккө айлантыңыз

}

display.clearDisplay ();

display.setTextSize (2); // 2X масштабдуу текстти тартыңыз

display.setTextColor (АК);

display.setCursor (5, 2);

display.println ("WELCOME TO");

display.println ("көрсөтмөлөр");

display.println ("Долбоор");

display.display ();

кечигүү (3000);

timeClient.begin ();

}

боштук цикл ()

{

timeClient.update ();

display.clearDisplay ();

Serial.println (timeClient.getFormattedTime ());

display.setTextSize (2); // 2X масштабдуу текстти тартыңыз

display.setTextColor (КӨК);

display.setCursor (0, 2);

int hh = timeClient.getHours ();

int mm = timeClient.getMinutes ();

int ss = timeClient.getSeconds ();

эгер (hh> 12)

{

hh = hh-12;

display.print (hh);

display.print (":");

көрсөтүү.басуу (мм);

display.print (":");

display.print (ss);

display.println ("PM");

}

башка

{

display.print (hh);

display.print (":");

көрсөтүү.басуу (мм);

display.print (":");

display.print (ss);

display.println ("AM");

}

int күнү = timeClient.getDay ();

display.println ("'"+arr_days [day]+"'");

date_time = timeClient.getFormattedDate ();

int index_date = date_time.indexOf ("T");

String date = date_time.substring (0, index_date);

Serial.println (дата);

display.println (дата);

display.display ();

// Баштапкы текстти көрсөтүү}

6 -кадам: Дата жана Убакыт алуу

Күн жана убакыт алуу
Күн жана убакыт алуу

эгер сиз бардыгын туура туташтырсаңыз жана кодду туура жүктөсөңүз, анда сиз ntp саатыңыздын дисплейде меникиндей болуп иштегенин көрө аласыз. Сураныч, чыгаруу үчүн сүрөттү караңыз.

Сунушталууда: