Biblioteca GPIO para C

8

Quero utilizar os pinos GPIO no meu Raspberry Pi 2, mas prefiro não usar o Python, pois pessoalmente não gosto do idioma. No entanto, não consigo encontrar nenhuma informação sobre o uso de C, apenas Python.

Existe uma API C oficial? Se sim, onde posso encontrar tutoriais? Caso contrário, que alternativas eu tenho?

user112513312
fonte
Este não é C específico, mas para apoio geral linguagem de programação GPIO ver a lista em elinux.org/RPi_GPIO_Code_Samples
joana
Existem duas APIs C bastante recentes e uma API C ++ que eu encontrei e forneci um exemplo em uma postagem relacionada: Control GPIO pins from C
gorlux

Respostas:

10

Não existe biblioteca oficial

Existem várias opções. Eu costumo usar http://wiringpi.com . Isso é usado para o gpioutilitário incluído nas versões recentes do Raspbian.

A pigpiobiblioteca de Joan está em https://github.com/joan2937/pigpio e ela também possui wrappers Python. Se você deseja usar soquetes ou daemon, isso é recomendado e possui um bom suporte para hardware e acesso em massa a bancos de pinos.

Ambos têm documentação extensa.

Existem alguns outros, mas alguns parecem um pouco datados.

Milliways
fonte
2

Você não menciona um sistema operacional, como o Milliways, presumirei que você queira dizer Raspbian ou algum outro GNU / Linux. A IoT do Windows seria separada.

Todas as bibliotecas python são wrappers nas bibliotecas C, o que não é incomum. Criar as bibliotecas do zero em algo diferente de C seria. Há três:

Eles já existem há pelo menos alguns anos e são mantidos ativamente (por exemplo, a última versão do libbcm2835 foi de 3-4 meses atrás).

No entanto, você não precisa de nenhuma biblioteca, dependendo do que deseja fazer. Como mencionado, além da interface sysfs para coisas básicas, existem interfaces portáteis de nível C do usuário para I2C e SPI que usam drivers do kernel. Isso deixa o PWM - para acessar e usar os canais de hardware, você precisa usar uma dessas três bibliotecas. Ou, como joan menciona em um comentário sobre essa outra questão, se você estiver tentando contar pulsos muito rápidos (eu experimentaria alguns métodos nesse caso).

Eu não tentei todas as combinações, mas, presumindo que as bibliotecas específicas do pi sejam codificadas de maneira adequada, você deve poder combiná-las e combiná-las com as interfaces portáteis (por exemplo, use a API I2C regular e o wirePi for PWM), desde que você as use para pinos separados. Isso pode parecer uma abordagem estranha, mas faz sentido se você estiver trabalhando com código modular e quiser tornar as peças individuais o mais portáveis ​​possível. Por exemplo, se você deseja escrever uma interface para um sensor I2C, baseie-a na API do driver do kernel. Então, se você deseja usá-lo em um programa com PWM, use uma das três bibliotecas para PWM. O código escrito com pigpio /iringPi / libbcm2835 funcionará apenas em um Raspberry Pi; O código escrito usando as APIs do driver do kernel funcionará em qualquer sistema Linux.

Cachinhos Dourados
fonte