Работа с GPIO Raspberry Pi на PHP, пример.

Однажды мне понадобилось удаленное управление одним девайсом. Так как в интернете успешно трудится моя Raspberry Pi, было принято решение возложить эту функцию на нее, ну а результат выложить тут. Самое главное научиться мигать светодиодом, а потом можно что хочешь навесить вместо него.

Для реализации проекта понадобится:
1.Светодиод, любой слаботочный, индикаторный.
2.Резистор на 330 Ом - 1 кОм.
3.Начальные знания PHP и HTML.
4.Ну и само собой малина с wheezy-raspbian и сервером PHP.

Начнем с распиновки. Всего есть две ревизии распиновок, отличаются они незначительно и большинство пинов имеют одинаковое назначение. Пример будет описан для GPIO4. Соблюдайте осторожность, порты ввода-вывода подключены прямо к центральному процессору, по неосторожности можно сжечь всю малину. Также не рекомендуется использовать резистор менее 300 Ом.

Raspberry Pi GPIO

Unix системах все является файлами включая GPIO, записывая значения в специальные файлы можно изменять конфигурации и состояние портов ввода-вывода. Но по умолчанию этих файлов нет, и их нужно создать. Мало того что создавать их имеет право только root, так еще они удаляются после перезагрузки. Зато есть возможность делать это автоматически при старте, просто прописав команды файле /etc/rc.local , все что там прописано выполняется при загрузке системы.
Открываем этот файл, для этого пишем в консоли:

sudo nano /etc/rc.local

Открывается редактор, прописываем туда вот такие строчки:

echo 4 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio4/direction
chmod 777 /sys/class/gpio/gpio4/value

Первая создает файлы для GPIO4, вторая настраивает его на выход. В файл состояния порта тоже может писать только root. Третья строчка разрешает запись в этот файл всем. Сохраняем его и перезагружаемся. В принципе можно и не перезагружаться, нужно просто вбить эти команды в консоль. При следующих загрузках они будут выполнятся автоматически.

Теперь у нас всегда будет файл, в который можно писать состояние порта стандартными стредствами PHP. Например:

// Открываем файл GPIO4 для записи в текстовом режиме
$fp = fopen('/sys/class/gpio/gpio4/value', 'wt');

// Запись в файл (GPIO4) лог 0
$test = fwrite($fp, "0");

// Запись в файл (GPIO4) лог 1
$test = fwrite($fp, "1");

Теперь рабочий пример который работает на этой страничке. Ничего сложного здесь нет, если есть опыт работы с формами. Единственное это здесь используется, событие OnChange='user_mode.submit();' которое отправляет форму после ее изменения.

<FORM method="post" name='user_mode'>

<input name="LED" type="radio" value="0" OnChange='user_mode.submit();' <?
if (isset($_REQUEST["LED"]))
{ if ($_REQUEST["LED"] == 0){echo checked;}}
?>> GPIO4 = 0,

<input name="LED" type="radio" value="1" OnChange='user_mode.submit();' <?
if (isset($_REQUEST["LED"]))
{ if ($_REQUEST["LED"] == 1){echo checked;}}
?>> GPIO4 = 1

<?php
$fp = fopen('/sys/class/gpio/gpio4/value', 'wt'); // Текстовый режим

if ($_REQUEST["LED"] == 0)
{
$test = fwrite($fp, "0"); // Гасим светодиод
}
else if ($_REQUEST["LED"] == 1)
{
$test = fwrite($fp, "1"); // Зажигаем светодиод
}
?>
</FORM>

Результат:
Тут можно поклацать кнопочки, а у меня будет мигать светодиод :)

Разделы Сайта