Работа с GPIO Raspberry Pi на PHP, пример.
Однажды мне понадобилось удаленное управление одним девайсом. Так как в интернете успешно трудится моя Raspberry Pi, было принято решение возложить эту функцию на нее, ну а результат выложить тут. Самое главное научиться мигать светодиодом, а потом можно что хочешь навесить вместо него.
Для реализации проекта понадобится:
1.Светодиод, любой слаботочный, индикаторный.
2.Резистор на 330 Ом - 1 кОм.
3.Начальные знания PHP и HTML.
4.Ну и само собой малина с wheezy-raspbian и сервером PHP.
Начнем с распиновки. Всего есть две ревизии распиновок, отличаются они незначительно и большинство пинов имеют одинаковое назначение. Пример будет описан для GPIO4. Соблюдайте осторожность, порты ввода-вывода подключены прямо к центральному процессору, по неосторожности можно сжечь всю малину. Также не рекомендуется использовать резистор менее 300 Ом.
Unix системах все является файлами включая GPIO, записывая значения в специальные файлы можно изменять конфигурации и состояние портов ввода-вывода.
Но по умолчанию этих файлов нет, и их нужно создать. Мало того что создавать их имеет право только root, так еще они удаляются после перезагрузки.
Зато есть возможность делать это автоматически при старте, просто прописав команды файле /etc/rc.local , все что там прописано выполняется при загрузке системы.
Открываем этот файл, для этого пишем в консоли:
Открывается редактор, прописываем туда вот такие строчки:
echo out > /sys/class/gpio/gpio4/direction
chmod 777 /sys/class/gpio/gpio4/value
Первая создает файлы для GPIO4, вторая настраивает его на выход. В файл состояния порта тоже может писать только root. Третья строчка разрешает запись в этот файл всем.
Сохраняем его и перезагружаемся. В принципе можно и не перезагружаться, нужно просто вбить эти команды в консоль. При следующих загрузках они будут выполнятся автоматически.
Теперь у нас всегда будет файл, в который можно писать состояние порта стандартными стредствами PHP. Например:
$fp = fopen('/sys/class/gpio/gpio4/value', 'wt');
// Запись в файл (GPIO4) лог 0
$test = fwrite($fp, "0");
// Запись в файл (GPIO4) лог 1
$test = fwrite($fp, "1");
Теперь рабочий пример который работает на этой страничке. Ничего сложного здесь нет, если есть опыт работы с формами. Единственное это здесь используется, событие OnChange='user_mode.submit();' которое отправляет форму после ее изменения.
<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>
Результат:
Тут можно поклацать кнопочки, а у меня будет мигать светодиод :)