Щоб запустити дистанційне керування через інтернет, треба встановити сервер Apache та PHP. Робимо це, виконуючи по черзі команди:
sudo
apt-get update
sudo apt-get install git-core apache2 php5 libapache2-mod-php5
Принагідно можна оновити всю систему командою:
sudo apt-get upgrade
За допомогою цього застосунку зможемо дистанційно вмикати та вимикати окремі або всі світлодіоди модуля KaMODLED8, запалювати відповідний колір світлодіода RGB у модулі KaMODRGB чи вмикати й вимикати інтернет-радіо. Застосунок дозволяє також дистанційно вимкнути пристрій Raspberry Pi.
Для керування використано бібліотеку wiringPi, встановлену й застосовану в статтях про GPIO та I2C (світлодіод RGB).
Рис. Керування через вебсторінку – вікно браузера.
На початку файлу розміщено процедури ініціалізації інтерфейсу GPIO та мікросхеми PCA9633 фірми NXP, що міститься в модулі 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 0x07 0x00 0x00');
shell_exec('sudo i2cset -y 1 0x07 0x01 0x00');
shell_exec('sudo i2cset -y 1 0x07 0x08 0xff');
Далі йдуть процедури, що зчитують поточний стан ліній GPIO, вміст регістрів мікросхеми PCA9633 та стан демона mpd, відповідального за роботу інтернет-радіо.
$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 0x07 0x4)))');
$greenvalue = shell_exec('echo $(($(sudo i2cget -y 1 0x07 0x5)))');
$bluevalue = shell_exec('echo $(($(sudo i2cget -y 1 0x07 0x3)))');
$whitevalue = shell_exec('echo $(($(sudo i2cget -y 1 0x07 0x2)))');
Тепер переходимо до функцій, відповідальних за взаємодію з користувачем, тобто натискання окремих лампочок. Ці функції після виклику встановлюють протилежний стан вихідної лінії GPIO.
if
(isset($_GET['out1']))
{
if ($_GET['out1']) $out1val = 1; else $out1val = 0;
shell_exec('gpio -g write 17 '.$out1val);
}
Далі розміщено форму, за допомогою якої вводимо значення з діапазону 0–255, що будуть записані до мікросхеми, яка керує світлодіодом RGB. У наведеному лістингу є також частина, відповідальна за вмикання окремих кольорів світлодіода RGB окремими кнопками.
<b><br><br>Керування 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="Надіслати"></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>
Це рішення має серйозну ваду: якщо керуємо Raspberry з двох або більше кінцевих пристроїв (комп'ютерів, ноутбуків, смартфонів), то на екрані кожного з них будемо бачити стан ліній IO з моменту завантаження демонстраційної вебсторінки. Якщо тим часом хтось з іншого пристрою змінив стан лінії IO, увімкнувши або вимкнувши світлодіод, на нашому екрані буде неактуальна інформація. Те саме стосується стану регістрів мікросхеми PCA9633 та інтернет-радіо. Щоб усунути це явище, слід час від часу перезавантажувати сторінку. Можемо зробити це автоматично, додавши відповідний рядок на сторінці.
<meta http-equiv="Refresh" content="5; url=index.php" />
Його слід розмістити в секції Head нашої сторінки.
Повний приклад вебсторінки доступний у вигляді запакованого файлу в додатку.
Керування пристроєм через браузер можна вбудувати безпосередньо в апаратуру – саме так працює наш контролер із вбудованим сервером HTTP. Ми виготовляємо такі пристрої на замовлення разом із програмним забезпеченням.