.NET Micro Framework: Seri Port Kullanımı
Her ne kadar günümüz cihazlarında yerini USB ve
Firewire portlarına devretmiş de olsa, endüstriyel otomasyon ve GPS alıcıları
gibi cihazlarda seri port kullanımı yaygındır. Bunun sebebi ise düşük donanım
maliyeti, basit yapısı, standartlaşmış olması ve kullanım kolaylığıdır. Seri
iletişimde gönderilecek veri bitlere ayrıştırılır ve diğer cihaza gönderilir.
Karşı tarafta alınan bitler ise byte dizisine çevrilip işlenir. .NET Micro
Framework'ün seri iletişimde bize sağladığı kolaylıklara bir göz atalım.
Seri Portu Açmak
Seri portu kullanabilmek için öncelikle "Microsoft.SPOT.Hardware.dll" ve
"Microsoft.SPOT.Hardware.SerialPort.dll" kütüphanelerini proje referanslarına
ekleyelim. Namespace'ler arasına da "using System.IO.Ports;" ifadesini ekleyerek
seri porta ulaşabiliriz.
using System;
using System.IO.Ports;
using Microsoft.SPOT;
namespace SeriPort
{
public class Program
{
//COM1 üzerinde 19.600 bps bağlantı hızında bir seri port tanımlayalım:
public static SerialPort sp1 = new SerialPort("COM1", 19600, Parity.None, 8, StopBits.One);
public static void Main()
{
//COM1 seri portunu kullanıma açalım:
sp1.Open();
}
}
}
Veri Göndermek
Seri port üzerinden veri göndermek için önce gönderilecek veriyi byte dizisine
aktarıp daha sonra çıkış önbelleğine göndeririz. Seri portun bağlantı hızına
göre önbellekteki veri diğer cihaza aktarılır.
using System;
using System.Text;
using System.IO.Ports;
using Microsoft.SPOT;
namespace SeriPort
{
public class Program
{
public static SerialPort sp1 = new SerialPort("COM1", 19600, Parity.None, 8, StopBits.One);
public static void Main()
{
sp1.Open();
//Gönderilecek komutu bir byte dizisine aktaralım:
byte[] komut = Encoding.UTF8.GetBytes("Gonderilecek veri\r\n");
//COM1 üzerinden gönderilmek üzere çıkış önbelleğine komut dizisini aktaralım:
sp1.Write(komut, 0, komut.Length);
}
}
}
Veri Almak
Seri porta veri ulaştığında tetiklenecek bir interrupt oluşturup, gelen veriyi
bir byte dizisine aktarıp daha sonra da üzerinde istediğimiz işlemleri
yapabiliriz.
using System;
using System.Text;
using System.Threading;
using System.IO.Ports;
using Microsoft.SPOT;
namespace SeriPort
{
public class Program
{
public static SerialPort sp1 = new SerialPort("COM1", 19600, Parity.None, 8, StopBits.One);
public static void Main()
{
sp1.Open();
//Seri porta veri ulaştığında çalışacak bir interrupt belirleyelim:
sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived);
//Main thread'i uyutalım:
Thread.Sleep(Timeout.Infinite);
}
static void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//Seri port üzerinden karakter alındıysa:
if (e.EventType == SerialData.Chars)
{
//Gelen verinin aktarılacağı bir dizi tanımlayalım:
byte[] gelenVeri = new byte[sp1.BytesToRead];
//Seri porttan gelen veriyi tanımladığımız diziye aktaralım:
sp1.Read(gelenVeri, 0, gelenVeri.Length);
//Okunan veriyi String olarak encode edip Immediate Window'da gösterelim:
Debug.Print(new String(Encoding.UTF8.GetChars(gelenVeri)));
}
}
}
}
Seri Portu Kapatmak
Port ile işiniz bittiği zaman Close() komutu ile seri portu kapatabilirsiniz.