В предыдущем уроке мы создали часы RTC, используя DS3231 и ESP32. Чтобы минимизировать требования к оборудованию, мы сделаем интернет-часы без использования модуля RTC. Это более точно по сравнению с часами RTC. ESP32 - это модуль Wi-Fi, который можно легко подключить к Интернету, поэтому мы будем использовать NTP (сетевой протокол времени) и UDP (протокол пользовательских датаграмм) для получения времени из Интернета с помощью Wi-Fi. Эти интернет-часы могут быть очень полезны при создании проектов Интернета вещей.
Что такое NTP ??
Сетевой протокол времени (NTP) - это сетевой протокол, используемый для синхронизации времени между системами и сетями данных. Структура NTP зависит от серверов времени в Интернете. NTP имеет алгоритмы для точной настройки времени суток. На серверах NTP есть программное обеспечение, которое отправляет текущее время на клиентские компьютеры через порт UDP 123. Итак, в этом проекте мы получаем время с сервера NTP с помощью ESP32 и отображаем его на OLED-дисплее.
Необходимые материалы:
- ESP32
- 128 * 64 OLED-дисплей
- Макетная плата
- Мужской-женский провода
Принципиальная электрическая схема:
Здесь мы используем режим SPI для подключения нашего модуля дисплея 128 × 64 OLED (SSD1306) к ESP32. Итак, он будет использовать 7 контактов. Связи с ESP32 представлены как:
- Вывод CS (выбор микросхемы) OLED -> PIN D5 ESP32
- Контакт постоянного тока OLED -> контакт D4 ESP32
- Вывод RES OLED -> PIN D2 ESP32
- Вывод SDA OLED -> PIN D23, то есть MOSI ESP32
- Контакт SCK OLED -> PIN D18, т.е. SCK ESP32
- Vdd OLED -> Vcc ESP32
- Земля OLED -> Земля 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.WiFiUdp:
Итак, мы включили все библиотеки и определили переменную для ввода имени и пароля 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, пароль); в то время как (WiFi.status ()! = WL_CONNECTED) { задержка (500); Serial.print ("."); } Serial.println (""); Serial.println («WiFi подключен.»); Serial.println ("IP-адрес:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Затем инициализируйте функции дисплея, чтобы отображать время на OLED.
display.begin (SSD1306_SWITCHCAPVCC);
В функции цикла мы использовали timeClient.update (), эта функция принимает обновленное время из NTP в виде строки и сохраняет его в переменной formattedTime . Затем отобразите его на OLED с помощью функции display.println () .
недействительный цикл () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // установите эти параметры в соответствии с вашими потребностями.. display.setCursor (0, 0); display.println (formattedTime);
Полная программа представлена ниже. Теперь, наконец, запрограммируйте ESP32 с помощью Arduino IDE, и ваши интернет-часы готовы отображать время.