Комментарии 31
Есть более оптимальный вариант на Python без цикла:
Замыкаются пины 5 и 6 (GPIO3 и земля).
import subprocess
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
# GPIO3 (pin 5)
GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.wait_for_edge(3, GPIO.FALLING)
subprocess.call(['shutdown -h now "System halted by GPIO action"'], shell=True)
GPIO.cleanup()
Замыкаются пины 5 и 6 (GPIO3 и земля).
+9
А зачем выключать RPi? Ест она примерно ничего, включать всё равно кнопкой не выйдет. Я не пристаю, просто на официальном форуме часто встаёт этот вопрос и ответа не него всё ещё нет.
А почему бы не переписать на С++? На сколько я знаю, из него GPIO тоже доступен и ничего лишнего для бинарника доставлять не придётся.
А почему бы не переписать на С++? На сколько я знаю, из него GPIO тоже доступен и ничего лишнего для бинарника доставлять не придётся.
0
Область применения raspberry (и подобных штук), не ограничивается лежанием дома и работой 24х7.
Я, например, сейчас делаю девайс, который работает от аккумулятора, и как то жаль «в холостую» расходовать аккумулятор. Проблемы с выключением у меня правда нет, так как есть дисплей с тачскрином. Проблема включения решается либо включателем на разрыв питания, хотя можно и заморочиться на кнопку )
Я, например, сейчас делаю девайс, который работает от аккумулятора, и как то жаль «в холостую» расходовать аккумулятор. Проблемы с выключением у меня правда нет, так как есть дисплей с тачскрином. Проблема включения решается либо включателем на разрыв питания, хотя можно и заморочиться на кнопку )
+1
Да, я тоже планирую сделать из «малинки» портативный фотик с инфракрасной камерой. Работать он тоже будет от пауэрбанка. Если брать на природу, то разумно было бы выключать его между снимками. Данная кнопка — как раз для этого.
А на C++, не переписал, так как совсем его не знаю. Python тоже не знаю, но начал изучать.
Кстати, подумалось, можно ли удалённо «эмулировать» нажатие кнопки (через Webiopi, например), переназначив пины?
А на C++, не переписал, так как совсем его не знаю. Python тоже не знаю, но начал изучать.
Кстати, подумалось, можно ли удалённо «эмулировать» нажатие кнопки (через Webiopi, например), переназначив пины?
0
А как он тогда выключается, что его включить нельзя? Глянул по быстрому схему и документацию на BCM2835, но нигде не могу найти распиновку микросхемы. Заинтересовала нога D15, подписанная как «RUN». Возможно передернув там состояние, можно перезапустить схему.
0
если эти выводы закоротить, при запущенной системе — горячая перезагрузка (как на PC кнопка Reset)
если эти выводы закоротить, при выкл системе (командой halt) — система запуститься (как на PC кнопка Power)
http://raspberrypi.ru/blog/readblog/562.html
если эти выводы закоротить, при выкл системе (командой halt) — система запуститься (как на PC кнопка Power)
http://raspberrypi.ru/blog/readblog/562.html
0
Если я не путаю, то на Raspberry Pi незапаянный разъём P6 это Reset. С него можно перезапустить систему.
0
После перехода с B на B+ словил очень неприятный баг. Если выключить малину не правильно, то ФС при старте уже не примонтируется и нужно вытаскивать флешку и делать ей fsck. Единственный совет, который удалось найти — «купите совместимую с малиной флешку», попробовал три разных, две из которых в списке совместимых значатся как рабочие — не помогло.
0
А можно больше деталей? У меня 3 малины «в парке», стопка разных флешек и никаких проблем.
0
Сейчас под рукой малины нет, но ошибка примерно следующая:
Если делать reboot или shutdown, то всё нормально, а если halt или сброс по питанию, то почти наверняка не загрузится, а fsck найдёт ошибки в разделе. Но стоит раздел корректно размонтировать перед перезагрузкой и никаких ошибок нет. На модели «B» таких проблем не было (были другие :D), по питанию дёргалась чуть ли ни каждый день, ничего не сыпалось, всегда загружалось нормально. apt-get upgrade и rpi-update ничего нового не видят.
Kernel panic-not syncing:
VFS: unable to mount root fs on unknown- block(179,2)
Если делать reboot или shutdown, то всё нормально, а если halt или сброс по питанию, то почти наверняка не загрузится, а fsck найдёт ошибки в разделе. Но стоит раздел корректно размонтировать перед перезагрузкой и никаких ошибок нет. На модели «B» таких проблем не было (были другие :D), по питанию дёргалась чуть ли ни каждый день, ничего не сыпалось, всегда загружалось нормально. apt-get upgrade и rpi-update ничего нового не видят.
0
у меня после очередного выключения малины она больше не включилась, в качестве системы там стоял xbian, флешка была разбита на 3 раздела FAT,Btrfs — системный и swap, дак вот теперь флешку не отформатировать совершенно ни чем нельзя, точнее она форматируется но после передергивания опять в том же состоянии, файлы с виндового раздела, тоже удаляются но после размонтирования\монтирования опять все на месте. Флешка Transcend 16GB ей и месяца не было. Что с ней можно еще сделать кроме, как выкинуть, подскажите.
Купил новую флеху с неизвестным названием на 8GB c ней система не стартует вообще, у меня подозрение уже: может малина сдохла? Ее можно как нибудь проверить без флешки на работоспособность?
Купил новую флеху с неизвестным названием на 8GB c ней система не стартует вообще, у меня подозрение уже: может малина сдохла? Ее можно как нибудь проверить без флешки на работоспособность?
0
Подключаете UART и смотрите лог загрузки. elinux.org/RPi_Serial_Connection
0
Спасибо, попробовал подключиться, молчание, постоянно горит индикатор RX на USB TTL адаптере, хоть с карточкой хоть без.
Такое может быть?
Такое может быть?
0
Возможно, uboot не пишет в консоль. Можно посмотреть доку и настроить его так, чтобы он это делал elinux.org/RPi_U-Boot
0
За циклы сканирования для ожидания нажатия надо расстреливать.
Для обработки внешних событий микроконтроллера существуют прерывания, т.ч. и от внешних сигналов.
Если вы так любите питон смотри сюда raspberrywebserver.com/gpio/using-interrupt-driven-gpio.html
Для обработки внешних событий микроконтроллера существуют прерывания, т.ч. и от внешних сигналов.
Если вы так любите питон смотри сюда raspberrywebserver.com/gpio/using-interrupt-driven-gpio.html
+5
Насколько вижу по исходникам, эти «прерывания» эмулируются запуском отдельного потока, который делает практически тоже самое, что и код в первом комментарии. Так что наоборот, будет больший оверхед.
+1
поэтому лучше всего написать маленький модуль ядра который просто зареквестит нужный gpio, повешает на него обработчик прерывания, а в обработчике вызовет функцию ctrl_alt_del() (да, в ядре есть такая функция, посылает SIGINT иниту)
+1
Тут человек python только осваивает, а вы предлагаете модуль ядра писать ))
Хотя дело не в этом, бывает что такие одноразовые костыли в итоге использовать удобней.
Приведу пример из того что делаю сейчас:
Для девайса сделал контроллер тачскрина на МК, который тупо по UART шлет координаты. На заморочки с USB-HID в плане софта и железа ушло бы много времени.
Далее скрипт на raspberry принимает эти цифры, вычисляет нужную точку (с МК идут сырые данные) и через xdotool делает клик. Тут можно было написать простенький модуль ядра, но дошло что по UART нужно передавать не только это.
Да и зачем такие сложности в устройстве, которое существует в единственном экземпляре и только для себя ))
Хотя дело не в этом, бывает что такие одноразовые костыли в итоге использовать удобней.
Приведу пример из того что делаю сейчас:
Для девайса сделал контроллер тачскрина на МК, который тупо по UART шлет координаты. На заморочки с USB-HID в плане софта и железа ушло бы много времени.
Далее скрипт на raspberry принимает эти цифры, вычисляет нужную точку (с МК идут сырые данные) и через xdotool делает клик. Тут можно было написать простенький модуль ядра, но дошло что по UART нужно передавать не только это.
Да и зачем такие сложности в устройстве, которое существует в единственном экземпляре и только для себя ))
+2
Мне кажется, есть смысл делать выключение на долгое нажатие. Во избежание случайных срабатываний.
+1
Пока фальстартов небыло, но кнопкой я пользуюсь всего несколько дней. До этого долго просто замыкал проводки. На самом деле есть несколько чисто механических решений. Например, утопленная кнопка или откидывающаяся защитная крыжечка на кнопке. Я такой прикрыл на аппе для квадрокоптера кнопку отключения моторов
0
А Raspberry Pi не поддерживает ACPI?
Вообще я ожидал прочитать статью про прерывания, управление режимами работы процессора, ACPI, модули ядра…
В любом случае с этим надо разбираться, чтобы научить его включаться по кнопочке.
Вообще я ожидал прочитать статью про прерывания, управление режимами работы процессора, ACPI, модули ядра…
В любом случае с этим надо разбираться, чтобы научить его включаться по кнопочке.
0
Нет, на АРМах нету ACPI. Точнее нету одного определенного стандарта. Каждый производитель лепит свой ROM-код для таких функций как уход в спящий режим, запуск и остановка дополнительных ядер и т.д. На некоторых платах питание вообще выключается прямой просьбой к PMIC выключить напряжение. Эдакое харакири.
Было бы круто, если бы поддерживался EFI, но такого нет, к сожалению.
Было бы круто, если бы поддерживался EFI, но такого нет, к сожалению.
+1
А можно поподробнее про «можно установить в одно из двух состояний: «выход» (он же OUT или логическая 1) или «вход» (IN или логический 0)»?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Кнопка выключения для Raspberry Pi