Работа с GPIO: различия между версиями

Нет описания правки
Строка 51: Строка 51:


Различия между ''chardev'' и ''sysfs'' хорошо описаны в [https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/ этой статье]. Sysfs имеет статус deprecated, поэтому, по возможности, <u>стоит работать через chardev</u>.
Различия между ''chardev'' и ''sysfs'' хорошо описаны в [https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/ этой статье]. Sysfs имеет статус deprecated, поэтому, по возможности, <u>стоит работать через chardev</u>.
===Работа через chardev===
Представленный в ядре 4.8 интерфейс chardev имеет C/Python библиотеку ''libgpiod'' и userspace-утилиты для работы с gpio. Исходный код библиотеки и документация доступны в [https://github.com/brgl/libgpiod репозитории libgpiod].
Утилиты распространяются в составе debian-пакетов ''gpiod'' и ''libgpiod-dev'' для debian buster и новее. К сожалению, '''для stretch пакетов в официальных репозиториях нет'''.
Если нужно установить libgpiod в debian stretch, можно воспользоваться сторонними репозиториями (например, [https://github.com/rcn-ee/repos этим]). '''Используйте сторонние репозитории на свой страх и риск; компания WirenBoard не контролирует их содержимое'''.
Для работы с gpio из bash в пакете ''gpiod'' поставляются следующие утилиты:
* <code>gpiodetect</code> — информация обо всех банках gpio в системе
* <code>gpioinfo</code> — подробная информация обо всех линиях gpio определённого банка
* <code>gpioget <чип> <линия></code> — возвращает значение определённого gpio
* <code>gpioset <чип> <линия1>=<значение1> <линия2>=<значение2></code> — устанавливает состояние на определенные линии gpio
* <code>gpiofind <название></code> — возвращает номер gpio
* <code>gpiomon</code> — отслеживание событий gpio
Примеры использования gpiod можно посмотреть в [https://www.acmesystems.it/gpiod] и [https://github.com/brgl/libgpiod]


===Интерфейс sysfs===
===Интерфейс sysfs===
Строка 157: Строка 175:
См. также [http://elinux.org/GPIO elinux.org]
См. также [http://elinux.org/GPIO elinux.org]


===Работа через chardev===
Представленный в ядре 4.8 интерфейс chardev имеет C/Python библиотеку ''libgpiod'' и userspace-утилиты для работы с gpio. Исходный код библиотеки и документация доступны в [https://github.com/brgl/libgpiod репозитории libgpiod].
Утилиты распространяются в составе debian-пакетов ''gpiod'' и ''libgpiod-dev'' для debian buster и новее. К сожалению, '''для stretch пакетов в официальных репозиториях нет'''.
Если нужно установить libgpiod в debian stretch, можно воспользоваться сторонними репозиториями (например, [https://github.com/rcn-ee/repos этим]). '''Используйте сторонние репозитории на свой страх и риск; компания WirenBoard не контролирует их содержимое'''.
Для работы с gpio из bash в пакете ''gpiod'' поставляются следующие утилиты:
* <code>gpiodetect</code> — информация обо всех банках gpio в системе
* <code>gpioinfo</code> — подробная информация обо всех линиях gpio определённого банка
* <code>gpioget <чип> <линия></code> — возвращает значение определённого gpio
* <code>gpioset <чип> <линия1>=<значение1> <линия2>=<значение2></code> — устанавливает состояние на определенные линии gpio
* <code>gpiofind <название></code> — возвращает номер gpio
* <code>gpiomon</code> — отслеживание событий gpio
Примеры использования gpiod можно посмотреть в [https://www.acmesystems.it/gpiod] и [https://github.com/brgl/libgpiod]


==Python==
==Python==