ESP32 NTP İstemci-Sunucu: Tarih ve Saat Al – Arduino IDE

Esp32 Ntp Istemci Sunucu Tarih Ve Saat Al Arduino Ide



ESP32, çok çeşitli cihazlarla arayüzlenebilen, mikrodenetleyici tabanlı Nesnelerin İnterneti (IoT) kartıdır. ESP32, IoT tabanlı projelerde yaygın olarak kullanılmaktadır.

Dahili zamanlayıcı o kadar doğru olmadığından ESP32 veya başka bir mikrodenetleyici zamanı ile çalışmak çok önemlidir, bu nedenle bir NTP sunucusu gerçek zamanlı olarak alır ve daha sonra ESP32 kodu içinde kullanılabilecek bir değişken içinde saklayabilir.

Ağ Zaman Protokolü (NTP), sistem saatini büyük bir hassasiyet ve doğrulukla senkronize eden Koordineli Evrensel Zamanı (UTC) kullanır. Daha küçük ağlarda NTP bize 1 ms kadar doğru saatler sağlayabilirken, LAN (Yerel Alan Ağı) NTP gibi daha büyük ağlar internet üzerinden onlarca milisaniye doğrulukta verebilir. Bu doğru saati kullanarak ESP32, talimatları belirli bir zamanda yürütebilir.







Bu kılavuz aşağıdaki içerikleri içerir:



  1. NTP'ye Giriş (Ağ Zaman Protokolü)
  2. NTP Sunucusu ve Saat Ayarları



  3. printLocalTime() İşlevini Kullanarak Gerçek Zamanlı Yazdırma





1: NTP'ye Giriş (Ağ Zaman Protokolü)

NTP'nin kısaltması N T yapmak P rotocol, cihazların zamanını kendi zaman dilimleriyle senkronize etmek için kullanılan bir standarttır. Ağ zaman protokolü, tüm ağ cihazlarının zamanını, Eşgüdümlü Evrensel Zaman olarak da bilinen UTC ile senkronize eder.

UTC, GMT (Greenwich Mean Time) gibidir, ancak değişmez ve tüm dünyada aynı kalır. UTC'yi kullanmanın arkasındaki ana fikir, zamanı şu andan itibaren okumaktır: NTP sunucu ve UTC farkını uygulayarak yerel saat dilimimize göre alabiliriz.



2: NTP Sunucusu ve Saat Ayarları

NTP sunucusundan zamanı okumak için, kodun içinde aşağıdaki değişkenleri bildirmemiz gerekir, bu değişkenleri kullanarak zamanı NTP sunucusundan alabiliriz.

  • NTP Sunucusu
  • GMT Farkı
  • Gün Işığı Dengesi

2.1: NTP Sunucusu

Zaman talep edeceğiz havuz.ntp.org sunucuda dünya çapındaki zaman verilerini içeren ve herhangi biri bu havuzu kullanarak yerel saatini talep edebilir. Erişebileceğimiz diğer bazı sunucular aşağıdadır:

Alan Ana bilgisayar adı
Dünya çapında havuz.ntp.org
Asya asia.pool.ntp.org
Avrupa avrupa.pool.ntp.org
Kuzey Amerika North-America.pool.ntp.org
Okyanusya okyanusya.pool.ntp.org
Güney Amerika güney-amerika.pool.ntp.org

2.2: GMT Farkı

GMT farkı, yaşadığınız saat dilimi ile GMT arasındaki zaman farkını saat olarak tanımlar. Örneğin, ABD saat dilimini kullanırsak, bunu şu şekilde ayarlayabiliriz: UTC = -11:00 .

2.3: Gün Işığı Dengesi

Burada gün ışığı ofseti, genellikle 1 saat olarak alınan yaz saati uygulamasıdır. Yaz saati uygulaması, yazın saati 1 saat ileri almak ve kışın tekrar geri almak anlamına gelir. Bu komut genellikle özel bir saat diliminin kullanıldığı ve gün ışığından yararlanma kuralının uygulandığı yerlerde kullanılır.

NTP sunucusunun temellerini ele aldığımız için şimdi NTP sunucusuna nasıl istek gönderebileceğimizi kontrol edeceğiz ve Arduino IDE kodu ile ESP32 kullanarak yerel saati okuyacağız.

3: printLocalTime() İşlevini Kullanarak Gerçek Zamanlı Yazdırma

bu printLocalTime() işlevi arayacak getLocalTime() isteği NTP sunucusuna gönderen ve alınan tarih ve saati içinde depolayan işlev zaman bilgisi değişken.

3.1: Gerçek Zamanlı Yazdırılacak Kod

Arduino IDE editöründe NTP istemci sunucusu için verilen kodu yapıştırın. ESP32'yi PC'ye bağlayın, COM bağlantı noktasını seçin ve kodu yükleyin.

#include
#include 'time.h'
sabit karakter * ssid     = 'REPLACE_WITH_YOUR_SSID';
sabit karakter * şifre = “REPLACE_WITH_YOUR_PASSWORD”;
sabit karakter * ntp Sunucusu = 'havuz.ntp.org' ;
sabit uzun  gmtOffset_sec = 18000 ; /* GMT OFSETİ + 5 SAAT ( 18000 saniye ) */
const int   daylightOffset_sec = 3600 ; /* 1 saat gündüz ofseti */
geçersiz baskıYerelZaman ( )
{
struct tm zaman bilgisi;
eğer ( ! Yerel Saati al ( & zaman bilgisi ) ) {
Serial.println ( 'Zaman elde edilemedi' ) ;
dönüş ;
}
Serial.println ( & zaman bilgisi, '%A, %B %d %Y %H:%M:%S' ) ;
}
geçersiz kurulum ( )
{
seri.başlangıç ( 115200 ) ;
// WiFi'ye bağlan
seri.printf ( '%s'ye bağlanılıyor' , ssid ) ;
WiFi.başlangıç ( ssid, şifre ) ;
süre ( WiFi.durumu ( ) ! = WL_BAĞLANTI ) {
gecikme ( 500 ) ;
seri.baskı ( '.' ) ;
}
Serial.println ( ' BAĞLANTILI ' ) ;
// başlat ve al zaman
yapılandırma zamanı ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// WiFi bağlantısını kes olarak BT artık gerekli değil
WiFi.disconnect(doğru);
WiFi.modu(WIFI_OFF);
}
boşluk döngüsü()
{
gecikme(1000);
printLocalTime();
}

Kod, WiFi ve zaman kitaplığını dahil ederek başladı. Kablosuz internet kitaplığı, ESP32'yi bir ağa bağlamaya yardımcı olurken zaman kitaplığı, NTP sunucusu eşitlemesini işleyecektir.

Daha sonra ESP32'nin bağlanacağı ağın SSID'si ve şifresi belirlenir. Ağ kimlik bilgilerinizi burada değiştirin. Bundan sonra tanımladığımız GMT farkı 18000 sn olarak (UTC+5 saat). Burada kendi saat diliminizin UTC'sini değiştirebilirsiniz. Takip et bağlantı almak için GMT farkı saat diliminiz için.

Ek olarak, NTP sunucu adresi şu komut kullanılarak belirtilir:

sabit karakter * ntp Sunucusu = 'havuz.ntp.org' ;

Bu komut, sizi arayacak olan zaman sunucusunu otomatik olarak seçer. Bununla birlikte, aşağıda açıklanan NTP sunucularını kullanarak bir saat dilimi de belirleyebiliriz. NTP Sunucusu bölüm.

Sonunda ESP32'yi NTP istemcisi olarak yapılandırıyoruz ve tarih ve saati alıyoruz. Bunun için kullandığımız yapılandırmaZamanı() işlev.

Son olarak, kullanarak printLocalTime() işlev, geçerli tarih ve saat seri monitörde yazdırılır. Bu işlev bir zaman yapısı içerir tm içindeki tüm bilgileri depolayan zaman bilgisi değişken.

Aşağıdaki komutlar zaman bilgisi yapı.

Serial.println ( & zaman bilgisi, '%A, %B %d %Y %H:%M:%S' ) ;

Her bir zaman harfi yapısı belirli bir bilgi ile ilgilidir:

belirleyiciler Bilgi
%A Haftanın dönüş günü
%B Dönüş ayı
%d Ayın dönüş günü
%Y Cari yılı iade et
%H Geçerli saati döndür
%M Geçerli dakikaları döndür
%S Geçerli saniyeyi döndür

3.2: Çıktı

Kodu yükledikten sonra ESP32 bir WiFi ağına bağlanacak ve geçerli tarih ve saati almak için NTP sunucusuna bir istek gönderecektir. Arduino seri monitöründe aşağıdaki çıktı görülebilir.

Bilgisayarımdaki ve ESP32'deki geçerli saat eşleşiyor.

ESP32'yi istemci olarak kullanarak NTP sunucusundan zamanı başarıyla okuduk.

Çözüm

Zaman damgası gibi uygulamalar ve çıktı oluşturmak için belirli zamanlarda komutları yürütmek için zaman çok önemlidir. Dahili zamanlayıcılar çok doğru değildir, bu nedenle geçerli saati ve tarihi okumak için bir NTP sunucusu kullanabiliriz. Bu süre, kodumuzun içinde kullanmak üzere bir değişken içinde saklanabilir. Bu ders, ESP32'yi kullanarak dünyadaki herhangi bir saat diliminin doğru zamanını almaya yardımcı olur.