ESP32 GPS İzleyici (IoT tabanlı Araç Takip Sistemi)

    Aracınızı park ettikten sonra bulmakta sorun mu yaşıyorsunuz? Bu proje ile artık bunun için endişelenmenize gerek kalmayacak! GPS Araç Takip Sisteminizi kurarak aracınızı bulabilecek ve nerede olursanız olun takip edebileceksiniz !

GPS, dünya çapında bir radyo navigasyon sistemi olan Küresel Konumlandırma Sisteminin kısaltmasıdır. GPS takip sistemi, cihazın konumunu takip etmek için Küresel Navigasyon Uydu Sistemi (GNSS) Ağı’nı kullanır. Bu ağ, GPS alıcı modülü tarafından alınacak verileri iletmek için mikrodalga sinyallerini kullanan bir dizi uydudan oluşur.

Bu projede, dünyanın her yerinden izlenebilmesi için Blynk App’in yanı sıra OLED Ekran üzerinde enlem ve boylam değerlerini göstereceğimiz ESP32 kullanarak IoT tabanlı bir GPS Araç Takip Sistemi kuracağız. Ayrıca sitemizde bulunan Loron ve Cellron kartları ile de aynı uygulamayı yapabilirsiniz.

Gerekli Bileşenler

  • ESP32
  • GPS Modülü
  • OLED Ekran Modülü
  • Jumper Telleri
  • Breadboard

OLED Ekran

OLED ekranlar, bir mikrodenetleyici için en yaygın ve kolayca bulunabilen ekranlardan biridir. Bu ekran, IIC veya SPI iletişimi kullanılarak mikrodenetleyici ile kolayca arayüzlenebilir ve iyi bir görüş açısına ve piksel yoğunluğuna sahiptir, bu da onu küçük seviyeli grafiklerin görüntülenmesi için güvenilir kılar. Arduino gibi herhangi bir 3.3V-5V mikrodenetleyici ile uyumludur. OLED ekran, tüm RAM arabelleğe almayı yöneten güçlü bir tek çipli CMOS OLED sürücü denetleyicisi – SSD1306 ile birlikte gelir. SSD1306 sürücüsünde yerleşik 1KB Grafik Ekran Veri RAM’i (GDDRAM) bulunur.

Özellikler

OLED Sürücü IC

SSD1306

Çözünürlük

128 x 64

Görüş Açısı

>160 °

Giriş Voltajı

3.3V ~ 6V

Piksel Rengi

Mavi

Çalışma sıcaklığı

-30°C ~ 70°C

Neo 6M GPS Modülü

NEO-6M modülü, 16 x 12,2 x 2,4 mm paket boyutunda gelir. Eşsiz performans sunan 6 Ublox konumlandırma motoruna sahiptir. Kompakt mimarisi, düşük güç tüketimi ve güvenilir hafıza seçenekleri ile iyi performanslı bir GPS alıcısıdır. Mimarisi ve güç talepleri göz önüne alındığında pille çalışan mobil cihazlar için idealdir. İlk Düzeltme Süresi 1 saniyeden kısadır ve uyduları neredeyse anında bulmasını sağlar. Çıktı, konumun koordinatlarını ve zamanını bulmak için kodu çözülebilen NMEA standartları biçimindedir.

Güç kaynağı

2.8V – 5V

Arayüz

RS232 TTL

 

Dahili EEPROM ve harici anten

Varsayılan baud hızı

9600 bps

Devre Şeması

ESP32 GPS NEO 6M için Devre Şeması aşağıda verilmiştir.

Burada ESP32’yi GPS Modülü ve OLED Ekran ile arayüzliyoruz (interfacing). GPS Modülünün Vcc ve GND pinleri ESP32’nin 3.3V ve GND pinlerine, RX ve TX pinleri ise ESP32’nin TX2 ve RX2 pinlerine bağlanır. I2C modu, OLED ekran Modülünü (SSD1306) ESP32 ile bağlamak için kullanılır ESP32 ve OLED Ekran arasındaki bağlantılar şu şekilde verilmiştir:

OLED Pin

ESP32 Pin

Vcc

3.3v

GND

GND

SCL

D22

SDA

D21

ESP32 GPS Tracker için Blynk Uygulamasını Yapılandırma

Google Play Store’dan Blynk uygulamasını indirin ve yeni bir hesap oluşturun veya mevcut hesabınıza giriş yapın.

Şimdi yeni bir projeye başlamak için ‘Yeni Proje’ye tıklayın.

Şimdi projeniz için bir isim verin. CİHAZ SEÇ (CHOOSE DEVICE ) seçeneğinde ‘ESP32 Dev Board’u ve BAĞLANTI TİPİ(CONNECTION TYPE)’nde ‘Wi-Fi’yi seçin. Ardından “Oluştur (Create)”u tıklayın.

Bundan sonra Blynk, kayıtlı E-posta kimliğine bir Yetkilendirme gönderir. Yetkilendirme Simgesi Kodunu not edin. Programda kullanılacaktır.

Şimdi bir sonraki pencerede, bir widget eklemek için “+” işaretine tıklayın. Widget kutusunun içinde ‘Harita’ widget’ını seçin.

Bundan sonra, MAP widget’ına tıklayın ve GİRİŞ olarak sanal pin(virtual pin) ‘V0’ı seçin.

Bu son adımla, uygulamanızı kullanmaya hazırsınız. ‘Oynat(Play)’ düğmesine basarak, uygulamanızı DÜZENLEME (EDIT) modundan donanımla etkileşim kurabileceğiniz OYNAT(PLAY) moduna geçirebilirsiniz.

Kod Açıklama

ESP32 GPS Takip Sisteminin tam kodu sayfanın sonunda verilmiştir. Burada kodun bazı önemli kısımlarını açıklıyoruz. Bu programda Wire.h, TinyGPS++.h, SH1106.h ve BlynkSimpleEsp32.h kütüphanelerini kullanacağız. Bu kütüphaneler aşağıdaki bağlantılardan indirilebilir:

Her zamanki gibi, gerekli tüm kitaplıkları dahil ederek kodu başlatın. SH1106.h, özellikle ESP modülleri için oluşturulmuştur.

#include 
#include 
#include 
#include 
#include 
#include 

Bundan sonra Enlem ve Boylam değerlerini saklamak için değişkenleri tanımlayın.

float latitude, longitude;
String lat_str, lng_str;

Sonraki satırlarda Wi-Fi adınızı ve şifrenizi girin ve ayrıca Blynk Yetkilendirme anahtarını girin.

const char *ssid = "Wi-Fi Name";
// Enter your Wi-Fi Nameconst char *pass = "Wi-Fi Password";
// Enter your Wi-Fi Passwordchar auth[] = "Blynk Key";

Bundan sonra, ekranın bağlı olduğu Adres ve pinleri içeren OLED ekran için bir örnek oluşturun.

SH1106 display(0x3c, 21, 22);

setup() işlevinin içinde, hata ayıklama amacıyla Seri Monitörü 115200 baud hızında başlatın ve ayrıca OLED ekranını, GPS modülünü ve Blynk’i startup() yöntemiyle başlatın.

void setup()
{
Serial.begin(115200);
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
}
Serial.println("WiFi connected");
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
SerialGPS.begin(9600, SERIAL_8N1, 16, 17);
Blynk.begin(auth, ssid, pass);
Blynk.virtualWrite(V0, "clr"); 
}

loop() fonksiyonunun içinde, GPS modülünden gelen veri olup olmadığını kontrol edin. Veri mevcutsa, kod verileri kodlar ve kodlanan verilerin geçerli olup olmadığını kontrol eder, veriler geçerliyse, NMEA verilerini anlaşılır verilere dönüştürmek için daha fazla hesaplama yapılır.

while (SerialGPS.available() > 0){
if (gps.encode(SerialGPS.read()))
{
   if (gps.location.isValid())
   {
     latitude = gps.location.lat();
     lat_str = String(latitude , 6);
     longitude = gps.location.lng();
     lng_str = String(longitude , 6);
    }
}
}

Bundan sonra GPS verileri Blynk uygulamasına ve OLED ekrana gönderilir. Blynk uygulaması, enlem ve boylam verilerini kullanarak kullanıcının konumunu tam olarak belirlemek için Harita widget’ını kullanır.

display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
display.drawString(0, 23, "Lat:");
display.drawString(45, 23, lat_str);
display.drawString(0, 38, "Lng:");
display.drawString(45, 38, lng_str);
Blynk.virtualWrite(V0, 1, latitude, longitude, "Location");

ESP32 GPS Takip Sisteminin Çalışması

Donanım ve program hazır olduğunda, GPS izleme programını ESP32 Kartınıza yükleyin. Burada Arduino IDE, ESP32 GPS NEO 6M kodunu ESP32 kartına yüklemek için kullanılır, bu nedenle ESP32’yi bir Mikro USB Kablosu ile dizüstü bilgisayarınıza bağlayın ve yükle düğmesine basın.Kod yüklendikten sonra OLED, Enlem ve Boylam değerlerini görüntüler. Ayrıca, Blynk uygulamasındaki konumu Harita üzerinde şu şekilde gösterecektir:

Detaylı kod aşağıda verilmiştir.

Kod

#include <TinyGPS++.h>
#include 
#include 
#include  // Only needed for Arduino 1.6.5 and earlier
#include 
#include 
float latitude , longitude;
String lat_str , lng_str;
const char *ssid = "Galaxy-M20"; // Enter your WiFi Name
const char *pass = "ac312129"; // Enter your WiFi Password
char auth[] = "loPrSaL0eQFY9clcQ518R1SmYsRVC0eV"; 
WidgetMap myMap(V0); 
SH1106 display(0x3c, 21, 22);
WiFiClient client;
TinyGPSPlus gps;
HardwareSerial SerialGPS(1);
void setup()
{
Serial.begin(115200);
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print("."); // print ... till not connected
}
Serial.println("");
Serial.println("WiFi connected");
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
SerialGPS.begin(9600, SERIAL_8N1, 16, 17);
Blynk.begin(auth, ssid, pass);
Blynk.virtualWrite(V0, "clr"); 
}
void loop()
{
while (SerialGPS.available() > 0) {
if (gps.encode(SerialGPS.read()))
{
if (gps.location.isValid())
{
latitude = gps.location.lat();
lat_str = String(latitude , 6);
longitude = gps.location.lng();
lng_str = String(longitude , 6);
Serial.print("Latitude = ");
Serial.println(lat_str);
Serial.print("Longitude = ");
Serial.println(lng_str);
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
display.drawString(0, 23, "Lat:");
display.drawString(45, 23, lat_str);
display.drawString(0, 38, "Lng:");
display.drawString(45, 38, lng_str);
Blynk.virtualWrite(V0, 1, latitude, longitude, "Location");
display.display();
}
delay(1000);
Serial.println(); 
}
} 
Blynk.run();
}

Teşekkür Ederiz.

BİZİ TAKİP EDİN

Güncel haberlerimiz için sosyal medya hesaplarımızdan bizi takip edin.