Programação GPIO: mudanças entre as edições
Linha 47: | Linha 47: | ||
=== Lendo um parâmetro === | === Lendo um parâmetro === | ||
O comando <code>cat</code> pode ser usado nestes arquivos de parâmetros para ler o que já foi configurado dos pinos ficamos então com os seguinte exemplo completos para configuração do pino GPIOE3 como output em alta e | O comando <code>cat</code> pode ser usado nestes arquivos de parâmetros para ler o que já foi configurado dos pinos ficamos então com os seguinte exemplo completos para configuração do pino GPIOE3 como output em alta e GPIOE2 como input: | ||
<pre>$ echo 131 > /sys/class/gpio/export</pre> | <pre>$ echo 131 > /sys/class/gpio/export | ||
</pre> | |||
==Interface chardev== | ==Interface chardev== |
Edição das 14h55min de 2 de julho de 2020
Esta página explica como programar as saídas GPIO (General Purpose Input/Output) da Labrador, que são basicamente pinos nos quais você pode enviar e receber dados. Para facilitar a programação, a placa Labrador segue a interface padrão para userspace para Linux embarcado. O tutorial desta página funciona tanto com a Labrador 32 quanto 64-bits.
Além disso, a placa Labrador 32-bits é compatível com o formato da Raspberry Pi, e possui a biblioteca wiringK9
, baseada na wiringPi, também da Raspberry Pi. Mais detalhes desta biblioteca pode ser encontrado nessa página Wiring K9.
Configuração dos pinos
A configuração de pinos para o cabeçalho de GPIO é a seguinte:
Interface GPIO do Linux
O kernel Linux implementa em si uma solução de acesso à GPIO atraves de um modelo de criação e consumo de GPIO. Os drivers de criação são drivers como o controlador de GPIO que será detalhado nesta página, os consumidores são os drivers como sensores que utilizam estas linhas GPIO.
Dentro do kernel Linux existe uma estrutura de alocação e registradores dos pinos GPIO chamado gpiolib, esta estrutura cobre os drivers em nível de kernel e userspace.
As bibliotecas de espaço de usuário são, até a versão 4.7 do Kernel Linux a sysfs
e a partir da versao 4.8 a chardev
. Embora a placa Labrador esteja atualmente no Kernel 4.19, ambas ainda são compatíveis e cobriremos o uso das duas interfaces de espaço de usuário.
Interface sysfs
Na interface sysfs o usuário tem acesso às GPIO através de arquivos exportados em /sys/class/gpio
. Para isso é necessário exportar um arquivo para cada GPIO, configurar a porta e escrever na mesma.
Identificando o número da GPIO
No método sysfs utiliza-se o número absoluto das GPIO para exportá-las individualmente. A Labrador possui 5 grupos de GPIO (A, B, C, D e E). Cada um desses possui 32 pinos agrupados, portanto para indicar o valor absoluto do pino temos um offset dado pelo grupo mais o valor do pino, este offset seguem a lógica a seguir:
- A: 0
- B: 32
- C: 64
- D: 96
- E: 128
Portanto se quisermos acessar o pino 3 do header GPIO, no caso seria GPIOE3, portanto devemos exportar o pino GPIO 128+3=131. Isto seria feito com a seguinte linha de terminal:
$ echo 131 > /sys/class/gpio/export
Configurando a direção do pino
Após exportado o pino devemos configurar a direção do mesmo entre input (in
) ou output (out
). Para isto basta escrever no GPIO exportado o valor requerido. No nosso exemplo colocaremos como output:
$ echo out > /sys/class/gpio/gpio131/direction
Escrevendo ou lendo no pino
Para escrever no pino configurado como output basta enviar o valor para o parâmetro value
do pino. No nosso exemplo colocaremos o valor 1 no pino:
$ echo 1 > /sys/class/gpio/gpio131/value
Caso o pino seja definido como input basta ler este mesmo arquivo.
$ cat /sys/class/gpio/gpio131/value
Lendo um parâmetro
O comando cat
pode ser usado nestes arquivos de parâmetros para ler o que já foi configurado dos pinos ficamos então com os seguinte exemplo completos para configuração do pino GPIOE3 como output em alta e GPIOE2 como input:
$ echo 131 > /sys/class/gpio/export