Python 3.x Serial Port Bağlantısı

Derslerime yoğunlaştığım uzun bir sürenin ardından ilk yazım ile devam ediyorum. Bu yazımda Python ile Serial Port Bağlantısı yapımını anlatacağım. Ubuntu kullansam da bu yazım bütün işletim sistemlerinde çalışacaktır, tek farklılık seri bağlantı adresi olacaktır.

Seri port listeleme kodunu stackoverflow‘dan, seri bağlantı konusunda ise technobayt’tan Emirhan Yakar’ın yazısından aldım ve biraz editledim. Bu haliyle biraz anlamsız gelebilir ama kodu biraz modifiye ederseniz iyi bir otomasyon sağlayacağınıza eminim. “\t” bir tab boşluğa, bir tab boşluk ise 4 adet boşluğa eşittir.

Burada Arduino’dan yolladığım mesajı biçip ekrana yazdırdım. Siz de çok farklı şeyler için kodu editleyebilirsiniz.

Öncelikle serial kütüphanemizi indirelim.

pip3 install serial

Ardından vereceğim kodu yazalım.


import sys
import glob
import serial

hizlar = [4800,9600,115200]

def serial_ports():
\t#Serial bağlantı noktalarını listeleyen kodlar
\tif sys.platform.startswith(‘win’):
\t\tports = [‘COM%s’ % (i + 1) for i in range(256)]
\telif sys.platform.startswith(‘linux’) or sys.platform.startswith(‘cygwin’):
\t\tports = glob.glob(‘/dev/tty[A-Za-z]*’)
\telif sys.platform.startswith(‘darwin’):
\t\tports = glob.glob(‘/dev/tty.*’)
\telse:
\t\traise EnvironmentError(‘Unsupported platform’)

\tresult = []
\tfor port in ports:
\t\ttry:
\t\t\ts = serial.Serial(port)
\t\t\ts.close()
\t\t\tresult.append(port)
\t\texcept (OSError, serial.SerialException):
\t\t\tpass
\treturn result
#Serial bağlantıyı sağlayıp, mesajı yazdıran kodlar
def connect_serial(addres,br):
\tser = serial.Serial(addres,br)
\ts = ser.readline()
\tmesaj = str(s) #Burada mesajı trimleyip, anlamlı kısmı almak için gelen veriyi string \tyaptım
\tprint(mesaj[2:14])

#Ana döngümüz
if __name__ == ‘__main__’:
\tprint(serial_ports())

\tadres = input(“Adresi giriniz: “)
\tprint(hizlar)
\tbaud = input(“Baud Rate hızını giriniz: “)
\twhile True:
\tconnect_serial(adres,baud)

Arduino tarafında ise şu kodları çalıştırdım;

void setup() {
\tSerial.begin(9600);}

void loop() {
\tSerial.println(“Hello World!”);
\tdelay(500);
}

Proje’nin tamamı için; http://link.tl/2j6Cr

Yorum bırakın