Percubaan untuk menghasilkan sebuah GPS monitoring berjaya. Projek ini saya gunakan :
- ESP32 Wroom
- GPS module GPS6MV2
- 2.4 oled lcd module SPI
- Expansion board
setelah beberapa minit, rasanya tak sampai 5 minit, GPS saya trus lock dan hasilnya seperti di bawah.
di bawah ini saya sertkan skrip yang sudah banyak kali debug dan akhirnya sukses. have fun!!!
---------------------------------------------------------------------------------------------------------------
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <TinyGPS++.h>
// Tetapan OLED
#define OLED_MOSI 21
#define OLED_CLK 22
#define OLED_DC 15
#define OLED_CS 13
#define OLED_RESET 14
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
// Tetapan GPS
#define RXPin 16 // Sambungkan ke pin TX GPS
#define TXPin 17 // Sambungkan ke pin RX GPS
#define GPSBaud 9600
TinyGPSPlus gps;
void setup() {
// Memulakan Serial Monitor
Serial.begin(115200);
Serial.println("GPS Monitor Starting...");
// Memulakan sambungan GPS menggunakan UART bawaan
Serial2.begin(GPSBaud, SERIAL_8N1, RXPin, TXPin);
// Memulakan OLED SPI
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_RESET)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Berhenti jika OLED gagal
}
display.clearDisplay();
display.setTextSize(1); // Saiz teks
display.setTextColor(SSD1306_WHITE); // Warna teks
display.setCursor(0, 0);
display.println(F("GPS Monitor"));
display.display();
delay(2000);
}
void loop() {
// Membaca data GPS dari Serial2
while (Serial2.available() > 0) {
char c = Serial2.read();
if (gps.encode(c)) {
displayGPSInfo(); // Paparkan maklumat GPS pada OLED
}
}
// Debug di Serial Monitor
if (millis() > 5000 && gps.charsProcessed() < 10) {
Serial.println(F("Tiada isyarat GPS diterima."));
}
}
void displayGPSInfo() {
display.clearDisplay();
display.setCursor(0, 0);
if (gps.location.isValid()) {
display.print(F("Lat: "));
display.println(gps.location.lat(), 6);
display.print(F("Lon: "));
display.println(gps.location.lng(), 6);
display.print(F("Alt: "));
display.println(gps.altitude.meters());
display.print(F("Sat: "));
display.println(gps.satellites.value());
} else {
display.println(F("Mencari satelit..."));
}
display.display();
}