Библиотека GPIO для C

8

Я хочу использовать выводы GPIO на моем Raspberry Pi 2, но я бы предпочел не использовать Python, поскольку лично мне не нравится язык. Тем не менее, я не могу найти какую-либо информацию относительно использования C, только Python.

Есть ли официальный C API? Если так, где я могу найти учебники по нему? Если нет, какие у меня есть альтернативы?

user112513312
источник
Это не специфично для C, но для общей поддержки языка программирования GPIO смотрите список по адресу elinux.org/RPi_GPIO_Code_Samples
joan
Есть два сравнительно недавно API , C и один C API ++ , что я нашел и представил пример в соответствующей должности: Управление GPIO булавки из C
gorlux

Ответы:

10

Там нет официальной библиотеки

Есть несколько вариантов. Я обычно использую http://wiringpi.com . Это используется для gpioутилиты, включенной в последние выпуски Raspbian.

pigpioБиблиотека Джоан находится по адресу https://github.com/joan2937/pigpio, и у нее также есть обертки Python. Если вы хотите использовать сокеты или демон, это рекомендуется и имеет хорошую поддержку для аппаратного обеспечения и массового доступа к банкам контактов.

Оба имеют обширную документацию.

Есть несколько других, но некоторые, кажется, немного устарели.

Milliways
источник
2

Вы не упоминаете операционную систему, например, Milliways. Я предполагаю, что вы имеете в виду Raspbian или какой-то другой GNU / Linux. Windows IoT будет отдельной.

Все библиотеки Python являются обертками для библиотек C, что не является чем-то необычным. Создание библиотек с нуля во что-то, отличное от C было бы. Есть три:

Они существовали как минимум несколько лет и активно поддерживаются (например, последняя версия libbcm2835 была 3-4 месяца назад).

Тем не менее, вам не нужна библиотека в зависимости от того, что вы хотите сделать. Как уже упоминалось, в дополнение к интерфейсу sysfs для базовых вещей существуют переносимые пользовательские интерфейсы уровня C для I2C и SPI, которые используют драйверы ядра. Это просто оставляет ШИМ - для доступа и использования аппаратных каналов вам нужно использовать одну из этих трех библиотек. Или, как упоминает Джоан в комментарии к этому другому вопросу, если вы пытаетесь считать очень быстрые импульсы (в этом случае я бы поэкспериментировал с несколькими методами).

Я не пробовал каждую комбинацию, но при условии, что определенные библиотеки pi написаны разумно, вы должны иметь возможность смешивать и сопоставлять их с переносимыми интерфейсами (например, использовать обычный I2C API и wiringPi для PWM), если вы используете их для отдельные контакты. Это может показаться странным подходом, но имеет смысл, если вы работаете с модульным кодом и хотите сделать отдельные части максимально переносимыми. Например, если вы хотите написать интерфейс для датчика I2C, основывайте его на API драйвера ядра. Затем, если вы хотите использовать это в программе с ШИМ, используйте одну из трех библиотек для ШИМ. Код, написанный с использованием pigpio / wiringPi / libbcm2835, будет работать только на Raspberry Pi; Код, написанный с использованием API драйверов ядра, будет работать в любой системе Linux.

Златовласка
источник