kemampuan untuk menentukan lokasi secara akurat sangat penting. Sensor GPS BN220 adalah salah satu pilihan populer yang menawarkan performa handal dengan ukuran kompak. Dalam tutorial ini, kita akan mempelajari cara menghubungkan sensor GPS BN220 ke ESP32 dengan langkah-langkah sederhana. Anda akan menemukan cara mengonfigurasi koneksi, serta contoh kode untuk mendapatkan data lokasi secara real-time

Berikut Merupakan Codingan Yang Telah Kami Sediakan, Telah Diuji Untuk Memastikan Keakuratan Serta Kestabilannya.
#include <Arduino.h>
//TUTORIAL UNTUK SETTING SENSOR GPS LIHAT DISINI :
// https://oscarliang.com/gps-settings-u-center/
// INFORMASI LENGKAP SENSOR LIHAT DISINI :
// https://dn790000.ca.archive.org/0/items/bn-220-gps-antenna/BN-220%20GPS+Antenna.pdf
#define RXD2 16
#define TXD2 17
String data_baris = ""; // Buffer untuk menyimpan satu baris data
// Variabel untuk menampung hasil parsing
String latitude, longitude;
char latDirection, lonDirection;
String convertToDMS(String rawCoordinate, char direction) {
int degrees;
float minutes;
// Tentukan panjang koordinat dan ekstrak derajat serta menit
if (rawCoordinate.length() == 9) { // Latitude (contoh: 0136.99205)
degrees = rawCoordinate.substring(0, 2).toInt();
minutes = rawCoordinate.substring(2).toFloat();
} else if (rawCoordinate.length() == 10) { // Latitude (contoh: 0137.00375)
degrees = rawCoordinate.substring(0, 2).toInt();
minutes = rawCoordinate.substring(2).toFloat();
} else if (rawCoordinate.length() == 11) { // Longitude (contoh: 10337.41921)
degrees = rawCoordinate.substring(0, 3).toInt();
minutes = rawCoordinate.substring(3).toFloat();
} else if (rawCoordinate.length() == 12) { // Longitude (contoh: 10345.67890)
degrees = rawCoordinate.substring(0, 3).toInt();
minutes = rawCoordinate.substring(3).toFloat();
} else {
return "Invalid coordinate";
}
// Pisahkan menit dan bagian desimal dari menit
int wholeMinutes = (int) minutes;
float decimalMinutes = minutes - wholeMinutes;
// Hitung detik dari bagian desimal menit
float seconds = decimalMinutes * 60.0;
// Format output dalam format DMS (Degree, Minutes, Seconds)
String result = String(degrees) + "°" + String(wholeMinutes) + "'" + String(seconds, 3) + """ + direction;
return result;
}
void parseGGA(String nmeaSentence, String &lat, char &latDir, String &lon, char &lonDir) {
int index = 0;
int lastCommaIndex = -1;
int commaIndex = 0;
for (int i = 0; i < 7; i++) {
lastCommaIndex = commaIndex;
commaIndex = nmeaSentence.indexOf(',', lastCommaIndex + 1);
if (i == 2) lat = nmeaSentence.substring(lastCommaIndex + 1, commaIndex); // Latitude
if (i == 3) latDir = nmeaSentence.charAt(lastCommaIndex + 1); // Latitude Direction
if (i == 4) lon = nmeaSentence.substring(lastCommaIndex + 1, commaIndex); // Longitude
if (i == 5) lonDir = nmeaSentence.charAt(lastCommaIndex + 1); // Longitude Direction
}
}
void cek_gps() {
// Memeriksa apakah ada data yang tersedia dari GPS
if (Serial2.available()) {
// Baca setiap karakter dari GPS
char incomingChar = Serial2.read();
// Tambahkan karakter ke data_baris
data_baris += incomingChar;
// Jika ditemukan newline ('
'), artinya satu baris sudah selesai
if (incomingChar == '
') {
// Cek apakah baris tersebut mengandung string "GNGSA"
if (data_baris.indexOf("GGA") != -1) {
// Jika mengandung "GGA", kirimkan ke Serial Monitor
// Serial.println("Detected GGA in the following line:");
Serial.println(data_baris); // Kirim seluruh baris yang mengandung GNGSA ke Serial Monitor
String nmeaSentence = data_baris;
// Parsing data NMEA
parseGGA(nmeaSentence, latitude, latDirection, longitude, lonDirection);
// Konversi Latitude dan Longitude ke DMS
String latDMS = convertToDMS(latitude, latDirection);
String longDMS = convertToDMS(longitude, lonDirection);
Serial.println("Latitude (DMS) : " + latDMS);
Serial.println("Longitude (DMS) : " + longDMS);
}
// Reset data_baris untuk membaca baris berikutnya
data_baris = "";
}
}
}
void setup()
{
Serial.begin(9600);
// Mulai Serial Monitor untuk debugging
Serial.begin(115200);
// Inisialisasi Serial2 untuk berkomunikasi dengan modul GPS
Serial2.begin(57600, SERIAL_8N1, RXD2, TXD2);
// Informasi pin TX dan RX
Serial.println("Serial Txd is on pin: " + String(TXD2));
Serial.println("Serial Rxd is on pin: " + String(RXD2));
}
void loop(){
cek_gps();
}
untuk skematik, kamu bisa menggunakan gambar berikut:

Selamat mencoba! Semoga sukses dengan proyekmu. Jadikan setiap langkah sebagai pengalaman berharga. Salam dari Labrobotika, tempat inovasi dan kreativitas!
Jika anda berminat menggunakan jasa labrobotika, silahkan hubungi admin: WHATSAPP