/Pyserial-Arduino

The repo which contains Python-Arduino serial communication.

Primary LanguagePython

Python Arduino Seri Haberleşmesi

en tr

 Bu repo pyserial da yaygın kullanılan metodlar ve örnekler içerir.

 (yapılanlar pyserial 3.5 , python 3+ için geçerlidir.)

📑 İçerik

Pyserial'a baslangıc ve fonksiyonlar

📤 Port açmak

Port açmak için Serial.serial() sınıfını kullanıyoruz.

Kodumuzda; port = Serial.serial(port='com6',baudrate=9600,timeout=2) satırıyla portumuzu açabiliriz.

Ardiuno nuzu bağladığınız port ismini buradan öğrenebilirsiniz. baudrate parametresi arduino ide sinde setup içinde belirlediğiniz Serial.begin(baudrate) ile aynı olmalıdır. timeout parametresi arduinodan gelecek veriyi okurken beklenebilecek sınırı temsil eder. 2 verdiğimizde 2 s veri bekler,döner ve veri gelmezse sonsuz döngüye girmemiş olur. Daha fazla parametre için buraya bakabilirsiniz.

Portun açık olup olmadığını kontrol etmek için isOpen() metodunu kullanabiliriz.

Port açma ve kapama komutu

📥 Veri okuma

Bazı metodlarla veriyi okuyabiliyoruz. Ben read() , readline() dan bahsedeceğim.

read() metodu veriyi tane tane okumamızı sağlar. size parametresi alır default olarak size=1 dir. Size ı değiştirerek kaç byte okumak istediğinizi ayarlayabilirsiniz. Örneği için bu dosyayı arduinonuza yükleyin. Python da ise bu dosyayı çalıştırın.

readline() metodu veriyi satır satır almamızı sağlar. Uygulaması için bu dosyayı arduino ya yükleyin. Pythonda bu dosyayı çalıştırın.

📤 Veri gönderme

Veri yazarken yaygın yöntem write() dır. Metodu kullanırken gönderilecek veriyi byte a çevirmeliyiz. Önemli kısım str ve int değişken tiplerindeki hız farkı. Bu farkı servo kontrolü kısmında görebilirsiniz.

Kütüphanedeki bazı özellik ve metodlar

  • name Port ismini verir.

  • open() port açmayı sağlar.

  • close() port kapamayı sağlar.

  • inWaiting() arabellekte bekleyen byte sayısını döndürür. Verinin gelip gelmediğini de böylece anlayabiliriz bkz.

  • reset_input_buffer() giriş arabelleğini(buffer) temizler. Veri dar boğazını engeller. Pyserial < 3.0 sürümlerde flushInput() olarak bulunur.

  • reset_output_buffer() çıkış arabelleğini(buffer) temizler. Veri dar boğazını engeller buffer ı etkin kullanmamızı sağlar. Pyserial < 3.0 sürümlerde flushOutput() olarak bulunur.

📖 Uygulama Örnekleri

📌 Python inputu ile led yakma

🗺️ Arduino şeması:

led on-off

Ino dosyasını yükleyin ve py dosyasını çalıştırın.

📌 IMU sensör verilerini alma(MPU6050)

Arduino da calcGyroOffsets() otomatik imu daki jiroskop üzerinden kalibrasyon yapıyor. Bu yüzden py kodu çalıştırdığınızda bir süre sensörü oynatmayın.

🗺️ Arduino şeması:

IMU

Yüklemek ve çalıştırmak için ino ve py dosyası

📌 Servo motor kontrolü

🗺️ Arduino şeması(Hızlı/yavaş ikisinin şeması aynı):

servo

Yüklemek ve çalıştırmak için ino ve python dosyası

Hızlı motor kontrolü

Arduino şeması yavaşla aynı. Python ve ino dosyaları

Yavaşla Hızlının görsel farkı

alt text alt text

Yararlandığım kaynaklar