systemypomiarowe.pl

Великий план змонтованої плати P161002 з мікросхемами Microchip у SMD-корпусах Візуалізація плати з мікроконтролером STM32, роз'ємом картки SD і модулем GPS Тривимірна візуалізація плати з реле, зумером і роз'ємами Фрагмент принципової схеми з вимірювальним підсилювачем INA326 та АЦП MCP3304 Тривимірна візуалізація щільно змонтованої плати модуля зв'язку Передня панель пристрою з підписаними кнопками, регуляторами гучності та динаміком Технічне креслення передньої панелі з розташуванням кнопок і регуляторів Змонтована плата з мікроконтролером PIC18F2550, роз'ємом USB і підлаштовними резисторами Вихідний код інтерфейсу TouchGFX для STM32 у редакторі Visual Studio Code Топологія друкованої плати з шарами та розташуванням компонентів
❮
❯
Головна Пропозиція

Raspberry Pi – застосунок PHP

Щоб запустити дистанційне керування через інтернет, треба встановити сервер 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 Raspberry Pi

Рис. Керування через вебсторінку – вікно браузера.

На початку файлу розміщено процедури ініціалізації інтерфейсу 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. Ми виготовляємо такі пристрої на замовлення разом із програмним забезпеченням.



Copyright ©2026 systemypomiarowe.pl.