У меня есть простая схема, со светодиодом, подключенным к контакту 18 на эталонной плате. Я запускаю простую программу, чтобы установить вывод 18 в положение ВЫСОКОЕ, что включает светодиод, а затем через пару секунд я устанавливаю вывод 18 в положение НИЗКИЙ, и, наконец, я завершаю свою программу с помощью GPIO.cleanup ().
В этот момент светодиод выключен, что означает, что вывод 18 выключен (НИЗКИЙ). Теперь я перезагружаю или перезагружаю мой Raspberry Pi, и когда он снова загружается, светодиод на контакте 18 снова включается, даже если контакт был выключен до того, как я перезагрузил Raspberry Pi.
Почему это может происходить? Как я могу настроить определенный вывод, например, вывод 18, чтобы он отключался при загрузке Raspberry Pi? И я не хочу, чтобы какие-либо контакты GPIO были на ВЫСОКОМ, когда Raspberry Pi загрузится.
Я обеспокоен этой проблемой, потому что, скажем, контакт 18 подключен к двигателю постоянного тока на роботе, и когда Raspberry Pi загрузится, двигатель включится, и это не то, что я хочу, потому что это будет мешать вся конструкция робота, и некоторые двигатели могут запускаться, а другие - нет, в зависимости от контактов, к которым они подключены. Я хочу вручную включить все двигатели синхронно.
Еще одна вещь состоит в том, что не все контакты имеют эту проблему. Некоторые останавливаются, когда Raspberry Pi загружается, а другие нет.
/sys/class/gpio
и экспортируете контакт 18, в каком состоянии система скажет, что находится, если вы ничего не меняете?echo
, что пишет, то есть устанавливает что-то. После того, как вы экспортируете его, вы хотите воздержаться от этого и просто использоватьcat
, который читает, чтобы проверить направление и значение.Ответы:
При включении питания GPIO протягиваются либо высоко, либо низко через внутренние резисторы. Высокий или низкий уровень тяги для конкретного GPIO подробно описан на стр. 102 периферийных устройств ARM BCM2835 .
Поскольку ядро Linux запущено и если дерево устройств включено (вероятно), оно будет переконфигурировать GPIO в соответствии с настройками дерева устройств. Загруженные модули
/etc/modules
также могут обновлять состояние GPIO.Любое другое программное обеспечение, которое вы запускаете при запуске, может потенциально перенастроить GPIO после настроек дерева устройств и загрузки модулей.
Безопаснее всего найти аппаратное решение, если у вас есть оборудование, которое может быть неправильно запущено при запуске системы.
источник
Когда Raspberry Pi загружается, линии GPIO сбрасываются на значения по умолчанию для чипа, затем ОС загружается и сбрасывает их на значения по умолчанию для ОС. Нет способа «запомнить» настройки при перезагрузке. Смотрите также Что такое состояние GPIO? и состояние GPIO после загрузки .
источник
Я знаю, что уже довольно поздно. Отвечать. Вы можете написать скрипт на python или bash, который вручную установит пин-код на низкий уровень и запланирует запуск задания cron при каждой загрузке. Вам не нужно изменять какие-либо системные / критические файлы. Помимо хрон
источник