Waktu Yang Seragam
Sering kali kita mendapati waktu yang tidak seragam pada beberapa tempat yang sama, misalkan di sebuah restoran, tempat wisata, dan tempat hiburan lain nya, dimana tempat da beberapa
Ada beberapa tempat yang membutuhkan display waktu yang akurat dan seragam, sebagai contoh misal di bandara. Di Bandara, waktu harus benar-benar seragam, karena waktu adalah hal yang sangat penting dalam jadwal keberangkatan pesawat.
Salah satu solusi untuk mendapatkan waktu yang seragam adalah, menggunakan GPS. Ketika saya uji time nya, sangat persis dengan time NTP yang di akses melalui internet. Ke untungan menggunakan GPS adalah tanpa menggunakan INTERNET, dedicate dari satelite GPS yang di dapatkan.
Kelemahan NTP menggunakan GPS adalah tidak terbaca nya waktu di indoor. Sehingga membutuhkan topology tersendiri agar signal GPS bisa di dapatkan di indoor.
Nah sekarang yuk kita coba membuat GPS Time menggunakan ESP32 dan Quectel L86 sebagai GPS nya
Wiring Config GPS
Pada Project kali ini kita menggunakan ESP32 Custome yang kita design sendiri, jika ingin dilihat lebih jauh, cukup click button di bawah ini
Wiring nya seperti berikut ,
- GPS RXD <-> GPIO16 ESP32
- GPS TXD <-> GPIO17 ESP32
- VCC <-> 3.3V
- GND <-> GND
Source Code Arduino
Sebelum kamu buat program nya, maka hal penting adalah add library GPS, link download nya ada pada link di bawah ini, cukup click dan download
download library tinyGPS ++ https://github.com/mikalhart/TinyGPSPlus
Add di Arduino IDE dan Ketikkan program di bawah ini
#include <TinyGPS++.h> TinyGPSPlus gps; #define ss Serial1 String str_lat = ""; String str_lon = ""; String str_date = ""; String str_time = ""; unsigned long cur_time, old_time; int buf_detik, detik = 0; int jam, menit; int tahun, bulan, tanggal; void setup() { Serial.begin(115200); ss.begin(9600, SERIAL_8N1, 17, 16); delay(100); } void loop() { read_gps(); if (buf_detik != detik) { String str_buf_date = ""; String str_buf_time = ""; String str_tgl = ""; String str_bln = ""; String str_jam = ""; String str_menit = ""; String str_detik = ""; str_bln = bulan < 10 ? "0" + String(bulan) : String(bulan); str_tgl = tanggal < 10 ? "0" + String(tanggal) : String(tanggal); str_buf_date = str_bln + "/" + str_tgl + "/" + String(tahun) + " "; str_date = str_buf_date; Serial.print(" tanggal/jam: "); Serial.print(str_date); str_detik = detik < 10 ? "0" + String(detik) : String(detik); str_menit = menit < 10 ? "0" + String(menit) : String(menit); str_jam = jam < 10 ? "0" + String(jam) : String(jam); str_buf_time = str_jam + ":" + str_menit + ":" + str_detik; str_time = str_buf_time; Serial.print(str_time); Serial.println(); buf_detik = detik; } } void read_gps() { while (ss.available() > 0) if (gps.encode(ss.read())) displayInfo(); if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println(F("No GPS detected: check wiring.")); while (true); } } void displayInfo() { if (gps.date.isValid()) { bulan = gps.date.month(); tanggal = gps.date.day(); tahun = gps.date.year(); } else { Serial.print(F("INVALID")); } if (gps.time.isValid()) { jam = gps.time.hour(); detik = gps.time.second(); menit = gps.time.minute(); //convert to local zone, indonesia + 7 jam = jam + 7; if (jam >= 24 ) { jam = jam - 24; } } else { Serial.print(F("INVALID")); } }
Upload code dan lihat di serial Monitor, akan tampil seperti gambar berikut ini,
Hal Penting dalam Program
point penting dalam program ini adalah cuplikan code berikut:
jam = jam + 7; if (jam &gt;= 24 ) { jam = jam - 24; }
Angka 7 pada program di atas adalah TIme zone yang kamu gunakan, karena time dari GPS yang didapat adalah di UTC +0.00, jadi rubah sesuai dengan time zone di tempat kamu.
Tutorial ini menggunakan Board CUSTOME ESP32 SIM7600 GPS Logger, request dari client, jika teman-teman membutuhkan nya, cukup tekan tombol whatsapp di bawah ini