Tutorial Belanja komponen

Tutorial › Proyek Gabungan

Pelacak Lokasi GPS

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINVCCRXTXGNDGPS NEO-6M + antena

Modul GPS NEO-6M menerima sinyal satelit dan ESP32 mengirim lokasinya ke Klenik sebagai tautan Google Maps yang bisa langsung dibuka, lengkap dengan kecepatan dan jumlah satelit. Dasar untuk pelacak motor, sepeda, atau hewan ternak.

GPS menghitung posisinya dari waktu tempuh sinyal beberapa satelit. Minimal 4 satelit dibutuhkan untuk posisi yang baik. Modul NEO-6M mengirim hasilnya lewat serial (UART) sebagai kalimat teks NMEA, misalnya $GPRMC,..., beberapa kali per detik. ESP32 punya port serial kedua (Serial2) di pin RX2/TX2, jadi Serial utama tetap bebas untuk Serial Monitor.

Pustaka TinyGPSPlus membaca kalimat NMEA huruf demi huruf (gps.encode()) dan menyediakan hasilnya: lintang, bujur, kecepatan, ketinggian, dan jumlah satelit. Lokasi dikirim sebagai tautan maps.google.com/?q=lat,lon, yang bisa diketuk di Text Log untuk membuka peta.

Pertama kali menyala, GPS butuh 1-5 menit di tempat terbuka (cold start) sebelum mendapat posisi. Di dalam gedung, sinyal satelit biasanya tidak tembus.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
GPS NEO-6M GYNEO6MV2 Module + EEPROM + Antena Ar1Rp60.800
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 41Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp139.300
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
GPS NEO-6M + antena VCC→3V3merah
GPS NEO-6M + antena RX→TX2kuning
GPS NEO-6M + antena TX→RX2biru
GPS NEO-6M + antena GND→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Lokasi (ketuk untuk peta)ichibot/budi1234/p144/lokasi
https://maps.google.com/?q=-7.797068,110.370529
0 detik lalu
Sinyal GPSichibot/budi1234/p144/status
TERKUNCI
0 detik lalu
Satelitichibot/budi1234/p144/satelit
0 – 127
0 detik lalu
Kecepatanichibot/budi1234/p144/kecepatan
08023.4 km/j
0 detik lalu

Cara cepat: unduh p144.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Text Log
Lokasi (ketuk untuk peta)
ichibot/KODE/p144/lokasimenampilkan teks masuk
Indikator Boolean
Sinyal GPS
ichibot/KODE/p144/statusON = 1 “TERKUNCI”, OFF = 0
Gauge
Satelit
ichibot/KODE/p144/satelit0–12
Gauge
Kecepatan
ichibot/KODE/p144/kecepatan0–80 km/j

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary), TinyGPSPlus (Mikal Hart). Board di Arduino IDE: ESP32 Dev Module. Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p144.inoUnduh .ino
// Proyek 144 - Pelacak Lokasi GPS
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <TinyGPSPlus.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_SATELIT    = "ichibot/budi1234/p144/satelit";
const char* TOPIK_STATUS     = "ichibot/budi1234/p144/status";
const char* TOPIK_LOKASI     = "ichibot/budi1234/p144/lokasi";
const char* TOPIK_KECEPATAN  = "ichibot/budi1234/p144/kecepatan";
const char* TOPIK_KETINGGIAN = "ichibot/budi1234/p144/ketinggian";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
TinyGPSPlus gps;
unsigned long terakhir = 0;

void langganan() {}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); Serial2.begin(9600, SERIAL_8N1, 16, 17); // RX2 = GPIO16 (dari TX GPS), TX2 = GPIO17 sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); while (Serial2.available()) gps.encode(Serial2.read()); // GPS mengirim kalimat NMEA terus-menerus if (millis() - terakhir < 5000) return; terakhir = millis(); mqtt.publish(TOPIK_SATELIT, String(gps.satellites.value()).c_str()); if (!gps.location.isValid() || gps.location.age() > 10000) { mqtt.publish(TOPIK_STATUS, "0"); return; // belum dapat posisi (di dalam ruangan / baru menyala) } mqtt.publish(TOPIK_STATUS, "1"); String lat = String(gps.location.lat(), 6), lon = String(gps.location.lng(), 6); mqtt.publish(TOPIK_LOKASI, ("https://maps.google.com/?q=" + lat + "," + lon).c_str()); mqtt.publish(TOPIK_KECEPATAN, String(gps.speed.kmph(), 1).c_str()); mqtt.publish(TOPIK_KETINGGIAN, String(gps.altitude.meters(), 0).c_str()); }

Langkah 4: Pahami kodenya

  1. Kabel serial selalu disilang: TX GPS ke RX ESP32, RX GPS ke TX ESP32. NEO-6M bawaan berkomunikasi pada 9600 baud.
  2. Semua huruf yang datang diberikan ke pustaka. Jangan ada delay() panjang, atau data GPS akan menumpuk dan hilang.
  3. Lokasi hanya dikirim kalau valid dan diperbarui dalam 10 detik terakhir.