ESP32 NTP Client-Server: Dapatkan Tarikh dan Masa – Arduino IDE

Esp32 Ntp Client Server Dapatkan Tarikh Dan Masa Arduino Ide



ESP32 ialah papan Internet Perkara (IoT) berasaskan mikropengawal yang boleh disambungkan dengan pelbagai jenis peranti. ESP32 digunakan secara meluas dalam projek berasaskan IoT.

Bekerja dengan ESP32 atau mana-mana masa mikropengawal lain adalah sangat penting kerana pemasa terbina tidak begitu tepat supaya kami boleh menggunakan NTP pelayan untuk mengambil masa nyata dan boleh menyimpannya di dalam pembolehubah yang boleh digunakan kemudian di dalam kod ESP32.

Network Time Protocol (NTP) menggunakan Coordinated Universal Time (UTC) yang menyegerakkan jam sistem dengan ketepatan dan ketepatan yang tinggi. Pada rangkaian yang lebih kecil NTP boleh memberikan kami jam setepat 1 ms manakala rangkaian yang lebih besar seperti LAN (Rangkaian Kawasan Tempatan) NTP boleh memberikan ketepatan dengan berpuluh-puluh milisaat melalui internet. Menggunakan jam yang tepat ESP32 ini boleh melaksanakan arahan pada masa tertentu.







Panduan ini mengandungi kandungan berikut:



  1. Pengenalan kepada NTP (Protokol Masa Rangkaian)
  2. Pelayan NTP dan Tetapan Masa



  3. Mencetak Masa Nyata Menggunakan Fungsi printLocalTime()





1: Pengenalan kepada NTP (Protokol Masa Rangkaian)

NTP ialah akronim daripada N ework T untuk dilakukan P rotocol ialah standard yang digunakan untuk menyegerakkan masa peranti dengan zon waktunya. Protokol masa rangkaian menyegerakkan masa semua peranti rangkaian dengan UTC yang juga dikenali sebagai Waktu Universal Selaras.

UTC adalah seperti GMT (Greenwich Mean Time) tetapi ia tidak berubah dan kekal sama di seluruh dunia. Idea utama di sebalik penggunaan UTC adalah untuk membaca masa dari NTP pelayan dan dengan menggunakan offset UTC kita boleh mendapatkan waktu tempatan mengikut zon waktu kita.



2: Pelayan NTP dan Tetapan Masa

Untuk membaca masa dari pelayan NTP kita perlu mengisytiharkan pembolehubah berikut di dalam kod menggunakan pembolehubah ini kita boleh mendapatkan masa dari pelayan NTP.

  • Pelayan NTP
  • GMT Offset
  • Offset Siang

2.1: Pelayan NTP

Kami akan meminta masa daripada pool.ntp.org yang mengandungi data masa seluruh dunia pada pelayan dan sesiapa sahaja boleh meminta waktu tempatan mereka menggunakan kumpulan ini. Berikut adalah beberapa pelayan lain yang boleh kami akses:

Kawasan Nama hos
Seluruh dunia pool.ntp.org
Asia asia.pool.ntp.org
Eropah europe.pool.ntp.org
Amerika Utara north-america.pool.ntp.org
Oceania oceania.pool.ntp.org
Amerika Selatan south-america.pool.ntp.org

2.2: GMT Offset

Offset GMT menerangkan perbezaan masa dalam jam antara zon waktu yang anda tinggalkan ke GMT. Contohnya, jika kita menggunakan zon waktu AS, kita boleh menetapkannya UTC = -11:00 .

2.3: Offset Siang

Di sini offset siang ialah masa penjimatan siang yang biasanya diambil sebagai 1 jam. Masa penjimatan siang bermakna menggerakkan jam 1 jam ke hadapan semasa musim panas dan menukarnya semula pada musim sejuk. Perintah ini biasanya digunakan apabila zon waktu tersuai digunakan dan peraturan penjimatan siang digunakan.

Memandangkan kami telah merangkumi asas pelayan NTP sekarang, kami akan menyemak bagaimana kami boleh menghantar permintaan ke pelayan NTP dan membaca waktu tempatan menggunakan ESP32 dengan kod IDE Arduino.

3: Mencetak Masa Nyata Menggunakan Fungsi printLocalTime()

The printLocalTime() fungsi akan memanggil getLocalTime() fungsi yang menghantar permintaan ke pelayan NTP dan menyimpan tarikh dan masa yang diterima di dalam info masa pembolehubah.

3.1: Kod untuk Mencetak Masa Nyata

Tampalkan kod yang diberikan untuk pelayan klien NTP dalam editor IDE Arduino. Sambungkan ESP32 dengan PC, pilih port COM dan muat naik kod.

#include
#include 'time.h'
const char * ssid     = “GANTIKAN_SSID_ANDA”;
const char * kata laluan = 'GANTIKAN_KATA_KATA_ANDA';
const char * ntpServer = 'pool.ntp.org' ;
const long  gmtOffset_sec = 18000 ; /* GMT OFFSET + 5 JAM ( 18000 SEK ) */
const int   daylightOffset_sec = 3600 ; /* 1 jam siang mengimbangi */
void printLocalTime ( )
{
struct tm timeinfo;
jika ( ! getLocalTime ( & info masa ) ) {
Serial.println ( 'Gagal mendapatkan masa' ) ;
kembali ;
}
Serial.println ( & maklumat masa, '%A, %B %d %Y %H:%M:%S' ) ;
}
persediaan kosong ( )
{
Bersiri.mulakan ( 115200 ) ;
// sambung ke WiFi
Serial.printf ( 'Menyambung ke %s ' , ssid ) ;
WiFi.mulakan ( ssid, kata laluan ) ;
sementara ( WiFi.status ( ) ! = WL_CONNECTED ) {
kelewatan ( 500 ) ;
Bersiri.cetak ( '.' ) ;
}
Serial.println ( 'BERHUBUNG' ) ;
// init dan dapatkan masa
configMasa ( gmtOffset_sec, daylightOffset_sec, ntpServer ) ;
printLocalTime ( ) ;
// putuskan sambungan WiFi sebagai ia tidak lagi diperlukan
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
gelung kosong()
{
kelewatan(1000);
printLocalTime();
}

Kod bermula dengan memasukkan WiFi dan perpustakaan masa. WiFi perpustakaan akan membantu untuk menyambungkan ESP32 dengan rangkaian sementara masa perpustakaan akan mengendalikan penyegerakan pelayan NTP.

Selepas itu SSID dan kata laluan rangkaian yang akan disambungkan oleh ESP32 ditakrifkan. Gantikan kelayakan rangkaian anda di sini. Selepas itu kita telah menentukan GMT mengimbangi sebagai 18000 saat iaitu (UTC+5 jam). Anda boleh menggantikan UTC zon waktu anda sendiri di sini. Ikut pautan untuk mendapatkan GMT mengimbangi untuk zon waktu anda.

Selain itu, alamat pelayan NTP ditentukan menggunakan arahan:

const char * ntpServer = 'pool.ntp.org' ;

Perintah ini secara automatik memilih pelayan masa yang akan mencari anda. Walau bagaimanapun, kami juga boleh menetapkan zon waktu menggunakan pelayan NTP yang dijelaskan dalam Pelayan NTP bahagian.

Pada akhirnya kami mengkonfigurasi ESP32 sebagai klien NTP dan untuk mendapatkan tarikh dan masa. Untuk itu kami menggunakan configTime() fungsi.

Akhir sekali, menggunakan printLocalTime() fungsi, tarikh dan masa semasa dicetak pada monitor bersiri. Fungsi ini mengandungi struktur masa tm yang menyimpan semua maklumat dalam info masa pembolehubah.

Arahan berikut mewakili info masa struktur.

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

Setiap struktur huruf masa berkaitan dengan maklumat tertentu:

Penentu Maklumat
%A Hari kepulangan dalam seminggu
%B Bulan pulang
%d Hari balik bulan
%Y Pulangan tahun semasa
%H Kembalikan jam semasa
%M Kembalikan minit semasa
%S Kembalikan detik semasa

3.2: Output

Selepas memuat naik kod ESP32 akan menyambung dengan rangkaian WiFi dan menghantar permintaan kepada pelayan NTP untuk menerima tarikh dan masa semasa. Output berikut boleh dilihat pada monitor bersiri Arduino.

Masa semasa pada PC dan ESP32 saya dipadankan.

Kami telah berjaya membaca masa dari pelayan NTP menggunakan ESP32 sebagai pelanggan.

Kesimpulan

Masa adalah sangat penting untuk aplikasi seperti cap masa dan melaksanakan arahan pada masa tertentu untuk menjana output. Pemasa terbina tidak begitu tepat, jadi kami boleh menggunakan pelayan NTP untuk membaca masa dan tarikh semasa. Masa ini boleh disimpan di dalam pembolehubah untuk digunakan di dalam kod kami. Pelajaran ini membantu mendapatkan masa yang tepat bagi mana-mana zon waktu di seluruh dunia menggunakan ESP32.