PHP ile web üzerinden COM port kontrolü. ( Led Uygulaması. )
Giriş -
Uyarı - Notlar vs. vs.
Merhaba, bilgisayara fazlaca merakı olan bir çok kişinin isteği bilgisayar yardımı ile dış çevre birimlerini kontrol etmektir. Benimde her zaman istediğim şeylerden biri,
evdeki daha doğrusu odamdaki belirli şeyleri bilgisayar yardımı ile yönetebilmektir.
Ney yazıkki bu konuda türkçe olarak az kaynak bulunması yada daha çok elektroniğe yakın bir anlatım
olduğu için sıkıntılar yaşanır. Bu dökümanda sizlere; bu konuda başlangıç düzeyinde bilgiler verip ufak bir uygulama ile yardımcı olmaya çalışacam.
Fakat bu dökümanda bu işi web
üzerinden yapmayı öğreneceksiniz. Üstelik ek bir programa ihtiyacınız olmayacak. Ben sistemi Windows2000 üzerinde, Apache web serverı ve Php modulu kurulu bir vaziyette denedim ve başarılı
oldum.
Windows 2000 ( NT teknolojisi ) üzerinde port uygulamaları geliştirmek diğer işletim sistemlerine göre daha zor bir iştir. Zira NT teknolojisi üzerine kurulu sistemler donanım
aygıtlarına direk erişiminizi kısıtlamaktadırlar. Ama yinede bu olmıyacağı anlamına gelmez. Eğer bu sistem Windows2000 üzerinde rahatlıkla çalıştıysa tüm windows ve *nix türü işletim
sistemlerinde ( daha doğrusu apache ve php ikilisinin kurulu olduğu sistemlerde ) çalışacaktır.
Web üzerinde yaptığım kısa bir araştırmadan sonra, elde ettiğim bilgiler doğrultusunda bu işi
C-C++ kodları ile LPT Portu ( Kabaca : printer ve benzeri aygıt kablosunun girdiği soket ) üzerinden rahatlıkla yapabildiğimi gördüm. Ancak web uygulamalarında bu işin çok daha zor olduğunu
anladım. Öyleki LPT Portunu kullanarak yaptığım php scriptlerinde işletim sisteminin apache web serverına yanıt vermediğini gördüm.
Sonra aynı işlemi COM Portlarını ( Kabaca :
modem, eski mouse vs. gibi aygıtların girdiği soket ) kullanarak yaptığımda bunun mümkün olduğunu gördüm. Bir işin yapılmasından öte neden yapılmadığı konusuyla ilgilendiğim için LPT ile
COM portlar arasındaki farkları araştırdım. Anladığım kadarı ile LPT Portundan çıkan veri bitlerini ( Kabaca : elektronik sinyaller ) ayırmak için tek tek kablo kullanılmış. COM portlarda ise aynı
kablo üzerinden farklı frekanslarda ( TTL olarak geçiyor, aslında bu bilgisayarın temeli ; saat frekansı ) bit iletildiğini anladım.
Sonuç olarak elimde benim bulabildiğim iki tane seçenek
kalmıştı.
- 1. si LPT portu üzerinden : Ek bir program yardımı ile Php kodu sayesinde bu programa bir sinyal gönderebilirim, böylece sinyal gittiği anda led lamba yanacak, başka bir sinyal
gönderdiğimde ise lamba kapanacaktır. ( Aslında bu en iyi yöntem. Ama dediğim gibi LPT portu belkide windows2000 olduğu için web server programına yanıt döndürmüyor ve php scripti kısır
döngüye giriyor )
- 2.si COM portu üzerinden : Bunda sadece php kodları ile ( yani ek bir programa gerek kalmadan her sistemde çalışabilecek durumda ) COM portuna bilgi göndericem
ve gönderdiğim bilgi süresince led yanık kalacak. Aktarım bittiğinde led sönecektir.
Aslında LPT portu daha çok işime geliyordu çünkü ledi devamlı yanık tutmak daha kolaydı. Bense hem
COM portundaki kolaylıktan hemde COM portun LPT ye oranla daha fazla üstün özellikleri olduğundan COM portu seçtim.
Burada hemen bir sorun karşıma çıkmıştı, istediğim süre
kadar bir ışığı nasıl yakacaktım, yada kahve makinasının zamanlanması gibi olayları nasıl halledecektim. Bunun üzerine hemen dışarı çıkıp yakında bulunan bir elektrikçiye gidip bu konuda biraz
yardım istedim. Elektrikçi bana led lambanın büyüklüğünde bir röle verdi. Bu röle özelliği gereği her elektrik alışında farklı bir konuma geçiyor. Yani ben bir kez COM port ile ufak bir elektrik sinyali
yolladığımda röle harakete geçip ledi yakıyor. İkinci kez COM porttan sinyal yolladığımda bu sefer röle elektriği kesip ledi söndürüyordu.
Şimdi kısa ve önemli bir açıklama yapıp
kodlarımıza başlıyalım.
Bu dökümanda ben size sadece Php ile COM porta ufak bir elektrik sinyali göndermeyi ve bu sayede porta bağlı led lambayı yakmayı gösterecem. Öncelikle web
kaynaklarından edindiğim bilgi ile sizlere; bilgisayar portlarının anakart ile tümleşim olarak imal edildiğini söylemek istiyorum. Yani herhangi bir elektrik kaçağında anakartınızın yanabileceği
ihtimalini unutmayın. O yüzden bu dökümanı dikkatlice takip etmenizi öneriyorum.
Biz COM port aracılığı ile led ' e direk elektrik sinayli yolladığımızda doğal olarak bu led üzerinde ışık
çıkartacak derecede bir gerilim oluşturacak sonra bu gerilim tekrar led in - kutubundan bilgisayara bağlı porta gönderilecektir. İşte bu noktada led üzerinde oluşabilecek bir sorun porta aşırı yük
binmesine neden olabilecek ve bilgisayarımızın zarar görmesine neden olabilecektir. Biz bu sorundan %99 oranında kurtulmak için led in - kutubuna ( ledin kısa bacağı -, uzun bacağı + kutuptur )
bir direnç direncide porta bağlayacağız. ( Ben direnç olmadan denedim aslında hiç bir sorun olmadı ama yinede tedbiri elden bırakmamak gerekiyor :) )
Şimdi eğer aşağıdaki malzemeler
elinizde varsa işe başlıyabiliriz.
- Led lamba ( Rengi farketmez :) Ama 1 yada 5 volt arası olması en ideali. )
- Direnç ( Klasik 470 ohm luklardan. )
- Bunları bir birine
tutturabileceğiniz bir şey. ( Lehim makinası, band vs. Ben board kullanıyorum )
- Com port ile bu düzeneği birleştirmek için kablo. ( iki tane 1 er metrelik ince tel, harici modem kablosu vs. gibi
şeyler olabilir. )
- Son olarakta gerekli yazılımlar ( PHP kodlarını çalıştırabileceğiniz, herhangi bir web server uygulaması. )
1 - Gerekli düzenek...
Elinizdeki kabloları
bilgisayarınızın arkasındaki boş bir com portun 3. ve 9. pinlerine bağlayın.
Com portu üzerinde pin numaralarını görebilirsiniz, eğer göremiyorsanız aşağıdaki resimden
faydalanabilirsiniz.
Öncelikle bilgisayarınıza bağlı COM port tan bize gerekli olan iki adet kabloyu size yakın ve görebileceğiniz bir yere taşımak. Aslında bu işin en zor yanı desem
gülersiniz. Ama bilgisayarınız arkasında boşta duran bir com porta bu iki kabloyu tutturmak gerçekten zor. ( Kabaca : Bilgisayara bağlı COM portları genelde erkek bir soket oluyor. ) Ben harici
modemimin kablosunu kullandım. Modem kablosunun bir ucunu com porta bağladım diğer ucundaki deliklerede elimdeki iki kablonun uçlarını soktum.
Eğer elinizde bu şekilde bir kablo
yoksa size aşağıda bazı seçenekler sunayım.
- Biraz kalın bir kablonun dışındaki plastiği telin dışına doğru itebilir ve COM port üzerinde bulunan pini bu plastiğin içine girecek şekilde
ayarlıyabilirsiniz. Aşağıdaki şekilde bir bağlantı sağlarsanız ; böylece tellerin istediğimiz pin dışındaki diğer pinlere değmesini engellemiş
olursunuz.
(http://www.ceviz.net/dokumanlar/p-comport1.gif)
- İkinci seçenek olarak herhangi bir elektronik mağazasından
bilgisayarınız üzerindeki com porta uygun bir soket alıp kablo çekebilirsiniz. Böle bir düzeneği her türlü uygulamadada kullanabileceğinizden oldukça faydalı bir araçtır.
Ben bu noktadan
sonra ; yani bilgisayarımdaki Com portun 3. ve 9. pinlerden iki kablo çektikten sonra board yardımı ile gerekli düzeneği bitirdim. Elinizde minumum araç olduğunu düşünerek aşağıda en basit şekilde
bir grafik hazırladım.
(http://www.ceviz.net/dokumanlar/p-comport2.gif)
Bir band yada lehim makinası ile yukardaki düzeneği
sağladıysanız, artık işin %80 ini bitmiş demektir.
(Bunu yazan programcı ;) )
2 - Php kodlarının yazılması ve uygulamayı
çalıştırma.
Aşağıdaki kodları comport.php adıyla kaydedin. Yalnız burada çok önemli bir ayar yapmanız gerekmektedir. Kabloları bağladığınız Com port. Normalde bir çok sistemde iki tane
com port soketi vardır. Bilgisayarın arka tarafındaki düzenekten üstte yada en başta olan port Com1 bir sonraki ise Com2 dir. Ben genellikle işlemlerimde Com2 iyi kullanırım. Fakat siz yukarıdaki
düzeneği hangi port a bağladıysanız aşağıdaki kodlarda ilk satırdaki "COM2" ayarını ona göre ayarlayın.
Eğer işletim sistemi olarak Linux kullanıyorsanız o kısıma , modeminizin tam
yolunu belirtin. ( Zaten linux kullananlar bu işin üstesinden gelirler :) - /dev/ttyS0 vs.vs. :) )
<?
$fp = fopen ("COM2:",
"w+");
if (!$fp) {
echo "Port açilamiyor.
Portun kurulu oldugundan yada kullanilmadigindan emin olun";
}
else
{
$sinyal = "Sinyal Gönderildi...";
echo $sinyal;
fputs ($fp, $sinyal);
fclose
($fp);
}
?>
Düzeneği doğru yaptıysanız ve kodları kaydedip çalıştırdıysanız. Dosyayı her çalıştırdığınızda yada sayfayı yenilediğinizde
led lambanın kısa bir süre yanıp söndüğünü gördüyseniz ; tebrikler!!!
Şimdi kodları tek tek inceleyelim sonrada bazı önemli notları belirttikten sonra dökümanı bitirelim.
$fp =
fopen ("COM2:", "w+");
if (!$fp) {
echo "Port açılamıyor. Portun kurulu olduğundan yada kullanılmadığından emin olun";
}
Kodun bu bölümünde ilk satırda (
$fp = fopen ("COM2:", "w+"); ) Php nin dosya açma,yazma ve okuma gibi işlemlerini yapmanıza yarıyan fopen() fonksiyonu ile COM2 ( Siz burada bağlantı yaptığınız com portun ayarına
göre değiştirin. ) portuna w+ parametresi ile ek bir bilgi göndereceğimizi belirttik.
Daha sonraki satırda ( if (!$fp) { ) dosyanın ( yani burada dosya COM2 portu oluyor. ) açılıp
açılamadığını kontrol ettik. Eğer COM2 portu bu sırada başka bir aygıt tarafından kullanılıyor yada kurulmamış ise echo komutu ile bu hatayı ekrana ( echo "Port açılamıyor. Portun kurulu
olduğundan yada kullanılmadığından emin olun"; ) bastırdık.
else { Eğer sistem COM2 portunu açabilirse,
$sinyal = "Sinyal Gönderildi..."; Sinyal adında ve değeri "
Sinyal Gönderildi... " olan bir değişken yarattık.
Not : sinyal değişkenin değeri ( Sinyal Gönderildi... ) ne kadar uzun olursa led in ışık yayma süreside okadar uzun
olacaktır.
echo $sinyal; Ardından bu değişkeni ekrana yazdırdık. ( Aslında bu gereksiz ama boş bir ekran biraz kötü duruyordu :) )
fputs ($fp, $sinyal); Sonra php de dosyalara
bilgi göndermeye yarayan fputs() fonksiyonu ile portumuza ufak bir elektrik sinyali gönderdik :)
fclose ($fp); : son olarakta dosyamızı ( yani COM2 portumuzu ) kapatıp php kodunu
bitirdik.
3 - Notlar, Öneriler , Fikirler vs.
Aşağıda bu konu hakkında size verebileceğim diğer önemli bilgileri sıraladım lütfen dikkatlice okumaya
çalışın.
Notlar
- Com porta olan düzenekte çok dikkatli olun. İki kablonun sadece 3. ve 9. pinlerle birbirine temas ettiğine, diğer pinlere değimediğine ve basit sarsıntılarda
kopmayacağından emin olun.
- Sinyal değişkenin değerini uzattıkça ledin yanma süreside okadar artacaktır.
- Sonradan oluşabilecek bir sorun yüzünden; anakartınızın güvenliği için
lütfen direnç kullanmadan devreyi çalıştırmayın.
- Com, LPT gibi portlar güç kaynaklarını anakart üzerinden sağladıkları için ortalama olarak 5V luk bir enerji verebilirler. Bu yüzden röle
olmadan yüksek voltaj isteyen şeyler kullanmayın.
- Sabırlı olun ve dökümanı dikkatlice takip edin Her adımda yaptıklarınızı iki kez kontrol edin.
- Eğer portla ilgili bir sorun yaşarsanız,
port ayarlarından kesme istekleri, dur bitleri gibi ayarlarda değişiklikler yapın.
Öneriler
- Odanızdaki çeşitli araçları kontrol edebilmek için, elektronik bilgisi olan biri ile
görüşün. Düşük voltajla çalışan bir röleyi kontrol ederek, 220 voltla çalışan aletleri nasıl kumanda edebileceğiniz konusunda fikir edinin.
- İnternet üzerinde yada bilgisayar ile ilgili kitapları
araştırarak Com port üzerinden gönderilen sinyalleri işlemeyi ve bunun yardımı ile nasıl elektronik düzenekler hazırlayabileceğinizi araştırın.
Fikirler
- Sağlam ve geniş bir
bilgi ile Com port üzerinden gelen sinyallere göre etki yapan bir devre yapabilirseniz, evinizdeki bir çok şeyi internet üzerinden gerçekleştirebilirsiniz.
Örneğin kahve makinanızı belirli
periyotlarda çalıştırarak, elektronik ayarlı şohbeninizi iş yerinden ayrılırken eve vardığınız anda sicak su yapabilecek şekilde ayarlıyabilirsiniz.
Yada oturduğunuz yerden odanızın ışığını
açıp kapatabilir, hatta ev içerisinde çeşitli sensorler yardımı ile bir alarm sistemi kurup bilgisayar yardımı ile bunu denetleyebilirsiniz.
Sonuç olarak yapabilecekleriniz hayal gücünüz ile
sınırlı. Benim tavsiyem web üzerinden motor kontrolleri gibi şeyler üzerinde yoğunlaşmanız böylece ilerde işsiz kalma gibi bir sorununuz olmaz. Hemen hemen her türlü sanayi faaliyetlerinde
rahatlıkla çalışabilirsiniz. Özellikle otomasyon sistemleri üzerinde çalışın.
Dökümanı Yazan : Fatih Hood - zw@zeb.biz - www.zeb.biz
[/code]