Linux Mint    Ubuntu    openSUSE    Asterisk    FreeBSD    Android    Nokia N900    Игры в Linux
 Linux Mint    Ubuntu     openSUSE     Asterisk     FreeBSD     Android     N900     Games

Raspberry и GPIO

Raspberry Pi
В свободное время занимаюсь автоматизацией некоторых домашних процессом, так называемым "Умным домом". Для основы использую MajorDoma на базе Raspberry Pi. И когда все программные хотелки уже реализовались, пришло время заняться аппаратной частью.

Самое привлекательно в Raspberry - это управлемые цифровые порты GPIO. С помощью которых можно принимать внешние сигналы (например от кнопок) и отправлять (например на реле). Что дает неограниченный полет для фантазии использования. 

Но на первое время будет достаточно хотя бы включать/выключать различные реле для управления светом и другими электро приборами в доме.

Мое описание будет не с самых истоков, поэтому представим что у нас уже есть Raspberry с установленным Raspbian, а также доступ к нему по ssh.

Как же теперь управлять портами?

Проще всего познакомиться с работой GPIO используая средства файловой системы Linux или точней интерфейса Sysfx. 

Управления портами происходит изменениями в файлах.

Сразу скажу, что все команды нужно запускать от root пользователя. При чем sudo здесь не поможет. Поэтому начинаем работу с команды:

sudo su

И дальше уже используемые следующие команды:

Занимаем нужный порт:

echo НОМЕР_ПОРТА > /sys/class/gpio/export

После чего появится папка /sys/class/gpio/gpioXX/

Устанавливаем направление порта (out - для подачи сигналов, in - для приема):

echo "out" > /sys/class/gpio/gpioXX/direction

Посылаем логический 0 или 1 на порт (то есть активируем/деактивируем):

echo 1 > /sys/class/gpio/gpioXX/value

Смотрим состояние порта:

cat /sys/class/gpio/gpioXX/value

Освобождаем порт командой:

echo НОМЕР_ПОРТА > /sys/class/gpio/unexport

Помимо Sysfs существуют несколько других способов управлять портами, например пакет RPIO.

Особенность многих мануалов в том, что слепо копируя команды все равно сталкиваешься с какими-то проблемами. Бывает из-за раличных версий, бывает от того, что какие-то компоненты в системе уже установлены и указан не полный список. 

Похоже это описание будет таким же. Потому что пришлось что-то удалять, переустанавливать и т.п. Но в целом подход такой.

Ставим python и недостающие компоненты (может они не все нужны - но опытным путем путем мне пришлось воткнуть все).

sudo apt-get install python python-dev python-pip python-setuptools
sudo easy_install -U RPIO

Попробуем поставить RPIO с GitHub, если не получилось сразу (как у меня).

git clone https://github.com/metachris/RPIO.git
cd RPIO
sudo python setup.py install

Проверяем все ли в порядке и смотрим сведения о системе.

sudo rpio --sysinfo

Запустив rpio-curses можем наглядно посмотреть на порты и при желании переключить иих в другое положение.

sudo rpio-curses

rpio-curses

В целом вот так мы теперь можем управлять портами и подключить к ним, что-то наподобии вот такого реле:

Но это отдельная тема с кучей различных вариантов, в зависимости от желаний.

style="display:block; text-align:center;"
data-ad-format="fluid"
data-ad-layout="in-article"
data-ad-client="ca-pub-3895791138238194"
data-ad-slot="7332120846">

Vasiliy_LiGHT аватар

Так-то на Хабре/ГТ полно таких статей. Собственно, очень похожая статья: https://geektimes.ru/post/255050/

"появитЬся папка" - папка (что сделает?) появится :)

jekson аватар

да, статьей то много. Но лично мне пришлось перечитать штук 10 чтобы реализовать это. Где-то одно упущено, где-то другое. А насчет подключений подобных реле вообще нет единого мнения. Кто-то развязку с транзисторами делает, кто-то просто сопротивление ставит. Но с учетом того, что здесь уже есть опторазвязка - то оно работает без дополнительных приблуд. Хотя сопротивление все равно не помешает. Чуть позже распишу, что сделал дальше.