Прикручиваем выключение Raspberry PI по кнопке

FRN линки на базе мини компьютеров Raspberry Pi, OrangePi и т.п.
Ответить
Аватара пользователя
RA9WUT
Сообщения:26
Зарегистрирован:19:06, 26 фев 2015, Чт
Откуда:МО, Путилково.
Прикручиваем выключение Raspberry PI по кнопке

Сообщение RA9WUT » 22:57, 18 авг 2016, Чт

Кнопка выключения raspberry pi 2

Сегодня будем делать кнопку, которая будет отвечать за выключение raspberry pi 2 и будет подсоединена к GPIO.
Все действия, описанные в этой статье и на сайте вы выполняете на свой страх и риск, за причинённый ущерб ответственность несёте сами. Если согласны поэкспериментировать с raspberry pi, то вперёд!
Сам я в этих GPIO абсолютно не разбираюсь, поэтому начну всё с нуля. В результате мы получим первую рабочую кнопку с полезной функцией. На изображении все GPIO разъемы нашего raspberry pi 2.

Дальше берём кнопку примерно такую как на вкл/выкл обычный стационарный ПК. Я именно такую и взял со старого корпуса обычного ПК, она раньше была reset’ом. Кнопка соединена с двумя проводами которые втыкались в материнскую плату опять же обычного компьютера.

Raspberry pi в момент подсоединения проводков и устройств должен быть выключен, так что выключаем.
sudo shutdown -h now

Один провод от кнопки подсоединяем к 38-ому разъему GPIO (см номер в кружке на первом изображении), а второй провод от кнопки подключаем к 40-ому разъему (см номер в кружке на первом изображении).
Когда подсоединили, включаем raspberry pi в розетку, потом подключаемся к нему по ssh и создаём папочку, где будем скрадывать свои скриптики:

sudo mkdir -p /script/gpio
sudo chmod -R 0777 /script
cd /script/gpio
sudo nano shdown.sh

вписываем туда (почти каждую строчку я пояснил для себя и для читателей, так как я это понимаю) :

#! /bin/bash

# 1) Говорим ядру, что мы хотим использовать GPIO20
# Cмотрим на первую картинку статьи и видим, что разъему под номером 38
# соответствует GPIO 20
# после этой команды в директории /sys/class/gpio
# появится директория gpio20, в которой в свою очередь
# появятся файлы active_low, device, direction, edge, subsystem, uevent, value
echo "20" > /sys/class/gpio/export
#
# 2) Указываем, что линия будет выходом
echo "out" > /sys/class/gpio/gpio20/direction
#
# 3) Установим логический 1 для значения исходящей (out) линии.
# Вход (in) можно читать, а на выход (out) задавать значение
echo "1" > /sys/class/gpio/gpio20/value

# 4) Говорим ядру, что мы хотим использовать GPIO21
# смотрим на первую картинку и видим, что разъему под номером 40
# соответствует GPIO21
echo "21" > /sys/class/gpio/export
#
# 5) Указываем, что линия будет входом
echo "in" > /sys/class/gpio/gpio21/direction

# Далее идёт логика:
while ( true )
do
# 6) Если контакт №40(GPIO21) получает логическое значение 1
# (а он его получит от контакта №38(gpio20), когда нажмётся физическая кнопка и цепь замкнётся)
if [ $(</sys/class/gpio/gpio21/value) == 1 ]
then
# тогда
# 7) освобождаем(unexport) порт GPIO20(порядковый номер 38)
echo "20" > /sys/class/gpio/unexport
# 8) освобождаем(unexport) порт GPIO21(порядковый номер 40)
echo "21" > /sys/class/gpio/unexport
# 9) подаём команду на выключение raspberry pi (shutdown -h now)
shutdown -h now "The system is turned off using the GPIO"
fi
# 10) в противном случае приостанавливаем выполнение освобождения
# портов и выключение на 0.02 секунды
sleep 0.02
done


Делаем его исполняемым:
sudo chmod +x /script/gpio/shdown.sh

Пробуем запустить:
sudo /script/gpio/shdown.sh

Потом жмём с небольшой задержкой в 1 секунду физическую кнопку, которую мы подключили к разъемам 38 и 40. Raspberry pi выключится.
Закинем это дело в автозапуск, чтобы не надо было каждый раз после перезагрузки запускать вручную sudo /script/gpio/shdown.sh. Для это выполняем:
sudo nano /etc/rc.local
Вписываем перед «exit 0» строчку:
sudo /script/gpio/shdown.sh &

Всё, после перезагрузки будет выполняться наш скриптик shdown.sh, который отвечает за выключение нашего raspberry pi 2 с помощью обычной физической кнопки.
Вложения
gpio_raspberry-pi-2-624x234.jpg
gpio_raspberry-pi-2-624x234.jpg (82.88КБ)1722 просмотра
RA9WUT/3
Alinco DR-130, DR-510, DJ-191. Bafeng UV-5R, Motorola Radius CP50, Softrock RXTX SDR 40/30/20 метров

Аватара пользователя
R2DFV
Сообщения:193
Зарегистрирован:9:41, 18 авг 2014, Пн

Re: Прикручиваем выключение Raspberry PI по кнопке

Сообщение R2DFV » 0:49, 23 авг 2016, Вт

Круть! Спасибо!

Ответить

Вернуться в «FRN линки на базе мини компьютеров»