PHP ile web üzerinden COM port kontrolü

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…

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.





- İ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.



Bir band yada lehim makinası ile yukardaki düzeneği sağladıysanız, artık işin %80 ini bitmiş demektir. Bir sonraki sayfadan devam edelim.

#sayfa_sonu#


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.


Bu konu ile ilgili görüşlerinizi ve sorularınızı bana gönderebilirsiniz.



Tarih : 21-Haziran-2002


Kaynak : Web + Genel Bilgi


Alıntı : Yok


Dökümanı Yazan : Fatih Hood – zw@zeb.bizwww.zeb.biz



Arama Terimleri:

php com port, web üzerinden lpt port kontrolü nasıl yapılır, basic com port programming, matlab da seri porta nasıl bağlan, matlabla seri port com1 açılmıyor, php comport kullanımı, php ile elektrik kontrol, php ile web üzerinden com port kontrolü, php led programlama, vb ile internet üzerinden lpt kontrolü

ceviz.net

Yazar - 17 Nisan 2003. Kategori PROGRAMLAMA. Bu yazıya yazılan yazıları RSS üzerinden takip edebilirsiniz RSS 2.0. Yorum yazabilir veya geri izlemede bulunabilirsiniz.

"PHP ile web üzerinden COM port kontrolü" için yapılan toplam yorum - 13

  1. Ertuğrul Yıldırım

    Belki günün birinde PHP ıle web arayuzune sahıp bır ev yonetımı uygulaması yazarım :) Ogun Fatih Hood’a duacı olucam.

  2. Hikmet Gumus

    Bu konuda internet uzerinde kullandiginiz yada bizim kullanabilecegimiz kaynaklar var ise onlari gonderebilir misiniz ?

    Mail adresim : gumush@hitstar.org

  3. Resimler gözükmüyor, acaba düzeltilebilir mi ?

  4. Samet Poyraz

    Gerçekten çok teşekkürler bu olayı hemen deneyeceğim düşünsenize cep telefonunuzdan wapa girip eve girmeden evdeki tüm ışıkları yakmak vay be :)

  5. Resimler açılmıyor.Yazı için çok teşekkürler.

  6. bekir candan

    ilk önce yaptığınız çalışmalardan dolayi size teşekkür edirim. Sizden bir ricam olacak; elinizde port kullanarak dijital bir karta bilgi aktaqrımı ile bir bilgi veya kaynak kodu varsa benimle paylaşırsanız çok memnun olurum şimdiden ilginizden dolayı teşekkur edrim cevabınızı bekliyorum.

  7. bende bu konuda çalışma yapmak istiyorum elinizde kaynak varsa paylaşabilirz. iyi çalışmlar

  8. MErhaba ben bilgisayar bölümü lise son öğrencisiyim yapmam gereken bi ödevim var doğrusunu söylemek gerekirse pekte bilgim yok bu konuda.benden LPT portu kullanarak bir evin ışık kontrolünü yapan (led otomatik belirlenen bi saatte yanıp geri otomatik olarak sönecek)bu programı visual basic de yapmam gerekiyor bana yardımcı olabilirmisiniz…?

  9. Zafer BAHADIR

    Merak edenler için;
    VisualBasic 32bit ile kolayca pararlel port kontrolu yapılabiliyor.

    out komutunun desteklewnmediği yerlerde c++ builder gibi c++ builder dosyasına yerleştirilen asm {} kodlarıyla bu mümkün.

    Delphi kullananlar için doğrudan portlar kullanılabiliyor ama son sürümlerinde denemedim.

  10. acaba kontrolü klavye üzerinden kısayol tuşları olarak atayabilmek mümkün müdür?

  11. merhaba arkadaşlar ben denedim fakat direk yanmaya başladı yanlış nerde anlamadım direk enerjiyi alıyor

  12. Merhaba arkadaşlar,
    Yazı çok güzel ancak bikaç sorum var. seri porttan veri okumak mümkün mü? Bunu biraz araştırdım ama net bir bilgi bulamadım. Bazı class ların mevcut olması gerektiğini söyleyenler var ve Linux te bunun mümkün olduğunu ancak Windowsta olmadığını söyleyenler de var. Bu yöntemle windowsta veri okumak mümkün müdür? Bir de normalde C++ ve MATLAB ten bildiğim kadarıyla seri port açıldıktan sonra ayarlarını yapmak gerekiyor, bit rate, parity gibi… PHP de bu gerekmiyor mu? gerekmiyorsa mevcut ayarları nedir. Sorularımı cevaplarsanız çok sevinirim. şimdiden teşekkür ederim.

  13. hocam gerçekten de güzel paylaşım da yazıyı aldığınız yerden resimleri de temin edebilseydiniz keşke gerçekten de 10 numara olurdu…

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>