Arduino ile Python Haberleşmesi
Merhaba arkadaşlar bu yazımda sizlere Python programlama dili ile arduino mikrokontrolcüsünü seri port üzerinden nasıl haberleşeceğini anlatacağım. İlk olarak arduino IDE üzerinden arduino’ya yazılım yükledim bu yazılım hali hazırda arduino ide üzerinde bulunuyor.
File->Examples->Communication->SerialEvent bu yazılımı arduino’ya aktardım. Bu yazılımı çok kısaca açıklamak gerekirse seri porttan gelen değerleri karakter dizisine atıyor ve \n gördüğü yerde veriyi kesip seri porta yazıyor.örneğin emre\n yollarsak arduino bize emre’yi seri porttan gönderecektir.
import serial import time ser = serial.Serial("COM5", 9600) print("Reseting Arduino") time.sleep(3) print("Arduino is ready") for x in range(0, 3): ser.write("emre bektas\n") print ser.readline() print "Sending serial data" ser.close() if(ser.isOpen()): print "Serial connection is still open." else: print "Serial connection is close."
Python koduna baktığımızda ilk olarak serial ve time kütüphanelerini import ettik. ve serial objesinden ser tipinde nesne üretip içerisine arduino kartımızın bağlı olduğu com portu ve bound rate’ini girdik.
Buradaki kritik nokta bu bağlantı kurulurken arduino otomatik olarak kendine reset atar ve belli bir süre beklemeniz gerekiyor. Aksi taktirde gönderdiğiniz verilerin bir kısmı arduino’ya ulaşmıyor.
Bu yüzden time.sleep ile 3 saniye beklettik.Ardından for döngüsü ile 0 dan 3 e kadar programı döndürdük. Seri porta 3 kere emre bektas\n göndermiş olduk. Koda bakacak olursaniz her ser.write(“emre bektas\n”) ifadesinin ardından ser.readline() komutu ile arduinodan gelecek olan değeri programa alıyoruz ve print ile yazdırıyoruz.
Döngü bittikten sonra serial datalar gönderildi yazacağız ve ardından seri haberleşmemizi kapatıyoruz. En sonda da if döngüsü ile eğer connection açık kalmış ise bize uyarı veriyor kapalıysada “Serial connection is close.” yazıyor.
Paylaştığım görseldende anlayacağınız üzere 1. sütunda python kodunu yazıyoruz ardından Run edince 2. sütundaki pencere açılıyor ve programı gerçekleştiriyor. seri porttan 3 tane gelmesini beklediğimiz emre bektas geliyor. 3. sütunda da ilgili arduino kodunu görebilirsiniz. Tek yaptığım değişiklik Serial.println(inputString); komutunu Serial.print(inputString); yapmak oldu. Bunun nedeni ise println fonksiyonu her gönderdiği değerden sonra bir alt satıra geçer biz bunu engellemiş olduk.
Elinie sağlık yanlız, write komutunda “write(b”komut”)” şeklinde yollanması gerekiyor.