Omega2+ ile Python + Gsm + GPS Uygulaması

Omega2+ modül üzerinde python programlama dili ile konum kayıt uygulaması geliştirmeye çalışıyorum. GPRS kısmı henüz aktif değil ama gsm modül ile iletişim, veri alıp gönderme, sms ile işlem yapma, sms cevaplama, GPS konum alma işleme, konum kaydı ve sorgulama şeklinde hazırladım. GSM Modül Quectel MC60 GSM / GPS / GNSS kombo modül.
Projeyi opensource olarak buradan paylaşmak niyetindeyim.

Projede kullanılan donanıma blog sayfamdan ulaşabilirsiniz.
http://fidenetgaraj.blogspot.com/2018/05/omega2-gelistirme-bordu-yapalm.html

Önce Port tanımlamaları:

GPIO için periphery kütüphanesini kullandım. pyoniongpio isimli bir kütüphane var ama stabil değil.
Raspberry pi için deneyecekler BCM library ile değiştirebilirler.

 

Ve fonksiyonlar:

Veritabanı Kontrol ediliyor var ise bildirim yapılıyor, yok ise yeniden oluşturuluyor.

Veritabanında iki ayrı tablo var. Biri gelen smsleri loglanması için. Gelen smsleri veritabanına kaydedip sim karttan siliyor. Diğeri konum bilgilerini kayıt ediyor.

Gsm modüllerle uğraşmanın en büyük sıkıntısı sabit bir komut ve dönüt yapısının olmaması ve arama, internet erişimi gibi bazı komutların cevap süresinin 300 saniyedyi bulabilmesi.
Bazı komut örnekleri:

komut: AT\r\n
olası cevaplar: OK\r\n

komut: ATDxxxxxxxx\r\n
olası cevaplar: CONNECT\r\n, NO CARRIER\r\n vb

Bunun için standart bir kütüphane yapmak ciddi şekilde uğraştırdı beni.

Komut Kütüphanesi:

GSM modül uyandırma rutini:
Quectel modül açılış esnasında 3 adet ready mesajı gönderiyor. RDY modülün hazır olduğu, SMS READY sms almak için hazır olunduğu, CALL READY de arama için hazır olduğunu bildiriyor. GSM modül bu üç uyarıyı verene kadar döngü içinde bekliyor.

Komut gönderme yapısı kontrolleri de içerdiği için en uzun fonksiyon oldu. Yapı aslında çok basit. Bir komutu göndermek için komutu ekliyorum. atGonder(ate0) gibi. Bu komutun text kısmını yukardakı listeden bulup seri porta gönderiyor. Sonra maksimum timeout kadar bekleyip cevap var mı kontrol ediyor. Gelen cevabın başlangıç textine göre de işlem yapıyor. Sms işleme, gps koordinatlarını raw data içinden parse etme işlemleri de burada yapılıyor.

 

SMS Gönderme Rutini atGonder library kullanarak sms gönderme işlemini yapıyor.
Gsm modül aldığı smsi CMTI texti ile bildiriyor. Bu kısımda atGonder içinde algılanıp text işleniyor, sms içeriği, gönderen numara alınıyor. Sms text içinde geçerli On, Off, Blink, Loc? gibi geçerli text varsa ona göre işlem yapılıyor.

Led Bildirimleri için GPIO library:

 

Eğer cihazınızın birden fazlası aynı veritabanı ile çalışacaksa cihazlarınıza id vermeniz gerekir bunun için de MAC adresini kullanabilirsiniz.

 

 

GSM modülün açılıştan sonraki genel ayarları:

GPS koordinatları hesabında bir derece 60 dakikaya eşit, Google konum hesabında ise bir derece 100 dakikaya eşit. Bu yüzden verilen Gps datadan alınan değer Google Maps üzerinde görüntülenmek istenirse verilen koordinatların derece kısmı aynı kalıp dakika ve saniye kısmı 60’a bölünerek yeniden derece kısmı ile toplanması sonucu Google formatına dönüştürülmüş oluyor.

Örnek:
GPS Şu koorinatı verdi:

4121.0000E ile işaretli boylamı hesaplayalım. GPS bize bu boylamın 41 derece 21 dakikada bulunduğunu belirtiyor.
Bu koordinatı Google Maps üzerinde işleyeceğimiz zaman 41 derece kısmı sabit kalacak 21 dakika kısmını (gerçek koordinatlardaki saniye ve salise kısmını da) 60’a bölerek 35 ile topluyoruz.
21.0000 / 60 = 0.35
41+0.35 = 41.35
sonra bunu google maps linkine ekliyoruz.
“https://www.google.com.tr/maps/place/{}.{}{}+{}.{}{} “.format(en_der,en_str,en_pol,boy_der,boy_str,boy_pol)
[url=”https://www.google.com.tr/maps/place/41.35E+41.35N”]https://www.google.com.tr/maps/place/41.35E+41.35N[/url]

While bloğu:

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir