8.6 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,
nano
adlı yerleşik bir terminal metin düzenleyicisini kullanarak/boot/config.txt
dosyasını şu komutla düzenleyin:sudo nano /boot/config.txt
Bu dosya,
sudo
yetkileriyle 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=1
Normal 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+x
tuşlarına basarak nano'dan çıkın. Değiştirilen tamponu kaydetmek isteyip istemediğiniz sorulduğunday
tuşuna basın, ardından/boot/config.txt
dosyasını üzerine yazmayı onaylamak içinenter
tuşuna basın.Bir hata yaparsanız, kaydetmeden çıkabilir ve bu adımları tekrar edebilirsiniz.
-
nano
ile/boot/cmdline.txt
dosyasını şu komutla düzenleyin:sudo nano /boot/cmdline.txt
-
Bu dosyada boşluklarla ayrılmış bir dizi anahtar/değer çifti bulunur.
console
anahtarı 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
del
veyabackspace
tuş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 rootwait
Yeni 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,
pi
kullanıcısının ana dizinindegps-sensor
adlı yeni bir klasör oluşturun. Bu klasördeapp.py
adlı 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
pyserial
Pip paketini yükleyin:pip3 install pyserial
-
app.py
dosyanı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,
pyserial
Pip paketindenserial
modülünü içe aktarır. Ardından, Grove Pi Base Hat'in UART portu için kullanılan/dev/ttyAMA0
seri portuna bağlanır. Bu seri bağlantıdaki mevcut verileri temizler.Daha sonra, kendisine iletilen satırı konsola yazdıran
print_gps_data
adlı 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_data
fonksiyonunu ç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*68
Kodunuzu durdurup yeniden başlattığınızda aşağıdaki hatalardan birini alırsanız, while döngünüze bir
try - except
bloğ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 byte
while 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.