В предишния урок направихме RTC часовник, използвайки DS3231 и ESP32. За да сведем до минимум хардуерните изисквания, ще направим интернет часовник, без да използваме RTC модул. Това е по-точно в сравнение с RTC часовника. ESP32 е Wi-Fi модул и може лесно да се свърже с интернет, така че ще използваме NTP (Network Time Protocol) и UDP (User Datagram Protocol), за да изтеглим времето от интернет чрез Wi-Fi. Този интернет часовник може да бъде много полезен при изграждането на IoT проекти.
Какво е NTP ??
Network Time Protocol (NTP) е мрежов протокол, използван за синхронизиране на времето между системите и мрежите за данни. Рамката NTP зависи от сървърите на Internet Time. NTP има алгоритми за прецизно регулиране на времето на деня. NTP сървърите имат софтуер, който изпраща времето на часовника към клиентските компютри, използвайки UDPport 123. Така че в този проект получаваме време от NTP сървъра с помощта на ESP32 и го показваме на OLED дисплей.
Необходими материали:
- ESP32
- 128 * 64 OLED дисплей
- Макет
- Мъжко-женски проводници
Електрическа схема:
Тук използваме режим SPI, за да свържем нашия 128 × 64 OLED дисплеен модул (SSD1306) към ESP32. Така че ще използва 7 пина. Връзките с ESP32 са дадени като:
- CS (Chip select) щифт на OLED -> PIN D5 на ESP32
- DC щифт на OLED -> ПИН D4 на ESP32
- RES щифт на OLED -> ПИН D2 на ESP32
- SDA щифт на OLED -> ПИН D23, т.е. MOSI на ESP32
- SCK щифт на OLED -> PIN D18, т.е. SCK на ESP32
- Vdd на OLED -> Vcc на ESP32
- GND на OLED -> GND на ESP32
Нуждаете се от бордови файлове за вашия ESP32. Падащо меню на борда за регистрация на Arduino IDE за ESP32 dev kit. Ако не е там, следвайте стъпките, дадени в линка по-долу:
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 име и парола.
#include
Тук библиотеката 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 (); Низ formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // задайте тези параметри според вашите нужди.. display.setCursor (0, 0); display.println (formattedTime);
Пълната програма е дадена по-долу. Сега най-накрая програмирайте ESP32 с Arduino IDE и вашият интернет часовник е готов да показва време.