Daha önce “WiringPi.GPIO ile Komut Satırından Port Kontrolü” başlıklı yazımda, WiringPi’nin gpio komut satırı aracı ile GPIO pinlerinin nasıl kontrol edileceğini anlatmıştım. Ayrıca WebIOPi‘den de bahsetmiştim. Şimdi de aynı aracı kullanarak bu işlemi web sayfası üzerinden PHP ile nasıl gerçekleştireceğimize bakalım.
Aşağıdaki kodu incelerseniz aynı komutları kullandık. gpio komutu çalıştırabilmek için isen PHP’nin system komutundan faydalandık. System komutu PHP içinden harici bir program çalıştırıp çıktısını geri döndüren bir komut. Örneğimizde 2. pin’e bağlı led yakıp ardından hemen söndürdük. Tabi öncesinde 2. pinin modunu çıkış olarak ayarlamayı unutmuyoruz.
1 2 3 4 5 6 7 8 9 |
<?php system("gpio mode 2 out"); system("gpio write 2 1"); system("gpio write 2 0"); ?> |
Biraz daha ilgi çekici bir örnek verelim. Aşağıdaki program P1 soketinin tüm pinlerini (17 pin) çıkış olarak ayarlıyor ve 10 tur tekrarlayan bir yürüyen ışık etkisi yaratıyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php // Tüm pin'ler çıkış olarak ayarlanıyor for ($i = 0; $i <= 16; $i++ ) { system ( "gpio mode ".$i." out" ); } for ($j=0; $j<10; $j++) { // Led'leri sırayla yak for ($i = 0; $i <= 16; $i++ ) { system ( "gpio write ".$i." 1" ); } // Led'leri sırayla söndür for ($i = 0; $i <= 16; $i++ ) { system ( "gpio write ".$i." 0" ); } } ?> |
Pinlerden değer okumaya da örnek verip sonlandırmak istiyorum.
1 2 3 4 5 6 7 8 9 10 11 |
<?php system("gpio mode 2 out"); system("gpio write 2 1"); exec("gpio read 2", $pin2); echo "Merhaba 2. pinin degeri ".$pin2[0]; ?> |
Bu örnekte pinden değer okumak için PHP’nin exec komutundan faydalandık. exec’in ikinci parametresi dizi türünden bir değişken ve programın ekran çıktısına ait satırların her biri ayrı bir elemanında saklanıyor. İlk satır olan $pin2[0] ekrana yazdırdığımız da şu çıktıyı verir:
Merhaba 2. pinin degeri 1
Performansı denemek için aşağıdaki deneme kodunu bir osilaskop’a bağlayarak çıkış sinyali gözledim. PHP içerisinden GPIO kullanımı 54KHz civarı bir kare dala verdi. Oldukça düşük.
1 2 3 4 5 6 7 8 |
<?php system("gpio mode 2 out"); for ($i=0; $i<100000; $i++) { system("gpio write 2 1"); system("gpio write 2 0"); } ?> |

Umarım faydalı olmuştur.

Hocam merhaba,
Öncelikle ellerinize sağlık çok güzel açıklamışsınız. Adım adım bütün işlemleri yapıyorum.
Fakat php’de bir sorunla karşılaştım. PHP dosyasını (test.php) usr/share/webiopi/htdocs (8000 portu) içine direk atamadım. rootla girdim dosyayı oluşturdum. Fakat browserda açınca olan kodu koduna çeviriyor. Dolayısıyla php kodunu çalıştıramıyorum.
Bunun için ikinci yazınızda anlatılan webiopi-php yi mi kurmalıyım? yoksa başka bir yerde hata mı yapıyorum?
Teşekkürler
Merhaba, yorumunuz için teşekkür ederim.
php içinde gpio kullanmak için öncelikle wiringpi’yi yüklemek için şurdakileri yapın:
http://raspberry-pi.tankado.com/raspberry-pi-board/wiringpi-gpio-ile-komut-satirindan-port-kontrolu.html
webiopi hazır bir kısıtlı bir uygulama portları monitör etmek veya on/off etmek için sadece. Kendi uygualamanızı geliştiriyorsanız buna ihtiyaç duyacağınızı sanmıyorum.
Yukarıdaki örnekte yer alan php kodlarını denemek için öncelikle şuradan apache/php çiftinin kurulumunu yapın. Bundan sonra web tarayıcısına sadece pi’nin ip adresini yazarak bağlanın. Yani 80. portu kullanmalısınız.
http://raspberry-pi.tankado.com/raspbian-linux/raspberry-piye-lamp-apache-mysql-php-kurmak.html?doing_wp_cron=1412562024.9624850749969482421875
Kolay gelsin.
system(“gpio mode 2 out”);
system(“gpio write 2 1”);
system(“gpio write 2 0”);
permission denied hatası alıyorum.