// GPS: GPS TX → ESP32 RX2 (GPIO16), GPS RX → ESP32 TX2 (GPIO17)
HardwareSerial gpsSerial(1);
const int RXPin = 16; // GPS TX
const int TXPin = 17; // GPS RX
// Ultrasonik sensör
const int trigPin = 5; // D5
const int echoPin = 18; // D18
// LED'ler
const int redPin = 4; // D4
const int greenPin = 2; // D2
float lastLat = 0.0;
float lastLon = 0.0;
void setup() {
Serial.begin(9600);
gpsSerial.begin(9600, SERIAL_8N1, RXPin, TXPin);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
Serial.println("ESP32 GPS + MESAFE SISTEMI AKTIF...");
}
void loop() {
while (gpsSerial.available()) {
String line = gpsSerial.readStringUntil('\n');
if (line.startsWith("$GPGGA")) {
String parts[15];
int partIndex = 0;
int lastIndex = 0;
for (int i = 0; i < line.length(); i++) {
if (line.charAt(i) == ',') {
parts[partIndex++] = line.substring(lastIndex, i);
lastIndex = i + 1;
}
}
String rawLat = parts[2];
String latDir = parts[3];
String rawLon = parts[4];
String lonDir = parts[5];
if (rawLat.length() > 0 && rawLon.length() > 0) {
float tempLat = convertToDecimal(rawLat, true);
if (latDir == "S") tempLat = -tempLat;
float tempLon = convertToDecimal(rawLon, false);
if (lonDir == "W") tempLon = -tempLon;
if (tempLat != 0.0 && tempLon != 0.0) {
lastLat = tempLat;
lastLon = tempLon;
}
}
}
}
float distance = measureDistance();
Serial.print("Mesafe: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 30.0) {
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
if (lastLat != 0.0 && lastLon != 0.0) {
Serial.print("Latitude: ");
Serial.println(lastLat, 6);
Serial.print("Longitude: ");
Serial.println(lastLon, 6);
} else {
Serial.println(">>> GPS verisi henuz mevcut degil.");
}
} else {
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}
delay(1000);
}
float measureDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000);
return duration * 0.034 / 2.0;
}
float convertToDecimal(String nmeaCoord, bool isLatitude) {
if (nmeaCoord.length() < 6) return 0.0;
int degLen = isLatitude ? 2 : 3;
float deg = nmeaCoord.substring(0, degLen).toFloat();
float min = nmeaCoord.substring(degLen).toFloat();
return deg + (min / 60.0);
}
Loading
esp32-devkit-v1
esp32-devkit-v1