Bu yazıda, PyQt5 ve seri iletişim kullanarak geliştirdiğim masaüstü uygulamayı tanıtacağım. Bu uygulama, seri port üzerinden veri alıp gönderebilen bir arayüz sunuyor ve cihazlarla anlık olarak iletişim kurmayı sağlıyor. Aynı zamanda verileri kaydederek daha sonra analiz edilmesine olanak tanıyor. Kullanıcı dostu bir grafik arayüze sahip olan bu uygulama, çeşitli alanlarda veri alışverişi yapmayı kolaylaştırıyor. Ayrıca, uygulamada aldığınız verilerle gerçek zamanlı analiz yapma olanağı bulunuyor.
Uygulamanın Amacı
Uygulamanın temel amacı, bir aracın hız, batarya sıcaklığı, gerilim ve kalan enerji gibi değerlerini anlık olarak izlemek ve bu verilere dayanarak kullanıcıya geri bildirim sunmaktır. Ayrıca, seri port üzerinden cihaza mesaj gönderebilme yeteneği ile, uzaktan komutlar göndermek mümkün oluyor.
Kütüphaneler ve Bağlantılar
Kodun başında bazı önemli kütüphaneler yükleniyor:
- pyserial: Bilgisayarın seri portları ile iletişim kurmak için kullanılıyor.
- PyQt5: Grafik arayüzün oluşturulmasında kullanılıyor.
- Quamash: PyQt5 ile asyncio döngüsünü birleştirerek asenkron işlemler yapılmasına olanak tanıyor.
Ayrıca, araçtan gelen verileri kaydetmek için "kayit.txt"
adlı bir dosya açılıyor.
kayit = open("kayit.txt", "a")
Uygulamanın Arayüzü
Uygulamanın ana bileşenleri:
- COM Portu Seçimi: Kullanıcı, araç ile iletişime geçmek için doğru COM portunu seçiyor.
- Bağlan ve Bağlantı Kapat butonları: Bu butonlar, seçilen port üzerinden iletişimi başlatmak ve sonlandırmak için kullanılıyor.
- Gönder butonu ve Mesaj Alanı: Araca mesaj göndermek için bu alanlar kullanılıyor.
- Alınan Veri Alanı: Araçtan gelen veriler burada gerçek zamanlı olarak görüntüleniyor.
Arayüzün düzeni ise QGridLayout kullanılarak oluşturulmuş. Butonlar, etiketler ve veri görüntüleme alanları kullanıcının rahatça etkileşime geçebileceği şekilde düzenlendi.
Seri Port ile İletişim
gen_serial_ports() fonksiyonu, sistemde mevcut olan tüm seri portları listeler ve kullanıcıya bu portlardan birini seçme imkanı sunar. Kullanıcı bir port seçtiğinde, uygulama bu port üzerinden bağlantı kurmaya çalışır.
def gen_serial_ports() -> Iterator[Tuple[str, str]]:
"""Mevcut tüm seri bağlantı noktalarını çalıştır."""
ports = comports()
return ((p.description, p.device) for p in ports)
on_connect_btn_pressed() fonksiyonu, kullanıcı “Bağlan” butonuna bastığında devreye girer ve seçilen COM portu üzerinden bağlantı kurar. Bağlantı başarılı olduğunda, mesaj gönderme alanı ve butonu aktif hale gelir.
Gelen Verilerin Gösterimi
Uygulama asenkron olarak seri port üzerinden veri alır. receive_serial_async() fonksiyonu, sürekli olarak seri porttan gelen verileri okur ve ekrana yansıtır. Bu işlem 27 milisaniyelik aralıklarla tekrarlanarak verilerin akıcı bir şekilde kullanıcıya sunulması sağlanır.
async def receive_serial_async(self) -> None:
a = 0
while True:
time.sleep(27/1000)
a = a + 27
msg = ser.readline()
if msg != b'':
text = msg.decode().strip()
saat = datetime.now().strftime('%H:%M:%S.%f')[:-4]
self.received_textedit.appendPlainText(saat + ",\t" + str(a) + ",\t" + text)
kayit.write(str(a) + ",\t" + text + "\n")
await asyncio.sleep(0)
Bu fonksiyon, her veri geldiğinde mevcut saati ve geçen süreyi ekleyerek veriyi bir dosyaya kaydeder. Aynı zamanda ekranda da güncellenen verileri anlık olarak görebilirsiniz.
Sonuç
Bu uygulama, PyQt5 ve seri iletişim ile geliştirilen etkili bir araç kontrol arayüzüdür. Kullanıcıya, araca uzaktan bağlanıp verileri izleme ve kontrol etme imkanı sunar. Bu projeyi geliştirmeye devam ederken, daha fazla özellik eklemeyi ve kullanıcı deneyimini daha da iyileştirmeyi hedefliyorum.
Keyifli kodlamalar