Omega2+ ile seri port veri alma gönderme işlemi yapalım.

Omega2+ üzerinde biri debug portu olmak üzere 2 tane seri port vardır.
Debug portu sistemde ttyS0, diğer seri port ise sistemde ttyS1 olarak tanınır.
Kullanmadım ama eğer ft232rl gibi bir usb seri çeviriciyi Omega2+ bağlarsanız onu da usbtty0 olarak tanıyacaktır.
Sistemdeki portları /dev klasörü altında görebilirsiniz.

Gerekli Malzemeler:
Pyserial paketi
WinSCP
Putty
Notepad++

Python ile seri portu kullanmak için pySerial paketi kurulmalıdır.
Bu paketi

opkg update
opkg install python3 python-pyserial
ile kurabilirsiniz.


Ama versiyon farkından dolayı kurulum için benim izlediğim yol
Birinci adım da https://pypi.org/project/pyserial/ adresinden paketi indirin.


İkinci olarak paketi açın ve içindeki dosyaları /usr/lib/python3.6/site-packages klasörü altına kopyalamaktır.


Sonrasında Seri portu açmak için bir dizi komuta ihtiyacımız var. WinSCP programı burda bizin için hayati rol oynuyor. Putty ve WinSCP ikilisi kod yazıp deneme konusunda oldukça başarılı.

WinSCP üzerinde yeni python dosyası oluşturup, dosyayı Notepad++ ile edit edelim.





import serial

Kütüphaneyi içe aktaralım.



import serial

ser=serial.Serial()
ser.baudrate=115200
ser.port='/dev/ttyS1'
ser.open()

Seri portu açtık. Program bitiminde ser.close() ile kapatmamız gerekir.


ser.write() komutu ile seri porta veri gönderme işlemi yapalım. Dikkat etmemiz gerek nokta veri gönderip alırken encode ve decode işlemleri yapılması gerekliliğidir.

komut="AT\r"
ser.write(komut.encode('utf-8'))

komutu ile veri gönderiyoruz.

Gelen bir veriyi okumanın birkaç tane yöntemi var. Ayrıntılı anlatımı http://pyserial.readthedocs.io/en/latest/shortintro.html#readline adresinde bulabilirsiniz.



Bunlar
ser.readline()
ser.readlines()
ser.read()
ser.in_waiting
ser.readline() enter karakterine kadar okur. Çıktı tipi stringdir.
ser.readlines() enter karakterine kadar satırları okuyup bir listeye ekler. Çıktı tipi listedir.
ser.read(5) istenen sayıda karakteri okur, string değişkene aktarır. Burada 5 byte okur.
ser.in_waiting Seri port bufferda bekleyen veri miktarını verir.


veri=ser.read(ser.in_waiting).decode('utf-8')

programı toplayacak olursak:

import serial

ser=serial.Serial()
ser.baudrate=115200
ser.port='/dev/ttyS1'
ser.open()
sayac=0

while(True):
sayac+=1

if (sayac%500)==0:
komut="AT\r"
seri.write(komut.encode('utf-8'))

if(ser.in_waiting>0):
veri=ser.read(ser.in_waiting).decode('utf-8')
print("seri Port gelen veri:{}\r\n".format(veri))
sleep(0.01)
ser.close()



Programı açıklayacak olursak:

Kütüphaneyi içeri al.

Seri port ayarlarını yap ve portu aç.

Sonsuz döngüye gir.
0.01 saniye *500= 5 saniyede bir defa AT\r stringini seri porta yaz

seri portta alınmak için hazır veri var mı kontrol et
varsa veri değişkenine al ve print ile yazdır.

Yukarıda anlatılan bütün işlemler ser.port='/dev/ttyS1' tanımı ser.port='COM5' değişikliği yapılıp WinSCP'ye gerek olmadam windows ortamında da çalıştırılabilir. Bunun için python dosyasını cmd ile komut satırı açıp çalışmanızın bulunduğu klasörde python seriport.py şeklinde çalıştırabilirsiniz.

Bu kadar. Gerisi size kalmış.