Önceki eğitimde, DS3231 ve ESP32 kullanarak RTC saati yaptık. Donanım gereksinimlerini en aza indirmek için RTC modülünü kullanmadan İnternet saati yapacağız. Bu, RTC saatine kıyasla daha doğrudur. ESP32 bir Wi-Fi modülüdür ve internete kolayca bağlanabilir, bu nedenle Wi-Fi kullanarak internetten Zamanı almak için NTP (Ağ Zaman Protokolü) ve UDP (Kullanıcı Datagram Protokolü) kullanacağız. Bu İnternet saati, IoT Projeleri oluştururken çok faydalı olabilir.
NTP nedir?
Ağ Zaman Protokolü (NTP), sistemler ve Veri ağları arasında zaman senkronizasyonu için kullanılan bir ağ protokolüdür. NTP çerçevesi, İnternet Saati sunucularına bağlıdır. NTP, günün saatini tam olarak ayarlamak için algoritmalara sahiptir. NTP sunucuları, UDPport 123 kullanarak saatin günün saatini istemci bilgisayarlara gönderen yazılıma sahiptir. Yani burada bu projede, ESP32 kullanarak NTP sunucusundan zaman alıyoruz ve OLED ekranda gösteriyoruz.
Gerekli malzemeler:
- ESP32
- 128 * 64 OLED ekran
- Breadboard
- Erkek-dişi teller
Devre şeması:
Burada 128 × 64 OLED ekran Modülümüzü (SSD1306) ESP32'ye bağlamak için SPI modunu kullanıyoruz. Yani 7 pin kullanacaktır. ESP32 ile bağlantılar şu şekilde verilir:
- OLED'in CS (Çip seçme) pini -> ESP32'nin PIN D5'i
- OLED'in DC pini -> ESP32'nin PIN D4'ü
- OLED'in RES pini -> ESP32'nin PIN D2'si
- OLED'in SDA pini -> PIN D23 yani ESP32'nin MOSI'si
- OLED'in SCK pini -> PIN D18 yani ESP32'nin SCK'si
- OLED'in Vdd'si -> ESP32'nin Vcc'si
- OLED'in GND'si -> ESP32'nin GND'si
ESP32'niz için pano dosyalarına ihtiyacınız var. ESP32 dev kiti için Arduino IDE'nin check-in kartı yöneticisi açılır menüsü. Orada yoksa, aşağıdaki bağlantıda verilen adımları izleyin:
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
Bu proje için ESP12'yi de kullanabilirsiniz, buradan ESP12'yi kullanmayı öğrenin.
Yukarıdaki yazıda anlatıldığı gibi programımızı yazmak için Arduino IDE'yi kullanacağız.
Kod Açıklaması:
ESP32 İnternet Saati için tam kod makalenin sonunda verilmiştir. Burada kodun birkaç önemli parçasını açıklıyoruz.
Kodumuzda kullanmak için aşağıdaki bağlantılardan indirilebilecek birkaç kitaplığa ihtiyacımız var:
1. Adafruit_SSD1306:
2. SPI:
3. Adafruit_GFX:
4. NTPClient:
5. WiFiUdp:
Bu nedenle, Wi-Fi adı ve şifresini girmek için tüm kitaplıkları ve tanımlanmış değişkeni dahil ettik.
#Dahil etmek
Burada NTPClient.h kitaplığı, zaman sunucusuna bağlanmak için kullanılır. Bir NTP sunucusundan zaman alır ve onu senkronize halde tutar. Hhre WiFiUdp.h kitaplığı, UDP mesajlarını göndermek ve almak için kullanılır. UDP, sistemimizden NTP sunucusuna kısa mesajlar gönderen ve alan bir protokoldür.
Yani internetten zamanı elde etmek için, NTP için programımızda üç değişken tanımlamamız gerekiyor.
Ülkenizin saat dilimi olan NTP_OFFSET , yani Hindistan için +5: 30 saattir. Yani saniyede 19800'dür.
NTP_INTERVAL , zamanı güncellemek için NTP tarafından alınan zaman aralığıdır. 60-64 saniyedir.
NTP_ADDRESS , ülkenizin NTP sunucusudur. Hindistan için “ in.pool.ntp.org ”kullanabilirsiniz.
#define NTP_OFFSET 19800 // Saniyeler içinde #define NTP_INTERVAL 60 * 1000 // Milisaniye içinde #define NTP_ADDRESS "1.asia.pool.ntp.org" WiFiUDP ntpUDP; NTPClient timeClient (ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
In kurulum Fonksiyonu, Kablosuz ayarlarından initialise internete bağlanmak için.
geçersiz kurulum () { display.begin (); Serial.begin (9600); Serial.println (); Serial.println (); Serial.print ("Bağlanılıyor"); Serial.println (ssid); WiFi.begin (ssid, şifre); while (WiFi.status ()! = WL_CONNECTED) { gecikme (500); Seri.baskı ("."); } Serial.println (""); Serial.println ("WiFi bağlı."); Serial.println ("IP adresi:"); Serial.println (WiFi.localIP ()); timeClient.begin ();
Ardından OLED'de zamanı göstermek için ekran işlevlerini başlatın.
display.begin (SSD1306_SWITCHCAPVCC);
Döngü fonksiyonunda timeClient.update () kullandık , bu fonksiyon güncellenmiş zamanı NTP'den string şeklinde alır ve formattedTime değişkeninde saklar. Ardından, display.println () işlevini kullanarak OLED'de görüntüleyin.
void döngü () { timeClient.update (); String formattedTime = timeClient.getFormattedTime (); display.clearDisplay (); display.setTextSize (2); // bu parametreleri ihtiyacınıza göre ayarlayın.. display.setCursor (0, 0); display.println (formattedTime);
Tam program aşağıda verilmiştir. Sonunda ESP32'yi Arduino IDE ile programlayın ve İnternet Saatiniz zamanı göstermeye hazır.