UPD: Поскольку крупнейшая IT-компания не способна добавить инструменты для отображения кода в свой "Дзен", статьи буду, в первую очередь, выкладывать на teletype.in
Эта статья с на teletype: https://teletype.in/@electronic_fields_notes/ZTDkjbwjFj4UodgJ
# Сборка и подключение.
Схему расположения выводов можно посмотреть на сайте pinout.xyz
Монтажная схема:
Принципиальная схема:
Кнопку подключаем к физическим выводам 5 (SCL - GPIO3) и 6 (GND). Светодиод индикатора подключаем через резистор 330 Ом к физическим выводам 8 (TXD - UART0) и 6 (GND).
# Настройка кнопки
## Установка с помощью скрипта
1. Скачиваем скрипт:
git clone https://github.com/Howchoo/pi-power-button.git
2. Запускаем установку:
./pi-power-button/script/install
3. Для удаления используем команду:
./pi-power-button/script/uninstall
## Ручная установка
Создаем два скрипта
1. Первый скрипт "listen-for-shutdown.py":
sudo nano listen-for-shutdown.py
2. Содержание первого скрипта:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.wait_for_edge(3, GPIO.FALLING)
subprocess.call(['shutdown', '-h', 'now'], shell=False)
3. Помещаем его в "/usr/local/bin" и делаем исполняемым:
sudo mv listen-for-shutdown.py /usr/local/bin/
sudo chmod +x /usr/local/bin/listen-for-shutdown.py
4. Создаем второй скрипт "listen-for-shutdown.sh":
sudo nano listen-for-shutdown.sh
5. Содержание второго скрипта:
#!/bin/sh
### BEGIN INIT INFO
# Provides: listen-for-shutdown.py
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting listen-for-shutdown.py"
/usr/local/bin/listen-for-shutdown.py &
;;
stop)
echo "Stopping listen-for-shutdown.py"
pkill -f /usr/local/bin/listen-for-shutdown.py
;;
*)
echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}"
exit 1
;;
esac
exit 0
6. Сохраняем второй скрипт в "/etc/init.d" и делаем исполняемым:
sudo mv listen-for-shutdown.sh /etc/init.d/
sudo chmod +x /etc/init.d/listen-for-shutdown.sh
7. Регистрируем в автозагрузку:
sudo update-rc.d listen-for-shutdown.sh defaults
8. Запускаем скрипт:
sudo /etc/init.d/listen-for-shutdown.sh start
# Настройка индикатора.
Для Raspberry Pi версий старше 3 необходимо переопределить пин для отображения активности на GPIO в файле "/boot/config.txt":
dtoverlay=pi3-act-led,gpio=14
dtparam=act_led_trigger=default-on
Наиболее часто используемые варианты пульсаций:
default-on - Включено по умолчанию
heartbeat - Мигнуть сердцебиением (1-0-1-00000)
timer - Мигнуть 1 раз в секунду
mmc0 - Мигнуть при активности mmc0 (SD Card)
cpu0 - Мигнуть при использовании cpu0
rfkill0 - Мигнуть при активности wifi
Все варианты пульсаций:
none - Нет тригера
kbd-scrolllock - Клавиатура scroll lock
kbd-numlock - Клавиатура num lock
kbd-capslock - Клавиатура caps lock
kbd-kanalock - Клавиатура kana lock
kbd-shiftlock - Клавиатура shift
kbd-altgrlock - Клавиатура altgr
kbd-ctrllock - Клавиатура ctrl
kbd-altlock - Клавиатура alt
kbd-shiftllock - Клавиатура left shift
kbd-shiftrlock - Клавиатура right shift
kbd-ctrlllock - Клавиатура left ctrl
kbd-ctrlrlock - Клавиатура right ctrl
timer - Мигнуть 1 раз в секунду
oneshot - Мигнуть единожды
heartbeat - Мигнуть сердцебиением (1-0-1-00000)
backlight - Включена подсветка
gpio - Мигнуть когда высокий уровень определенного GPIO
cpu0 - Мигнуть при использовании cpu0
cpu1 - Мигнуть при использовании cpu1
cpu2 - Мигнуть при использовании cpu2
cpu3 - Мигнуть при использовании cpu3
default-on - Включено по умолчанию
panic - Мигнуть при kernel panic
mmc0 - Мигнуть при активности mmc0 (первичный интерфейс SD Card)
mmc1 - Мигнуть при mmc1 (вторичный интерфейс SD Card)
rfkill0 - Мигнуть при активности wifi
rfkill1 - Мигнуть при активности bluetooth
# Ссылки
- Демонстрация работы на https://www.youtube.com/watch?v=Z0LrG2ldfzI
- 3d-модель корпуса на сайте https://www.thingiverse.com/thing:4357153
Оригинальные статьи на howchoo.com: