- Gerekli Bileşenler:
- GPS Modülü:
- GPS'den Konum Verilerini Alma:
- GPS ile ESP12E NodeMCU arasında arayüz oluşturma:
- Kod açıklaması:
- Web sayfası için HTML kodu:
GPS, Küresel Konumlandırma Sistemi anlamına gelir ve konumu, yüksekliği, hızı, tarihi ve saati UTC'de bulmak için kullanılır. Bu projede bir GPS modülünü NodeMCU ile arayüzleyeceğiz. NodeMCU kullanılarak basit bir yerel web sunucusu oluşturulur ve konum ayrıntıları bu sunucu web sayfasında güncellenir. Bu IoT tabanlı projenin özelliği, web sayfasında sağlanan bağlantıya tıklayarak Google Haritalar'daki konumu kontrol edebilmemizdir. Ayrıca bu web sayfasını açabilir ve modeminizdeki / yönlendiricinizdeki bağlantı noktası yönlendirmeyi etkinleştirerek herhangi bir yerden konumu kontrol edebilirsiniz.
Gerekli Bileşenler:
- NodeMCU ESP12
- GPS modülü (uBlox Neo 6M GPS)
GPS Modülü:
Ublox Neo 6M, seri iletişim yoluyla konum detaylarını sağlayan bir seri GPS modülüdür. Dört pimi vardır.
toplu iğne |
Açıklama |
Vcc |
2.7 - 5V güç kaynağı |
Gnd |
Zemin |
TXD |
Veri ilet |
RXD |
Veri almak |
Ublox neo 6M GPS modülü TTL uyumludur ve özellikleri aşağıda verilmiştir.
Yakalama zamanı | Soğuk başlangıç: 27sn, Sıcak başlangıç: 1sn |
İletişim protokolü | NMEA |
Seri iletişim | 9600bps, 8 veri biti, 1 durdurma biti, eşlik yok ve akış kontrolü yok |
İşletim akımı | 45mA |
GPS'den Konum Verilerini Alma:
Modül, verileri 9600 Baud Hızında birden çok dizide iletecektir. 9600 Baud hızına sahip bir UART terminali kullanırsak, GPS tarafından alınan verileri göreceğiz.
GPS modülü Gerçek zamanlı izleme konumu verilerini NMEA formatında gönderir (yukarıdaki ekran görüntüsüne bakın). NMEA formatı, aşağıda dört önemli cümlenin verildiği birkaç cümleden oluşur. NMEA cümlesi ve veri formatı hakkında daha fazla ayrıntı burada bulunabilir.
- $ GPGGA: Küresel Konumlandırma Sistemi Verileri Düzeltme
- $ GPGSV: Görünümdeki GPS uyduları
- $ GPGSA: GPS DOP ve aktif uydular
- $ GPRMC: Önerilen minimum belirli GPS / Transit verileri
GPS verileri ve NMEA dizeleri hakkında buradan daha fazla bilgi edinin.
Bu, 9600 baud hızında bağlandığında GPS tarafından alınan verilerdir.
$ GPRMC, 141848.00, A, 2237.63306, N, 08820.86316, E, 0.553,, 100418,,, A * 73 $ GPVTG,, T,, M, 0.553, N, 1.024, K, A * 27 $ GPGGA, 141848.00, 2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2.56,1.00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237.63306, N, 08820.86316, E, 141848.00, A, A * 65
Herhangi bir konumu izlemek için GPS modülünü kullandığımızda , yalnızca koordinatlara ihtiyacımız var ve bunu $ GPGGA dizesinde bulabiliriz. Yalnızca $ GPGGA (Global Positioning System Fix Data) String çoğunlukla programlarda kullanılır ve diğer dizeler göz ardı edilir.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74
Bu satırın anlamı nedir?
Bu satırın anlamı: -
1. Dize her zaman "$" işaretiyle başlar
2. GPGGA, Global Positioning System Fix Data anlamına gelir
3. "," Virgül, iki değer arasındaki ayrımı gösterir
4. 141848.00: GMT saati olarak 14 (saat): 18 (dakika): 48 (sn): 00 (ms)
5. 2237.63306, N: Enlem 22 (derece) 37 (dakika) 63306 (sn) Kuzey
6. 08820.86316, E: Boylam 088 (derece) 20 (dakika) 86316 (sn) Doğu
7. 1: Miktarı Düzelt 0 = geçersiz veri, 1 = geçerli veri, 2 = DGPS düzeltmesi
8. 03: Halihazırda görüntülenen uyduların sayısı.
9. 1.0: HDOP
10. 2.56, M: Rakım (Metre cinsinden deniz seviyesinden yükseklik)
11. 1.9, M: Geoids yüksekliği
12. * 74: sağlama toplamı
Bu nedenle, modül konumu veya bulunduğu yer hakkında bilgi toplamak için No. 5 ve No. 6'ya ihtiyacımız var. Bu projede, enlem ve boylamı çıkarmak için bazı işlevler sağlayan bir GPS Kitaplığı kullandık, bu yüzden endişelenmemize gerek yok.
Daha önce GPS ile diğer mikro denetleyiciler arasında arayüz oluşturduk:
GPS Arduino ile Nasıl Kullanılır
Raspberry Pi GPS Modülü Arayüz Eğitimi
GPS Modülünü PIC Mikrodenetleyiciyle Arayüz
· Arduino, ESP8266 ve GPS kullanarak Google Haritalar'da Bir Aracı Takip Edin
GPS ile ESP12E NodeMCU arasında arayüz oluşturma:
NodeMCU, ESP8266 tabanlı geliştirme kartıdır. İşlem çekirdeği olarak ESP-12E'ye sahiptir. 32 bitlik bir MCU'dur. 14 GPIO pini, tek kanallı 10 bit entegre ADC'ye sahiptir. UART, I2C, SPI iletişimini destekler. 3.3V uyumludur, 5V ile çalışamaz. NodeMCU'da yeniyseniz, NodeMCU ESP-12 ile Başlarken belgemizi okuyun.
NodeMCU ve GPS modülü arasındaki bağlantıları aşağıda gösterildiği gibi.
NodeMCU |
GPS modülü |
3V3 |
Vcc |
GND |
GND |
D1 (GPIO5) |
RX |
D2 (GPIO4) |
TX |
Aşağıda ise NodeMCU ile GPS bağlantı devre şeması:
GPS modülü açıldıktan sonra konum ayrıntılarını yakalamak için biraz zaman alır. NodeMCU web sunucusunu başlatır ve bir istemcinin web sunucusuna bağlanmasını bekler. İstemci web sunucusuna bağlandığında, NodeMCU konum ayrıntılarını bağlı istemciye gönderir. Konum ayrıntıları, HTML kullanılarak tasarlanmış basit bir web sayfasında görüntülenir.
Adımlar:
- Devreyi şemada gösterildiği gibi bağlayın.
- Wi-Fi kimlik bilgilerini değiştirdikten sonra kodu yükleyin.
- Arduino IDE'de seri monitörü açın ve web sunucusunun IP adresini not edin.
- Herhangi bir Tarayıcıyı açın ve web sunucusunun IP adresini girin.
- Konum ayrıntılarını, tarihi, saati ve Google haritaları bağlantısını gösterecektir.
Kod açıklaması:
Tam kaynak kodu bu proje için bu makalenin sonunda verilmiştir. Kod küçük anlamlı parçalara bölünmüş ve aşağıda açıklanmıştır.
GPS modülünü NodeMCU ile arayüzlemek için uygun başlık dosyalarını eklememiz gerekir. Başlık dosyaları aşağıda verilen bağlantılardan indirilebilir.
Küçük GPS ++ kitaplığı:
#Dahil etmek
NodeMCU kullanarak bir web sunucusu oluşturmak için, Wi-Fi Ağına bağlanması gerekir. Kodun bu bölümünde, NodeMCU'nun bağlandığı kablosuz ağın Wi-Fi kimlik bilgilerini sağlıyoruz. Bunu Wi-Fi kimlik bilgilerinizle değiştirin.
const char * ssid = " shashi "; const char * password = "12345678";
Kodun bu bölümünde TinyGPSPlus sınıfından bir nesne oluşturuyor ve GPS modülünün bağlı olduğu pinleri tanımlıyoruz. GPS modülü, NodeMCU'nun 4 ve 5 (GPIO4 ve GPIO5) pinlerine bağlanır. Pin 4 ve 5 üzerindeki Seri iletişimi desteklemek için, sanal Seri port oluşturmak için "SoftwareSerial" kitaplığını kullanıyoruz.
TinyGPSPlus gps; // TinyGPS ++ nesnesi SoftwareSerial ss (4, 5); // GPS cihazına seri bağlantı.
Kodun bu satırı, oluşturulmakta olan web sunucusunun bağlantı noktası numarasını gösterir. İçin HTTP bağlantısı, varsayılan port numarası 80'dir.
WiFiServer sunucusu (80);
NodeMCU kullanarak web sunucusu oluşturmak için aşağıda belirtilen kod parçası kullanılır. Web sunucusunu oluşturduktan sonra, Web sunucusunun IP adresini Seri Monitöre yazdırır. Daha sonra bu IP adresi, yerel ağ içindeki web sunucusuna erişmek için kullanılır.
server.begin (); Serial.println ("Sunucu başladı"); Serial.println (WiFi.localIP ()); // IP adresini yazdırın
Daha sonra GPS modülünden gönderilen Seri veriyi okumaya başlamalıyız ve eğer hatasızsa, ondan konum detaylarını çıkarmalıyız. To özü lokasyon bilgileri kullandığımız TinyGPSPlus kütüphanesi. Kodun bu kısmı yukarıdaki işi yapar.
while (ss.available ()> 0) if (gps.encode (ss.read ()))
Alınan dizge hatasız ise, önce konumun geçerli olup olmadığını kontrol etmeliyiz. Konum geçerliyse , ondan enlem ve boylamı çıkarmamız gerekir. Daha sonra Web sayfasında görüntülemek için dize formatına dönüştürülür. Bu görevi gerçekleştirmek için bu kod parçasını kullanıyoruz.
eğer (gps .location.isValid ()) { lattitude = gps.location.lat (); lat_str = Dize (enlem, 6); boylam = gps.location.lng (); lng_str = Dize (boylam, 6); }
Tarih ve saati çıkarmak için aynı adımları izlememiz gerekiyor.
eğer (gps.date.isValid ()) { tarih = gps.date.day (); ay = gps.date.month (); yıl = gps.date.year (); }
Zamanı çıkarmak için, aynı prosedürü izlememiz gerekir, ancak GPS, saatin UTC biçiminde olmasını sağlar. To IST UTC dönüştürmek biz ofset eklemeniz gerekir + 5 saat ve 30 dakika UTC için. Kodun bu bölümü UTC'den IST'ye dönüştürme yapar.
dakika = (dakika + 30); eğer (dakika> 59) { dakika = dakika - 60; saat = saat + 1; } saat = (saat + 5); eğer (saat> 23) saat = saat - 24;
Bu saat 24 saat formatındadır. İçin 12 saatlik formata 24 saat dönüştürmek, aşağıda belirtilen kod kullanılır.
eğer (saat> = 12) pm = 1; başka pm = 0; saat = saat% 12;
Kodun bu bölümünde bir istemcinin web sunucusuna bağlı olup olmadığını kontrol ediyoruz. müşteri bağlanana kadar bekler.
WiFiClient istemci = server.available (); eğer (! müşteri) { dönüş; }
Bir istemci bağlandığında, web sunucusunun istemciye yanıt göndermesi gerekir. Web sayfası HTML kullanılarak tasarlanmıştır. Web sayfasının HTML kodu bu makalenin sonunda verilmiştir. GPS modülünden veri alındığında enlem, boylam, tarih ve saat değerleri güncellenir. Kodun bu bölümünde müşteriye yanıt gönderiyoruz. Burada 's', web sayfası ve konum ayrıntıları için HTML kodu içeren bir dizedir.
client.print (ler);
Web sayfası için HTML kodu:
NodeMCU ile GPS Arayüzü
Konum Ayrıntıları
Enlem | 12.9000 |
---|---|
Boylam | 77.5900 |
Tarih | 22/06/18 |
Zaman | 07:12:12 |
Buraya Tıkla! Google haritalarında konumu kontrol etmek için.
Web tarayıcısında yerel web sunucusunun IP adresini açtıktan sonra web sayfası böyle görünür.
" Buraya tıklayın " bağlantısını tıkladığınızda, konum Google Haritalar'da aşağıdaki gibi açılacaktır: