Raspberry Pi – aplikacja php



Aby móc uruchomić zdalne starowanie przez internet należy zainstalować serwer apache i php. Wykonujemy to wydając po kolei polecenia:

sudo apt-get update

sudo apt-get install git-core apache2 php5 libapache2-mod-php5

Można przy okazji zaktualizować cały system wydając polecenie:

sudo apt-get upgrade

Przy pomocy tej aplikacji będziemy mogli zdalnie zarządzać włączaniem/wyłączaniem poszczególnych oraz wszystkich diod modułu KaMODLED8, zaświeceniu odpowiedniego koloru diody RGB w module KaMODRGB czy włączaniem/wyłączaniem radia internetowego. Aplikacja pozwala na zdalne wyłączenie urządzenia Raspberry Pi.

Do sterowania wykorzystana została biblioteka wiringPi zainstalowana i wykorzystana przy okacji artykułu o GPIO i I2C (dioda RGB).

Sterowanie przez www okno przeglądarki

Rys. Sterowanie przez www – okno przeglądarki.

Na początku pliku znajdują się procedury inicjujące interfejs GPIO oraz układ PCA9633 firmy NXP zawarty w module KaMODRGB.

//IO
shell_exec(‚gpio -g mode 17 out’);
shell_exec(‚gpio -g mode 27 out’);
shell_exec(‚gpio -g mode 4 out’);
shell_exec(‚gpio -g mode 22 out’);
shell_exec(‚gpio -g mode 18 out’);
shell_exec(‚gpio -g mode 23 out’);
shell_exec(‚gpio -g mode 24 out’);
shell_exec(‚gpio -g mode 25 out’);

//RGB
shell_exec(‚sudo i2cset -y 1 0×07 0×00 0×00′);
shell_exec(‚sudo i2cset -y 1 0×07 0×01 0×00′);
shell_exec(‚sudo i2cset -y 1 0×07 0×08 0xff’);

W następnej kolejności znajdują się procedury odczytujące aktualny stan linii GPIO, zawartości rejestrów układu PCA9633 oraz stan deamona mpd odpowiedzialnego za działanie radia internetowego.

$out1val = shell_exec(‚gpio -g read 17′);
$out2val = shell_exec(‚gpio -g read 27′);
$out3val = shell_exec(‚gpio -g read 4′);
$out4val = shell_exec(‚gpio -g read 22′);
$out5val = shell_exec(‚gpio -g read 18′);
$out6val = shell_exec(‚gpio -g read 23′);
$out7val = shell_exec(‚gpio -g read 24′);
$out8val = shell_exec(‚gpio -g read 25′);

//Radio
$radioval = shell_exec(‚mpc | grep playing -c’);

$redvalue = shell_exec(‚echo $(($(sudo i2cget -y 1 0×07 0×4)))’);
$greenvalue = shell_exec(‚echo $(($(sudo i2cget -y 1 0×07 0×5)))’);
$bluevalue = shell_exec(‚echo $(($(sudo i2cget -y 1 0×07 0×3)))’);
$whitevalue = shell_exec(‚echo $(($(sudo i2cget -y 1 0×07 0×2)))’);

Teraz dochodzimy do funkcji odpowiedzialnych za interakcję z użytkownikiem – klikanie poszczególnych lampek. Funkcje te po wywołaniu ustawiają stan linii wyjściowej w przypadku pojedyńczej linii GPIO na przeciwny.

if (isset($_GET['out1']))
{
    if ($_GET['out1']) $out1val = 1; else $out1val = 0;
    shell_exec(‚gpio -g write 17 ‚.$out1val);
}

W następnej kolejności znajduje się formularz za pomocą którego wprowadzamy wartości z zakresu 0-255 które zostaną wpisane do układu scalonego sterującego diodą RGB. Na przytoczonym listingu znajduje się też część odpowiedzialna za włączanie poszczególnych kolorów diody RGB za pomocą pojedynczych przycisków.

<b><br><br>Sterowanie I2C KAmodRGB.<br></b>
<form action=”index.php” method=”GET”>
<table width=”200″>
<tr><td width=”50%”>red: </td>
<td width=”50%”><input type=text name=redvalue value=”<?php print „$redvalue”; ?>” size=”5″ maxlength=”3″></td></tr>
<tr><td width=”50%”>green: </td>
<td width=”50%”><input type=text name=greenvalue value=”<?php print „$greenvalue”; ?>” size=”5″ maxlength=”3″></td></tr>
<tr><td width=”50%”>blue: </td>
<td width=”50%”><input type=text name=bluevalue value=”<?php print „$bluevalue”; ?>” size=”5″ maxlength=”3″></td></tr>
<tr><td width=”50%”>white: </td>
<td width=”50%”><input type=text name=whitevalue value=”<?php print „$whitevalue”; ?>” size=”5″ maxlength=”3″></td></tr>
<tr><td width=”50%”><input type=submit value=”WyĹ›lij”></td><td width=”50%”><input type=reset></td></tr>
</table>
<table width=”200″>
<tr><td width=”20%”><input type=”button” value=”red” onClick=”document.location.href=’?redvalue=255&greenvalue=0&bluevalue=0&whitevalue=0′;” /></td>
<td width=”20%”><input type=”button” value=”green” onClick=”document.location.href=’?redvalue=0&greenvalue=255&bluevalue=0&whitevalue=0′;” /></td>
<td width=”20%”><input type=”button” value=”blue” onClick=”document.location.href=’?redvalue=0&greenvalue=0&bluevalue=255&whitevalue=0′;” /></td>
<td width=”20%”><input type=”button” value=”white” onClick=”document.location.href=’?redvalue=0&greenvalue=0&bluevalue=0&whitevalue=255′;” /></td>
<td width=”20%”><input type=”button” value=”black” onClick=”document.location.href=’?redvalue=0&greenvalue=0&bluevalue=0&whitevalue=0′;” /></td>
</table>
</form>


Rozwiązanie to ma poważną wadę polegającą na takim zjawisku, że jeżeli sterujemy Raspberrym z dwóch lub więcej urządzeń końcowych (komputery, laptopy, smartfony) to na ekranie takiego urządzenia będziemy mieć informacje o stanie linii IO z chwili uruchomienia demonstracyjnej strony www. Jeżeli w tym czasie ktoś za pomocą innego urządzenia końcowego zmienił stan linii IO włączając lub wyłączając diodę to na ekranie naszego urządzenia będziemy mieć nieaktualną informację. Ta sama uwaga dotyczy stanu rejestrów układu PCA9633 i radia internetowego. Aby zlikwidować to zjawisko należy co jakiś czas przeładować stronę www. Możemy to zrobić automatycznie dodając odpowiednią linię na stronie www.

<meta http-equiv=”Refresh” content=”5; url=index.php” />

Należy ją umieścić w sekcji Head naszej strony.

Kompletna strona www jest dostępna w postaci spakowanego pliku w załączniku

 copyright: systemypomiarowe.pl