Ещё один способ прикручивания кнопок управления к RasPi, без использования Pyton-а. Инфу брал
отсюда.
Подключаем кнопки, с подтяжкой к +3,3V, по схеме, которую выкладывал Андрей в
самом начале темы.
Лучше использовать последние пины, начиная с 29 выхода, т.к. выходы с 1 по 28 могут быть использованы для подключения различной периферии к RasPi. Я использовал 35,36,37,38 пины и резисторы ставил на 10 кОм.
Создадим папку, где будет лежать наш скрипт, в принципе этого можно и не делать, а хранить скрипт в папке пользователя.
Код:
sudo mkdir -p /script/gpio
Меняем права доступа к папке и всему её содержимому:
Код:
sudo chmod -R 0777 /script
Переходим в эту папку:
И создаём в ней файл скрипта, под названием "buttons.sh":
В открывшемся блокноте вводим следующий код:
Скрытый текст
Код:
#! /bin/bash
# 1) Говорим ядру, что мы хотим использовать пины 36,35,38,37(GPIO16, GPIO19, GPIO20, GPIO26)
echo "16" > /sys/class/gpio/export
echo "19" > /sys/class/gpio/export
echo "20" > /sys/class/gpio/export
echo "26" > /sys/class/gpio/export
# 2) Указываем, что они будут работать, как входы
echo "in" > /sys/class/gpio/gpio16/direction
echo "in" > /sys/class/gpio/gpio19/direction
echo "in" > /sys/class/gpio/gpio20/direction
echo "in" > /sys/class/gpio/gpio26/direction
# Далее идёт логика:
while ( true )
do
# 3) Если контакт №36(GPIO16) получает логическое значение 0
# (а он его получит, когда нажмётся кнопка и цепь замкнётся на GND)
if [ $(</sys/class/gpio/gpio16/value) == 0 ]
then
# тогда
# освобождаем(unexport) порт GPIO16(порядковый номер 36)
echo "16" > /sys/class/gpio/unexport
# освобождаем(unexport) порт GPIO19(порядковый номер 35)
echo "19" > /sys/class/gpio/unexport
# освобождаем(unexport) порт GPIO20(порядковый номер 38)
echo "20" > /sys/class/gpio/unexport
# освобождаем(unexport) порт GPIO26(порядковый номер 37)
echo "26" > /sys/class/gpio/unexport
# подаём команду на выключение raspberry pi (shutdown -h now)
shutdown -h now
fi
# в противном случае приостанавливаем выполнение освобождения
# портов и выключение на 0.02 секунды
sleep 0.02
# 4) Если контакт №38(GPIO20) получает логическое значение 0
# (а он его получит, когда нажмётся кнопка и цепь замкнётся на GND)
if [ $(</sys/class/gpio/gpio20/value) == 0 ]
then
# тогда
# освобождаем(unexport) порт GPIO16(порядковый номер 36)
echo "16" > /sys/class/gpio/unexport
# освобождаем(unexport) порт GPIO19(порядковый номер 35)
echo "19" > /sys/class/gpio/unexport
# освобождаем(unexport) порт GPIO20(порядковый номер 38)
echo "20" > /sys/class/gpio/unexport
# освобождаем(unexport) порт GPIO26(порядковый номер 37)
echo "26" > /sys/class/gpio/unexport
# подаём команду на перезагрузку raspberry pi (shutdown -r now)
shutdown -r now
fi
# в противном случае приостанавливаем выполнение освобождения
# портов и выключение на 0.02 секунды
sleep 0.02
# 5) Если контакт №35(GPIO19) получает логическое значение 0
# (а он его получит, когда нажмётся кнопка и цепь замкнётся на GND)
if [ $(</sys/class/gpio/gpio19/value) == 0 ]
then
# тогда
# занимаем(export) порт GPIO26(порядковый номер 37), если он был освобождён до этого, при нажатии кнопки
echo "26" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio26/direction
# освобождаем(unexport) порт GPIO19(порядковый номер 35)
echo "19" > /sys/class/gpio/unexport
# подаём команду на остановку сервера Rocrail(sudo /etc/init.d/rocraild stop)
sudo /etc/init.d/rocraild stop
fi
# в противном случае приостанавливаем выполнение освобождения
# портов и выключение на 0.02 секунды
sleep 0.02
# 6) Если контакт №37(GPIO26) получает логическое значение 0
# (а он его получит, когда нажмётся кнопка и цепь замкнётся на GND)
if [ $(</sys/class/gpio/gpio26/value) == 0 ]
then
# тогда
# занимаем(export) порт GPIO19(порядковый номер 35), если он был освобождён до этого, при нажатии кнопки
echo "19" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio19/direction
# освобождаем(unexport) порт GPIO26(порядковый номер 37)
echo "26" > /sys/class/gpio/unexport
# подаём команду на запуск сервера Rocrail(sudo /etc/init.d/rocraild start)
sudo /etc/init.d/rocraild start
fi
# в противном случае приостанавливаем выполнение освобождения
# портов и выключение на 0.02 секунды
sleep 0.02
done
Скрипт писал, как понял это сам, может он и не идеален.
Сохраняем изменения и закрываем файл.
Теперь сделаем файл исполняемым:
Код:
sudo chmod +x /script/gpio/buttons.sh
и запихиваем его в автозагрузку:
Код:
sudo nano /etc/rc.local
Вписываем перед «exit 0» строчку:
Код:
sudo /script/gpio/buttons.sh &
Вот скрипты, которые будут делать тоже самое, но только через запуск скрипта в консоли:
1. Выключение RasPi
Сохраняем файл скрипта в папке пользователя под именем down
Для этого вводим команду:
пишем туда следующий код
Код:
#!/bin/sh
sudo shutdown -h -P now
2. Запуск службы Rocrail
Сохраняем файл скрипта в папке пользователя под именем r
Для этого вводим команду:
пишем туда следующий код
Код:
#!/bin/sh
sudo /etc/init.d/rocraild start
3. Остановка службы Rocrail
Сохраняем файл скрипта в папке пользователя под именем s
Для этого вводим команду:
пишем туда следующий код
Код:
#!/bin/sh
sudo /etc/init.d/rocraild stop
Меняем права доступа к файлам:
Код:
chmod +rx down
chmod +rx r
chmod +rx s
Для запуска скрипта вводим ./имя скрипта.
---------- Сообщение добавлено в 17:44 ---------- Предыдущие сообщение было в 17:41 ----------
Цитата:
Сообщение от shalex
Круто, теперь, я так понимаю, роутер не нужен.
Вопрос, как тогда подключать ту же z21 по ethernet? Кросс-кабелем?
|
Не-не.... без роутера не обойтись, в случае с z21. Сейчас RasPi получает инет по проводу, а раздаёт по воздуху.
---------- Сообщение добавлено в 17:50 ---------- Предыдущие сообщение было в 17:44 ----------
Цитата:
Сообщение от shalex
поделитесь ссылкой, пожалуйста на приобретенную "малину"?
|
Брал на Али, вот у
этого продавца. Приехало достаточно быстро, с учётом того, что закупался 11.11. Посылка идёт с международным треком и нормально отслеживается. В начале января на GearBest была распродажа с купонами от Казус форума, там сама плата 26 баксов стоила. Прикупил по случаю, ещё не приехала.