csharpserial

C#’ta Yeni Olanlar İçin USB ile Serial Haberleşme

Bu yazıya başlamadan önce C# kullanımını hızlı ve faydalı bir şekilde öğrenmek için aşağıdaki linkte bulunan dört Tutorial’ı anlatımıyla birlikte yapmanızı tavsiye ederim.

http://msdn.microsoft.com/tr-tr/library/dd492171

Eğer temel C# Windows Forms Application yapmayı biliyorsanız buna ihtiyaç duymayacaksınız. Öncelikle C#’ta SerialCommunication adında bir proje oluşturalım. Bunun için File > New >Project… yolunu takip ediyoruz. Karşımıza New Project adında bir pencere çıkıyor. Installed Templates’in içinden Visual C# ardından da orta kısımdan Windows Forms Aplication’ı seçiyoruz. Name kısmına önceden belirlediğimiz gibi  “SerialCommunication” yazıyoruz. Location’ı belirledikten sonra OK seçenegine tıklayıp, yeni projemizi oluşturuyoruz. Şimdi karşımıza Form1 isminde bir form çıktı.

Form1’in üzerine çift tıklayınca kod kısmında

diye bir method oluştuğunu görmelisiniz çünkü ilerde burayı kullanacağız. Ardından tekrar Form1.cs[Design] kısmına geçip GUI’ mizi tasarlamaya başlıyoruz. Yapacağımız programı basit tutmak için mümkün oludukça az component kullanmak istiyorum. Form1 seçiliyken Properties > Text kısmının içine SerialCommunication diye yazınca programımızın ismini değiştirmiş oluruz.

Toolbox > Containers’tan TableLayoutPanel’a çift tıklıyorum ve ardından tableLayoutPanel1 oluşuyor ve bu seçiliyken Properties’ten Dock’u Fillyapıyorum. 2 satır 2 sütundan oluşan bir container oluşturmuş olduk. Toplamda 2*2=4 tane dikdörtgen oluştu. Bu demek oluyor ki her bir dikdörtgene yalnızca 1 component yerleştirebilirim. TableLayoutPanel’in özelliği de bu zaten. Eğer her bir dikdörtgenin içine birden fazla component koymak istiyorsanız bu dikdörtgenlerden içinde fazladan component istediğiniz dikdörtgene FlowLayoutPanel sürükleyip bırakabilirsiniz.FlowLayoutPanel’de sığdırılabilecek kadar componenti yer varsa satır boyunca, satır boyunca yer kalmadıysa da sütun boyunca componentleri yerleştirmenize olanak sağlayan bir paneldir. Öncelikle bize gerekli olan componentleri belirleyelim.

  1. Toolbox > Components > SerialPort’a çift tıklayarak GUI’mize bir SerialPortcomponenti ekliyoruz. Design kısmında altta serialPort1 diye gözükmesi gerekir. serialPort1 seçiliyken Properties > Events > DataRecieved’e çift tıklıyoruz. Bize aşağıdaki methodu oluşturuyor. Gelen dataları okuyabilmemiz için bu event handler’ı kullanmamız gerekecek.
  2. SerialPort’tan String gönderebilmem için öncelikle bir tane TextBox eklemem gerekir. Bunun için TextBox’ı koymak istediğimiz yere sürükleyip bırakmamız yeterli.
  3. Send işlemini yapabilmemiz için bir Button’a ihtiyacımız var.
  4. Gelen giden yazıları okumak için RichTextBox’a ihtiyacımız var.
  5. Serial iletişimi yapmak için bu iletişimi yapacağımız COM portu seçmemiz gerekir. Port isimlerinin bulunacağı bir Combo Box oluşturmamız lazım.
  6. Baudrate’i ayarlamamız için gerekli Baudrate’leri bir Combo Box’ın içine eklememiz gerekir.
  7. Seçilen Baudrate ve Port’tan iletişime başlamak için Connect Button’u yerleştirmemiz gerekir.
  8. Baudrates ve Port Names isminde iki tane Label’ı ilgili Combo Box’ların üzerine yerleştirelim.

Şimdi GUI mizi oluşturabiliriz. 2×2 TableLayoutPanel’imizin 1.1 (1. satır 1. sütun)’e FlowLayoutPanel koyup, FlowLayoutPanel’in içine de 2 Combo Box ve 1 Button’u alt alta koyuyoruz. 1.2’ye RichTextBox koyuyoruz. 2.1’e 1 Button ve 2.2’ye Text Box koyuyoruz. Kaba taslak aşağıdaki resimde görüldüğü gibi bir GUI’mizin olması yeterli.

Burdan sonra kod’lama kısmına geçiyoruz.

Böylece hem C# ‘ta GUI yapmayı hem de işimizi görecek bir USB Serial Haberleşme Programı yapmayı öğrendik. İnşallah faydalı olmuştur. Herkese iyi çalışmalar dilerim. Anlaşılmayan noktaları yorum kısmında sorabilirsiniz.

9 thoughts on “C#’ta Yeni Olanlar İçin USB ile Serial Haberleşme

  1. abi öncelikle güzel bir yazı olmuş teşekkürler ama bunu sanki usb için değil de rs232 den haberleşmek için yazmışsınız gibi bana mı öyle geldi acaba…çünkü hiç doğrudan usb ile alakası yokmuş gibi duruyor.

    • Teşekkür ederim. Usb de RS232 de seri haberleşme için kullanılır. RS232 entegreleriyle UART USB ye çevrilebilir. Aralarındaki tek fark çıkış konnektörleridir. Ben de böyle bir çevirici modül kullandım. Bu linkteki modül gibi:
      http://www.wvshare.com/product/FT232-USB-UART-Board-mini.htm
      Bu program doğrudan USB için de kullanılabilir ama. Sonuçta seri haberleşme. Mikroişlemcinin içinde eğer RS232 çevirici yoksa UART portlarindan USB CDC diye kütüphane kullanılabilir.
      Bahsettiğim her iki durum için de bu program kullanılabilir.
      Bi de merak ettim. Usb ile alakası varmış gibi durması için nasıl olması gerekiyor sence ☺

      • Admin tarafından Düzeltme: usbHidPort ile ilgili kod uzunluk sebebiyle kaldırıldı.

        Mesela burda pic18f4550 nin b portun daki 8 ledi yakan c# programı yazılmış ve burada usbhidport v.s gibi komutlar var yani usbyi doğrudan ilgilendiren ve doğrudan kullanıldığı komutlar..ayrıca evet usb de bir seri iletişimdir ama rs-232 deki olduğundan çok daha kompleks ve derin bir konudur çeviricilerle belki bu iş yapılabilir ama bu da usb nin potansiyelini sınırlar…demek istediğim usb ile alakası varmış gibi durması için serialport konfigürasyon komutları değilde yukarıda yazdığım gibi direkt olarak usb konfigürasyon komutları olmalıydı ama tek bir tane bile göremedim o yüzden böyle yazdım : )

  2. selam, verileri illa ki
     private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e) {
     
          richTextBox1.Text += “Recieved Data > “ + serialPort1.ReadLine() + “n”;

    bu şekilde mi çekmemiz gerekiyor? direk timerle bir periyot ayarlasam ona göre çekse, önce veri gönderse ve cevabını o verinin sonucuna göre alsa olur mu? bu eventi kullanmak zorunlu mu?

Leave a Comment

%d bloggers like this: