이전 튜토리얼에서는 DS3231 및 ESP32를 사용하여 RTC 클럭을 만들었습니다. 하드웨어 요구 사항을 최소화하기 위해 RTC 모듈을 사용하지 않고 인터넷 시계를 만들 것 입니다. 이것은 RTC 클럭에 비해 더 정확합니다. ESP32는 Wi-Fi 모듈이며 인터넷에 쉽게 연결할 수 있으므로 NTP (네트워크 시간 프로토콜) 및 UDP (사용자 데이터 그램 프로토콜)를 사용하여 Wi-Fi를 사용하여 인터넷에서 시간을 가져옵니다. 이 인터넷 시계는 IoT 프로젝트를 구축하는 동안 매우 유용 할 수 있습니다.
NTP 란 ??
NTP (Network Time Protocol)는 시스템과 데이터 네트워크 간의 시간 동기화에 사용되는 네트워킹 프로토콜입니다. NTP 프레임 워크는 인터넷 시간 서버에 따라 다릅니다. NTP에는 시간을 정확하게 조정하는 알고리즘이 있습니다. NTP 서버에는 UDPport 123을 사용하여 클라이언트 컴퓨터에 시계의 시간을 보내는 소프트웨어가 있습니다. 따라서이 프로젝트에서는 ESP32를 사용하여 NTP 서버에서 시간을 가져와 OLED 디스플레이에 표시합니다.
필요한 재료:
- ESP32
- 128 * 64 OLED 디스플레이
- 브레드 보드
- 수-암 전선
회로도:
여기에서는 SPI 모드를 사용하여 128x64 OLED 디스플레이 모듈 (SSD1306) 을 ESP32에 연결합니다. 따라서 7 개의 핀을 사용합니다. ESP32와의 연결은 다음과 같이 제공됩니다.
- OLED의 CS (Chip select) 핀-> ESP32의 PIN D5
- OLED의 DC 핀-> ESP32의 PIN D4
- OLED의 RES 핀-> ESP32의 PIN D2
- OLED의 SDA 핀-> PIN D23 즉 ESP32의 MOSI
- OLED의 SCK 핀-> PIN D18 즉 ESP32의 SCK
- OLED의 Vdd-> ESP32의 Vcc
- OLED의 GND-> ESP32의 GND
ESP32 용 보드 파일이 필요합니다. ESP32 개발 키트 용 Arduino IDE의 체크인 보드 관리자 드롭 다운 메뉴입니다. 없는 경우 아래 링크에 제공된 단계를 따르십시오.
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가 시간을 업데이트하는 데 걸리는 시간 간격 인 NTP_INTERVAL . 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);
에서 설정 기능, 와이파이 설정 초기화 인터넷에 연결합니다.
void setup () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("연결 중"); Serial.println (ssid); WiFi.begin (ssid, password); while (WiFi.status ()! = WL_CONNECTED) { delay (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 변수에 저장합니다. 그런 다음 display.println () 함수를 사용하여 OLED에 표시합니다.
void loop () { timeClient.update (); 문자열 formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // 필요에 따라 이러한 매개 변수를 설정합니다. display.setCursor (0, 0); display.println (formattedTime);
전체 프로그램 은 다음과 같습니다. 이제 마지막으로 Arduino IDE로 ESP32를 프로그래밍하면 인터넷 시계가 시간을 표시 할 준비가됩니다.