У попередньому посібнику ми створили годинник RTC за допомогою DS3231 та ESP32. Щоб мінімізувати вимоги до обладнання, ми створимо Інтернет-годинник без використання модуля RTC. Це більш точно в порівнянні з годинником RTC. ESP32 - це модуль Wi-Fi, і його можна легко підключити до Інтернету, тому ми будемо використовувати NTP (Network Time Protocol) та UDP (User Datagram Protocol) для отримання часу з Інтернету за допомогою Wi-Fi. Цей Інтернет-годинник може бути дуже корисним під час створення проектів IoT.
Що таке NTP ??
Мережевий протокол часу (NTP) - це мережевий протокол, який використовується для синхронізації часу між системами та мережами даних. Структура NTP залежить від серверів Internet Time. NTP має алгоритми для точного регулювання часу доби. На серверах NTP є програмне забезпечення, яке передає час доби годиннику на клієнтські комп'ютери за допомогою UDPport 123. Отже, у цьому проекті ми отримуємо час від сервера NTP за допомогою ESP32 і відображаємо його на OLED-дисплеї.
Необхідні матеріали:
- ESP32
- 128 * 64 OLED-дисплей
- Макет
- Чоловіче-жіночі дроти
Кругова діаграма:
Тут ми використовуємо режим SPI для підключення нашого модуля дисплея OLED 128 × 64 (SSD1306) до ESP32. Отже, він буде використовувати 7 штифтів. З'єднання з ESP32 даються як:
- CS (вибір мікросхеми) PIN-код OLED -> PIN-код D5 ESP32
- Контакт постійного струму OLED -> PIN D4 ESP32
- RES-штифт OLED -> PIN-код D2 ESP32
- SDA-штифт OLED -> PIN-код D23, тобто MOSI ESP32
- Штифт SCK OLED -> PIN D18, тобто SCK ESP32
- Vdd OLED -> Vcc ESP32
- GND OLED -> GND ESP32
Вам потрібні файли плати для вашого ESP32. Випадаюче меню менеджера дошки реєстрації Arduino IDE для розробки ESP32. Якщо його немає, виконайте дії, наведені в посиланні нижче:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Ви також можете використовувати ESP12 для цього проекту, навчіться використовувати ESP12.
Ми будемо використовувати Arduino IDE для написання нашої програми, як це пояснювалось у статті вище.
Пояснення коду:
Повний код Інтернет-годинника ESP32 наведено в кінці статті. Тут ми пояснюємо кілька важливих частин коду.
Нам потрібно кілька бібліотек для використання в нашому коді, які можна завантажити за посиланнями нижче:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiiUdp:
Отже, ми включили всі бібліотеки та визначили змінну для введення імені та пароля Wi-Fi.
#включати
Тут бібліотека NTPClient.h використовується для з'єднання з сервером часу. Потрібен час від сервера NTP і підтримує його синхронізацію. А бібліотека Hhre WiFiUdp.h використовується для надсилання та отримання повідомлень UDP. UDP - це протокол, який надсилає та отримує короткі повідомлення від нашої системи на сервер NTP.
Отже, щоб отримати час з Інтернету, ми повинні визначити три змінні в нашій програмі для NTP.
NTP_OFFSET, який є часовим поясом вашої країни, тобто для Індії це +5: 30 годин. Отже, це 19800 за секунди.
NTP_INTERVAL - інтервал часу, який приймає NTP для оновлення часу. Це 60-64 секунди.
NTP_ADDRESS - це NTP-сервер вашої країни. Для Індії ви можете використовувати “ in.pool.ntp.org ”.
#define NTP_OFFSET 19800 // Через секунди #define NTP_INTERVAL 60 * 1000 // Через мілісекунди #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
У функції налаштування ініціюйте налаштування Wi-Fi для підключення до Інтернету.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Підключення до"); Serial.println (ssid); WiFi.begin (ssid, пароль); while (WiFi.status ()! = WL_CONNECTED) { затримка (500); Serial.print ("."); } Serial.println (""); Serial.println ("Wi-Fi підключений."); Serial.println ("IP-адреса:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Потім ініціалізуйте функції відображення для відображення часу на OLED.
display.begin (SSD1306_SWITCHCAPVCC);
У функції циклу ми використовували timeClient.update (), ця функція бере оновлений час з NTP у вигляді рядка і зберігає його у змінній formattedTime . Потім відобразіть його на OLED за допомогою функції display.println () .
недійсний цикл () { timeClient.update (); Рядок formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // встановлюємо ці параметри відповідно до ваших потреб.. display.setCursor (0, 0); display.println (formattedTime);
Повна програма подана нижче. Тепер нарешті запрограмуйте ESP32 за допомогою Arduino IDE, і ваш Інтернет-годинник готовий до показу часу.