8.3 KiB
GPS Verilerini Okuma - Raspberry Pi
Bu dersin bu bölümünde, Raspberry Pi'ye bir GPS sensörü ekleyecek ve ondan veri okuyacaksınız.
Donanım
Raspberry Pi'nin bir GPS sensörüne ihtiyacı var.
Kullanacağınız sensör, Grove GPS Air530 sensörü. Bu sensör, hızlı ve doğru bir konum belirlemek için birden fazla GPS sistemine bağlanabilir. Sensör iki parçadan oluşur - sensörün temel elektronik bileşenleri ve uydulardan gelen radyo dalgalarını almak için ince bir kabloyla bağlanan harici bir anten.
Bu bir UART sensörüdür, bu nedenle GPS verilerini UART üzerinden gönderir.
GPS Sensörünü Bağlama
Grove GPS sensörü Raspberry Pi'ye bağlanabilir.
Görev - GPS sensörünü bağlayın
GPS sensörünü bağlayın.
-
Grove kablosunun bir ucunu GPS sensöründeki sokete takın. Kablo yalnızca tek bir yönde takılabilir.
-
Raspberry Pi kapalıyken, Grove kablosunun diğer ucunu Pi'ye bağlı Grove Base hat üzerindeki UART olarak işaretlenmiş UART soketine bağlayın. Bu soket, SD Kart yuvasına en yakın olan tarafta, orta sıradadır ve USB portları ile ethernet soketinin diğer ucundadır.
-
GPS sensörünü, bağlı antenin gökyüzüne görünürlüğü olacak şekilde konumlandırın - ideal olarak açık bir pencerenin yanında veya dışarıda. Antenin önünde hiçbir şey olmadan daha net bir sinyal almak daha kolaydır.
GPS Sensörünü Programlama
Artık Raspberry Pi, bağlı GPS sensörünü kullanacak şekilde programlanabilir.
Görev - GPS sensörünü programlayın
Cihazı programlayın.
-
Pi'yi açın ve başlatılmasını bekleyin.
-
GPS sensöründe 2 LED bulunur - veri iletildiğinde yanıp sönen mavi bir LED ve uydulardan veri alındığında her saniye yanıp sönen yeşil bir LED. Pi'yi açtığınızda mavi LED'in yanıp söndüğünden emin olun. Birkaç dakika sonra yeşil LED yanıp sönecektir - eğer yanıp sönmezse, anteni yeniden konumlandırmanız gerekebilir.
-
VS Code'u başlatın, ya doğrudan Pi üzerinde ya da Remote SSH uzantısı aracılığıyla bağlanarak.
⚠️ Gerekirse 1. dersteki VS Code'u kurma ve başlatma talimatlarına başvurabilirsiniz.
-
Bluetooth'u destekleyen daha yeni Raspberry Pi sürümlerinde, Bluetooth için kullanılan seri port ile Grove UART portu için kullanılan seri port arasında bir çakışma vardır. Bunu düzeltmek için şu adımları izleyin:
-
VS Code terminalinden,
nanoadlı yerleşik bir terminal metin düzenleyicisini kullanarak/boot/config.txtdosyasını şu komutla düzenleyin:sudo nano /boot/config.txtBu dosya,
sudoyetkileriyle düzenlenmesi gerektiğinden VS Code tarafından düzenlenemez. VS Code bu yetkilerle çalışmaz. -
İmleç tuşlarını kullanarak dosyanın sonuna gidin, ardından aşağıdaki kodu kopyalayıp dosyanın sonuna yapıştırın:
dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1Normal klavye kısayollarını kullanarak yapıştırabilirsiniz (
Windows, Linux veya Raspberry Pi OS'de Ctrl+v, macOS'taCmd+v). -
Bu dosyayı kaydedin ve
Ctrl+xtuşlarına basarak nano'dan çıkın. Değiştirilen tamponu kaydetmek isteyip istemediğiniz sorulduğundaytuşuna basın, ardından/boot/config.txtdosyasını üzerine yazmayı onaylamak içinentertuşuna basın.Bir hata yaparsanız, kaydetmeden çıkabilir ve bu adımları tekrar edebilirsiniz.
-
nanoile/boot/cmdline.txtdosyasını şu komutla düzenleyin:sudo nano /boot/cmdline.txt -
Bu dosyada boşluklarla ayrılmış bir dizi anahtar/değer çifti bulunur.
consoleanahtarı için olan tüm anahtar/değer çiftlerini kaldırın. Bunlar muhtemelen şu şekilde görünecektir:console=serial0,115200 console=tty1İmleç tuşlarını kullanarak bu girişlere gidin, ardından normal
delveyabackspacetuşlarını kullanarak silin.Örneğin, orijinal dosyanız şu şekilde görünüyorsa:
console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwaitYeni sürüm şu şekilde olacaktır:
root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait -
Yukarıdaki adımları izleyerek bu dosyayı kaydedin ve nano'dan çıkın.
-
Pi'yi yeniden başlatın, ardından Pi yeniden başlatıldıktan sonra VS Code'a yeniden bağlanın.
-
-
Terminalden,
pikullanıcısının ana dizinindegps-sensoradlı yeni bir klasör oluşturun. Bu klasördeapp.pyadlı bir dosya oluşturun. -
Bu klasörü VS Code'da açın.
-
GPS modülü, seri port üzerinden UART verileri gönderir. Python kodunuzdan seri portla iletişim kurmak için
pyserialPip paketini yükleyin:pip3 install pyserial -
app.pydosyanıza aşağıdaki kodu ekleyin:import time import serial serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) serial.reset_input_buffer() serial.flush() def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1)Bu kod,
pyserialPip paketindenserialmodülünü içe aktarır. Ardından, Grove Pi Base Hat'in UART portu için kullanılan/dev/ttyAMA0seri portuna bağlanır. Bu seri bağlantıdaki mevcut verileri temizler.Daha sonra, kendisine iletilen satırı konsola yazdıran
print_gps_dataadlı bir fonksiyon tanımlanır.Ardından kod, her döngüde seri porttan mümkün olduğunca çok sayıda metin satırı okuyarak sonsuza kadar döner. Her satır için
print_gps_datafonksiyonunu çağırır.Tüm veriler okunduktan sonra, döngü 1 saniye uyur ve ardından tekrar dener.
-
Bu kodu çalıştırın. GPS sensöründen gelen ham çıktıyı göreceksiniz, örneğin şu şekilde:
$GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $BDGSA,A,1,,,,,,,,,,,,,,,*0F $GPGSV,1,1,00*79 $BDGSV,1,1,00*68Kodunuzu durdurup yeniden başlattığınızda aşağıdaki hatalardan birini alırsanız, while döngünüze bir
try - exceptbloğu ekleyin.UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation bytewhile True: try: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data() line = serial.readline().decode('utf-8') # There's a random chance the first byte being read is part way through a character. # Read another full line and continue. except UnicodeDecodeError: line = serial.readline().decode('utf-8') time.sleep(1)
💁 Bu kodu code-gps/pi klasöründe bulabilirsiniz.
😀 GPS sensörü programınız başarılı oldu!
Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.

