Оглавление:

Создайте лучшую кнопку питания Raspberry Pi: 4 шага
Создайте лучшую кнопку питания Raspberry Pi: 4 шага

Видео: Создайте лучшую кнопку питания Raspberry Pi: 4 шага

Видео: Создайте лучшую кнопку питания Raspberry Pi: 4 шага
Видео: Подробный обзор набора «Малина» v4 Raspberry Pi 4 2024, Июль
Anonim
Image
Image

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

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

Но кому нужна такая кнопка? Если вы немного ботаник, как я, или просто начинающий ботаник, вы всегда можете войти в свой Pi локально или по сети и набрать sudo shutdown -h now. Но если вы создаете проект для нетехнических пользователей, этого просто не пойдет. Правда, вы почти всегда можете уйти, просто вытащив шнур питания, но обратите внимание, я сказал, что почти всегда! Рано или поздно удача заканчивается. Только на прошлой неделе у меня была SD-карта, хотя я никогда не узнаю, действительно ли это было из-за резкого отключения питания.

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

Я не собираюсь давать вам готовый продукт с красиво напечатанным на 3D-принтере корпусом, как многие другие Instructables. Каждый будет использовать его по-разному или захотеть включить его в свой собственный проект. Скорее, я настрою вас на технологию, которую вы можете добавить в свой проект, будь то медиацентр, устройство IoT или что-нибудь еще.

(В видео я демонстрирую это с Pi Zero v1.2 и монитором, который я сделал из переделанного экрана ноутбука и контроллера с Дальнего Востока.)

Шаг 1: Дизайн

Как это работает
Как это работает

Вот что сделает за вас моя кнопка питания:

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

Компоненты очень дешевые. Все что тебе нужно это:

  • ATTiny85 (чип, совместимый с Arduino)
  • 3 резистора: 2 x 330 Ом и 1 x 10 кОм
  • 1 светодиод - я предлагаю зеленый или синий, но это ваш выбор
  • макетная плата и перемычки, или картон, или как вы хотите его построить.

Шаг 2: как это работает

Как и все кнопки питания Pi, эта переводит вывод GPIO в низкое состояние, чтобы сигнализировать о запросе выключения вспомогательной программе, запущенной на Pi. Я использовал GPIO4 (контакт 7), но вы можете использовать любой другой контакт.

Единственный способ узнать, что Pi завершил отключение, - это наблюдать за контактом 8 TxD, который затем становится низким. Это зависит от того, включена ли последовательная консоль, которая включена по умолчанию. Фактически, TxD будет регулярно повышаться и понижаться, пока он используется в качестве последовательной консоли, но он никогда не будет понижаться более чем на 30 мс за раз, даже при самой низкой общей скорости передачи данных. Его все еще можно использовать для последовательной консоли, поскольку мы просто пассивно смотрим на него.

Чтобы перезагрузиться, нам нужно ненадолго подтянуть SCL1 (вывод 5) к низкому уровню. Этот вывод используется любыми устройствами I2C (включая мой midi-интерфейс), но после запуска загрузки мы оставляем его в покое.

Большая часть сложности заключается в скетче Arduino, который мы загружаем в ATTiny85. Это реализует «конечный автомат» - очень полезный и мощный способ кодирования любой проблемы, которая может быть представлена рядом «состояний». Точно так же работает стиральная машина. Состояния представляют собой этапы цикла стирки, и каждый из них определяет, что машина должна делать в этот момент (запускать двигатели или насосы, открывать или закрывать клапаны) и какие входы датчиков (температура, уровень воды, таймеры). определить, когда перейти к следующему состоянию и какое следующее состояние выбрать.

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

В нашем случае у нас есть 6 состояний, которые я назвал ВЫКЛ, ЗАПРОС ЗАГРУЗКИ, ЗАГРУЗКА, ЗАПУСК, ЗАПРОС ВЫКЛЮЧЕНИЯ и ВЫКЛЮЧЕНИЕ. (После ВЫКЛЮЧЕНИЯ он возвращается в положение ВЫКЛЮЧЕНО.) Они обозначаются комментариями в скетче, и для каждого из них в дальнейших комментариях говорится, что он должен делать и какие события переместят его в другое состояние.

Вспомогательная программа, работающая на Pi, немного сложнее, чем для большинства кнопок выключения. Он реагирует на длинный низкий импульс на выводе GPIO, инициируя выключение, но он также реагирует на короткий импульс сам по себе, ненадолго подтягивая вывод GPIO к низкому уровню. Таким образом ATTiny85 может определить, что он работает, и поэтому может перейти из состояния ЗАГРУЗКА в состояние РАБОТА.

Шаг 3: Создание демонстрационного прототипа

Создание демонстрационного прототипа
Создание демонстрационного прототипа
Создание демонстрационного прототипа
Создание демонстрационного прототипа
Создание демонстрационного прототипа
Создание демонстрационного прототипа

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

Шаг 4: Программирование ATTiny85

Эскиз Arduino и вспомогательная программа прилагаются к этому шагу. В папке с эскизами Arduino создайте папку PiPwr и скопируйте в нее файл PiPwr.ino. Запустив Arduino IDE, вы найдете ее в своем альбоме для рисования.

Есть несколько способов программирования ATTiny85. Если у вас установлен загрузчик, вы можете использовать плату разработки ATTiny85, которая стоит всего несколько фунтов. Он подключается к вашему ПК через порт USB. Я использовал Hidiot, который по сути такой же, но с областью прототипирования.

В Arduino IDE в разделе File - Preferences добавьте

digistump.com/package_digistump_index.json

к URL-адресам менеджера дополнительных досок.

В разделе «Инструменты - Доска» вы должны увидеть несколько опций Digispark. Выберите Digispark (по умолчанию - 16,5 МГц).

Если у вашего ATTiny85 нет загрузчика (или вы не знаете), вы можете получить программатор AVR ISP за несколько фунтов. Или вы можете использовать Arduino Uno или более дешевый Pro Mini или Nano в качестве программиста. Google по запросу "arduino as isp attiny85" (без кавычек) для получения инструкций.

Если вы хотите изменить эскиз, вы найдете его полностью прокомментированным и, надеюсь, легким для понимания. Для отладки намного проще использовать Arduino Pro Mini или Nano. Раскомментируйте serial.begin () в Setup и операторы печати в loop (), чтобы увидеть шаги, которые он выполняет с помощью монитора последовательного порта. В источнике есть альтернативные определения контактов, закомментированные, для Uno, Pro Mini или Nano.

На своем Raspberry Pi скопируйте файл shutdown_helper.py в папку / etc / local / bin и установите его как исполняемый с помощью команды

sudo chmod + x /usr/local/bin/shutdown_helper.py

Теперь отредактируйте файл /etc/rc.local в своем любимом редакторе. (Вам нужно будет сделать это как root.) Перед последней строкой (выход 0) вставьте строку

nohup /usr/local/bin/shutdown_helper.py &

Перезагрузитесь, и вспомогательная программа запустится автоматически.

Рекомендуемые: