Python'dan Serial Porta Veri Gönderme ve Okuma

Kodla Büyü

emrahsahan

Süper Üye
Süper Üye
Seçkin Üye
Mesajlar
1,508
Arkadaşlar Python masaüstü uygulamasından serial porta veri göndermek ve arduinoda serial porttan veriyi okuyarak işlem yapmak istiyorum. Bu şekilde çalışma yapan var mı?Örneğin Pythondan 1 verisini göndreceğim. Arduino serial portan 1 verisini okursa işlem yapacak led yakma gibi. pyserial kütüphanesiyle yapıyorum.


import serial
import time

serialObj = serial.Serial(port="COM8", baudrate=9600, timeout=1)

if serialObj.isOpen():
data = "ON"
serialObj.write(data.encode('utf-8'))
time.sleep(1)
gelen = serialObj.read()
print(gelen)

serialObj.close()

Boş yazdırıyor.

Bu da arduino kodu

int buzzerPin = 5;

void setup() {
pinMode(buzzerPin, OUTPUT);
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()>0){
String test = Serial.readString();
if (test=="ON"){
digitalWrite(buzzerPin, HIGH);
delay(500);
digitalWrite(buzzerPin, LOW);
delay(500);
}
}
 
Son düzenleme:
pyfirmata2 ile yap hocam daha basit ve verimli

from pyfirmata2 import Arduino
import time

PORT = 'COM3' # Kendi port numaranıza göre değiştirin

# Arduino'ya bağlan
try:
board = Arduino(PORT)
print(f"Arduino bağlantısı başarılı: {PORT}")
except Exception as e:
print(f"Bağlantı hatası: {e}")
exit()

# LED pinlerini tanımla (dijital pinler)
led1 = board.get_pin('d:2:o') # Dijital pin 2, çıkış modu
led2 = board.get_pin('d:3:o') # Dijital pin 3, çıkış modu
led3 = board.get_pin('d:4:o') # Dijital pin 4, çıkış modu

# Tüm LED'leri söndür
def turn_off_all_leds():
led1.write(0)
led2.write(0)
led3.write(0)

def main():
print("Komutlar:")
print("1: 1. LED'i yak")
print("2: 2. LED'i yak")
print("3: 3. LED'i yak")
print("0: Tüm LED'leri söndür")
print("q: Programdan çık")

try:
while True:
command = input("\nKomut girin (1/2/3/0/q): ")

if command.lower() == 'q':
print("Program sonlandırılıyor...")
break

# Önce tüm LED'leri söndür
turn_off_all_leds()

# Komuta göre LED'i yak
if command == '1':
led1.write(1)
print("LED 1 yakıldı")
elif command == '2':
led2.write(1)
print("LED 2 yakıldı")
elif command == '3':
led3.write(1)
print("LED 3 yakıldı")
elif command == '0':
print("Tüm LED'ler söndürüldü")
else:
print("Geçersiz komut! Lütfen 0, 1, 2, 3 veya q girin.")

except KeyboardInterrupt:
print("\nProgram kullanıcı tarafından sonlandırıldı.")
finally:
# Program sonlandığında tüm LED'leri söndür ve bağlantıyı kapat
turn_off_all_leds()
board.exit()
print("Arduino bağlantısı kapatıldı.")

if __name__ == "__main__":
main()
 
pyfirmata2 ile yap hocam daha basit ve verimli
Tamam hocam çıktım artık pazartesi deneyeceğim. 20 tane proje var. Hocalarla bitirdik çoğunu. 20.000 ₺ ödeme geldi. 6 projede 13.500 ₺ e ulaştık. Yaktigim benzin de cabası. Malzeme almak için. Sanayidir, carsidir.

Hocam opencv ile araç plakasini okuyorum. PyQt5 ile yaptım. Veritabanından plakayı kontrol ediyor. Buraya kadar işlemler tamam. Seri porta sinyal gönderip okumam lazım. Engelli araci ise park alanını açacak Arduino.
 
Son düzenleme:
Yok mu başka görüşü olan pcden serial porta sinyal göndereceğiz Python ile
 
Yok mu başka görüşü olan pcden serial porta sinyal göndereceğiz Python ile
Başka bir uygulamada seri port haberleşmesi yapmıştım, inceleyebilirsiniz:


 
pySerial kütüphanesi ile yapılıyor
Ben bunu denedim yanlış yaptım galiba. Direk komut gönderiliyor sanırım. Ben pythondan veri gönderip serialdan okuyup arduino c kodunu calistirmaya çalıştım. Gerek yokmus galiba. Direk Python kodu ile örnek LED yakiliyor sanırım.
 
Bana sadece şunu söyleyin Arduino programında c kodu yazıp karta yuklememe gerek var mı? Hem Python hem c kodu mu yazmam gerekiyor orada kafam karıştı.
 
Bana sadece şunu söyleyin Arduino programında c kodu yazıp karta yuklememe gerek var mı? Hem Python hem c kodu mu yazmam gerekiyor orada kafam karıştı.
Hocam seri haberlesme için tabiki Arduino da bir okuma yapmanız (bir kod yüklemeniz ) gerekli.
Arduino seri portdan aldigi verinin nerden geldigine bakmaz türünde bakmaz temel olarak char olarak alır.
Şimdi siz arduino ya örnekler kısmından serial örneğini yüklerseniz veri okursunuz. Yada
#include <SoftwareSerial.h>

#define RxD 10 // Tx
#define TxD 11 // Rx

SoftwareSerial haberlesme(RxD,TxD);

void setup()

{
Serial.begin(9600);
haberlesme.begin(9600);
pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
}

void loop() {
if (haberlesme.available()) {
int inByte = haberlesme.read();
Serial.write((char)inByte);
}
if (Serial.available()) {
int inByte = Serial.read();
haberlesme.print((char)inByte);
}
}
Kodu arduino ya

Veriyi nereden nasıl gönderdiğiniz ve okuduğunuz önemli değil. Bu kod okur ve seri porttan veri gonderir
 
Son düzenleme:
Bana sadece Python ile LED yakabilecegim bir ornek lazım. Bu arada arduinonun kendi uygulamasindan da c kodu yazmama gerek var mı? Onu öğrenmek istiyorum
 
pyfirmata ile yaptım basitmiş. Bu modülün kendi kodları arduino karta yükleniyormuş.
 
BBNET
Geri
Üst