четверг, 25 декабря 2014 г.

Кнопка для выключения Raspberry Pi


Кнопка для Raspberry Pi
Чтобы не дергать питание и не отключать с помощью SSH.
Кнопка подключается к 6 и 16 пину.


В автозагрузку прописываем скрипт:

  • #!/usr/bin/env python2.7
    import RPi.GPIO as GPIO
    import os
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.wait_for_edge(23, GPIO.FALLING)
    os.popen("sudo halt")
    GPIO.cleanup()

При нажатии на кнопку выполняется команда sudo halt.

10 комментариев:

  1. Спасибо большое, как раз искал решение!
    Два вопроса (новичек зеленый):
    1. Как поставить скрипт в автозагрузку?
    2. После запуска скрипта (poweroff.py) вручную, пропадает командная строка, хотя "кнопка выключения" работает корректно.
    Спасибо!

    ОтветитьУдалить
  2. 1.Вот тут написано. На английском,но и без перевода все понятно. http://raspberrywebserver.com/serveradmin/run-a-script-on-start-up.html
    2. У меня ничего не пропадает. Также использую малину без gui.

    ОтветитьУдалить
  3. Спасибо Алексей!
    Так толком и не разобрался, видимо все таки что-то не догоняю :-)
    Вопрос почти в тему. Не встречался ли Вам скрипт, который пингует через заданный промежуток времени (каждых 15 мин например) какой-нибудь сервер (гугл :-), и в случае не получения ответа дает 1 на выбранный GPIO. Суть: дома никого нет, завис роутер, таким образом его перезагрузить выкл/вкл питание релешкой. Как-то так..

    ОтветитьУдалить
    Ответы
    1. К сожалению не встречал. Если найдёте - напишите мне.

      Удалить
    2. Это же легко. 1й скрипт:
      #!/bin/sh
      if ping -c 4 ya.ru # пингуем сервера яндекса
      then
      echo "OK" # выводим ок, если всё хорошо
      else
      echo "modem reboot" # выводим modem reboot, если яндекс не отвечает
      sudo /home/pi/./reboot # путь до второго скрипта, который отвечает за перезагрузку
      fi
      2й скрипт:
      #!/usr/bin/env python2.7
      import RPi.GPIO as GPIO
      import time
      GPIO.setmode(GPIO.BCM)
      GPIO.setup(23, GPIO.OUT)
      GPIO.output(23, GPIO.HIGH) # выставляем 1 на порт гпио 23
      time.sleep(1) # ждём одну секунду, чтобы модем успел выключиться
      GPIO.output(23, GPIO.LOW) # возвращаем 0, чтобы включился модем
      exit()
      Потом в командной строке выполняем crontab -e и добавляем строку
      */5 * * * * sudo /home/pi/./checkya #раз в 5 минут будет выполняться скрипт проверки пинга я ру; указываем свой путь до 1го скрипта
      Готово!

      Удалить
    3. Спасибо. Обязательно попробую!

      Удалить
  4. А как можно сделать такую кнопку для выключение на Odroid C1 под Ubuntu?
    Ещё пытаюсь найти как вывести heartbeat диод на внешний диод, понимаю что с GPIO, но ничего не могу найти. Спасибо.

    ОтветитьУдалить
    Ответы
    1. Без понятия))) Я С1 и малины не выключаю

      Удалить
  5. Спасибо, у меня кнопка работает, но вот только очень часто самопроизвольно выключается, скорее всего от наводок в сети. Можно ли как-нибудь прописать в скрипте длительность нажатия кнопки не менее 1 секунды?

    ОтветитьУдалить
    Ответы
    1. притяни резистор от кнопки к GND на 10к

      Удалить