Tankado.com

PHP ile GPIO Pinlerini Kontrol Etmek – I

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.


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


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


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

<?php
system("gpio mode 2 out");
for ($i=0; $i<100000; $i++)
{
system("gpio write 2 1");
system("gpio write 2 0");
}
?>
54khz raspberry pi gpio benchmark

 

Umarım faydalı olmuştur.

Exit mobile version