DevGang
Авторизоваться

Как добавить кнопку питания в свой Raspberry Pi

Всегда следует безопасно выключать Pi.

Чтобы снизить цену, Raspberry Pi не поставляется с кнопкой питания, но вы легко можете самостоятельно добавить свою! В этом руководстве вы узнаете как добавить кнопку питания, которая будет включать или выключать ваш Raspberry Pi.

Мы собираемся использовать несколько сценариев, которые будут контролировать два вывода GPIO (универсальный ввод/вывод) на вашем Pi и понимает, когда нажимается кнопка для включения или выключения Pi.

Почему важна кнопка питания Raspberry Pi?

Никогда не выдергивайте шнур питания из Pi, так как это может привести к серьезному повреждению данных (а в некоторых случаях физически повредить SD-карту). Вы можете безопасно отключить свой Pi с помощью программной команды или, что еще лучше, использовать кнопку питания (см. Это руководство). :)

Примечание:

Когда мы «выключаем» Pi, он переходит в состояние остановки, которое все еще потребляет очень небольшое количество энергии. Это похоже на работу всех современных компьютеров. В этом руководстве мы рассмотрим процесс добавления кнопки питания, которая будет как останавливать, так и выводить Pi из данног состояния. Кроме того, после того, как ваш Pi отключился, можно безопасно отключить источник питания (если хотите), не беспокоясь о повреждении данных.

Что нам необходимо:

Raspberry Pi×1
Soldering Iron×1
Electronics Kit×1
Rosin Core Solder×1
NO momentary switch×1

1. Собираем материалы

Gather your supplies

Прежде чем мы приступим к работе нужно подготовить все комплектующие.

Вам понадобится Raspberry Pi любой версии.

Вы можете подобрать Pi на Амазоне:

Если вы следуете этому руководству, вероятно, вам придется выбрать подходящую кнопку для вашего проекта. Я собираюсь использовать довольно большую кнопку, но важно, чтобы это была именно «нормально открытая кнопка моментального отклика».

Вы можете заказать кнопку на Amazon, где найдете множество небольших кнопок разных форм-факторов. Смотрите раздел tools/materials.

Также, читайте о Pi Cart: a Raspberry Pi Retro Gaming Rig in an NES Cartridge

2. Разбираемся, как работает пробуждение

Understanding the wake functionality

Нам нужно понять, как вывести Pi из состояния остановки, прежде чем мы создадим функцию выключения. В общем то замыкающие контакты 5 и 6 (GPIO3 и GND) будут выводить Pi из состояния остановки.

Самый простой способ проверить это - отключить Pi с помощью sudo shutdown -h и подключить контакты 5 и 6, соединяя их с помощью кабеля гнездо в гнездо. Нужно только на короткое время замкнуть их. Тогда вы должны обнаружить, что Pi "проснулся".

3. Создаем функциональность режима сна

Решение Wake достаточно простое, но для того, чтобы безопасно отключить Pi, нам нужно использовать программное решение. Поскольку мы знаем, что будем использовать контакты 5 и 6, чтобы разбудить Pi, давайте также используем эти контакты, чтобы выключить его. Таким образом, мы можем подключить нашу кнопку к этим контактам, и она отключит и разбудит Pi.

Нам нужно написать скрипт, который реагирует на нажатие кнопки и выключает Pi. Прежде чем мы рассмотрим сценарий, давайте обсудим несколько разных подходов. Во-первых, мы могли бы написать скрипт, который запускает бесконечный цикл и ждет изменения состояния вывода GPIO. Используя псевдокод, это может выглядеть примерно так:

while True:
   if GPIO3 is pressed:
       shutdown the pi

Хотя это будет работать и, вероятно, не будет иметь реальных проблем с производительностью, на самом деле есть способ получше. Мы можем прослушивать прерывание (обнаружение крайнего состояния). Прерывание - это изменение состояния с LOW на HIGH или HIGH на LOW. Библиотека RPi.GPIO предоставляет метод с именем wait_for_edge, который блокирует выполнение нашего скрипта до тех пор, пока не будет обнаружено прерывание. Итак, мы настроим GPIO3, и как только мы обнаружим крайнее положение, мы отключим Pi.

Во-первых, нам нужно подключиться к Pi через SSH. Затем мы будем использовать скрипт с именем listen-for-shutdown.py.

Для создания скрипта мы можем использовать нано-редактор. После подключения к Pi выполните следующую команду, чтобы создать файл с именем listen-for-shutdown.py:

sudo nano listen-for-shutdown.py

Затем вставьте следующий код в этот файл и нажмите CTRL-X для выхода и Y для сохранения при появлении запроса.

#!/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)

Далее нам нужно запустить этот скрипт при загрузке. Поэтому мы поместим скрипт в /usr/local/bin и сделаем его исполняемым:

sudo mv listen-for-shutdown.py /usr/local/bin/
sudo chmod +x /usr/local/bin/listen-for-shutdown.py

Теперь добавьте еще один скрипт с именем listen-for-shutdown.sh, который запустит/остановит наш сервис. Чтобы создать скрипт, наберите:

sudo nano listen-for-shutdown.sh

Введите следующий код в этот файл и сохраните его:

#! /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
   ;;
esacexit 0

Поместите этот файл в /etc/init.d и сделайте его исполняемым.

sudo mv listen-for-shutdown.sh /etc/init.d/
sudo chmod +x /etc/init.d/listen-for-shutdown.sh

Теперь мы зарегистрируем скрипт для запуска при загрузке:

sudo update-rc.d listen-for-shutdown.sh defaults

Поскольку скрипт не будет запущен, мы продолжим и наберем

sudo /etc/init.d/listen-for-shutdown.sh start

Примечание: Эти листинги и программные сценарии были добавлены в Github repo. Не стесняйтесь отправлять пул риквесты.

Примечание: Спасибо Tero Korpela за рекомендацию включить внутренний подтягивающий резистор!

Также читайте: How to log in to a Raspberry Pi via SSH

4. Тестируем кнопку с помощью макета

Test the button using a breadboard

Первое, что мы сделаем, это подключим кнопку и протестируем функциональность с помощью макета. Это очень простая схема, но, прежде чем мы продолжим, хорошо бы убедиться, что она работает.

Вы можете посмотреть схему с деталями ниже, но я объясню, что происходит. Я использую два соединительных кабеля мужской и женский. Я подключаю один к контакту 5 (SCL), а другой к контакту 6 (земля). Если контакт 6 уже занят чем-то другим, вы можете использовать любой другой контакт заземления. Вот отличный ресурс для определения всех ваших контактов!

Затем я подключаю их к макету с кнопкой, находящейся между ними. Поскольку кнопка нормально разомкнута, цепь будет разомкнута, пока кнопка не будет нажата. Затем, когда цепь будет завершена, нажатие либо разбудит Pi, если он находится в состоянии остановки, либо отключит его, если он проснется.

Чтобы убедиться, что это работает правильно, я войду в систему Pi через SSH.

ssh pi@raspberrypi

Затем, когда я нажимаю кнопку, я подтверждаю, что моя сессия потеряна. В более сложной реализации я могу запросить подтверждение, что сеть Pi отключена с помощью arp-scan.

sudo arp-scan --interface=en0 --localnet

В этом руководстве я не стану вдаваться в подробности того, как использовать arp-scan, но если вы используете правильный интерфейс, все должно работать.

Вы можете проверить вывод arp-scan и убедиться, что Raspberry Pi не подключен к сети.

Затем нажмите кнопку еще раз, чтобы разбудить его. Если вы подождете несколько секунд, Pi должен вернуться. Вы можете проверить снова, используя команду arp-scan. Если Pi включен, вы увидите вывод, похожий на этот:

192.168.1.254        20:3d:66:44:c6:70 (Unknown)
192.168.1.181            b8:27:eb:79:49:f2  Raspberry Pi Foundation
192.168.1.251         58:82:a8:7e:66:36 (Unknown)

Теперь вы можете снова подключиться через SSH!

Читайте также:How to log in to a Raspberry Pi via SSH

5. Финальный цикл разработки

Make our final circuit

Теперь пришло время подключить кнопку, которую мы собираемся использовать для проекта. Я собираюсь использовать перемычку, чтобы кнопку можно было легко отсоединять от Pi. Я припаяю его с другой стороны кнопки.

Замечания:

Если вы используете Pi без припаянного к нему заголовка (контактов) GPIO, например, Pi Zero, вы можете припаять непосредственно к сквозным отверстиям GPIO Pi Zero.

Далее: добавьте светодиодный индикатор питания к вашему Pi

Если вы хотите увидеть, в каком состоянии находится ваш Pi (и когда его можно безопасно отключить) после нажатия кнопки питания, вы также можете добавить простой светодиодный индикатор состояния Pi.

Также читайте: Build a simple Raspberry Pi LED power/status indicator

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу