Я хочу использовать выводы GPIO на моем Raspberry Pi 2, но я бы предпочел не использовать Python, поскольку лично мне не нравится язык. Тем не менее, я не могу найти какую-либо информацию относительно использования C, только Python.
Есть ли официальный C API? Если так, где я могу найти учебники по нему? Если нет, какие у меня есть альтернативы?
Ответы:
Там нет официальной библиотеки
Есть несколько вариантов. Я обычно использую http://wiringpi.com . Это используется для
gpio
утилиты, включенной в последние выпуски Raspbian.pigpio
Библиотека Джоан находится по адресу https://github.com/joan2937/pigpio, и у нее также есть обертки Python. Если вы хотите использовать сокеты или демон, это рекомендуется и имеет хорошую поддержку для аппаратного обеспечения и массового доступа к банкам контактов.Оба имеют обширную документацию.
Есть несколько других, но некоторые, кажется, немного устарели.
источник
Вы не упоминаете операционную систему, например, 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.
источник