EASY! tutorial koneksi ESP32 Ke Sensor GPS BN220 BN-220 BN-220ZF

EASY! tutorial koneksi ESP32 Ke Sensor GPS BN220 BN-220 BN-220ZF

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