Os primeiros passos com Raspberry Pi 3: Controlando a GPIO por SYSFS

Não é de se negar que a Raspberry Pi mudou o mundo dos dispositivos embarcados, da mesma forma que o Arduino mudou. Há alguns anos atrás, não podíamos imaginar...

Não é de se negar que a Raspberry Pi mudou o mundo dos dispositivos embarcados, da mesma forma que o Arduino mudou. Há alguns anos atrás, não podíamos imaginar que daria para construir o seu próprio computador, em casa e com pouco dinheiro.

Hoje, conseguimos fazer muitos projetos complexos, que antes só eram possíveis com placas caríssimas, das quais não tínhamos acesso, as vezes somente em universidades. Com a Raspberry Pi podemos fazer projetos que vão desde uma simples automação residencial, um media center,
videogame e até sistemas de visão computacional que reconhecem rostos e objetos.

Alguns projetos, fazem interação com outros periféricos, como sensores, câmeras, unidades de armazenamento, atuadores, LEDs entre outros. Alguns deles fazem o uso das GPIOs, ou General Purpose Input/Output, das quais vamos falar neste artigo a respeito das GPIO’s.

O que é uma GPIO?

Uma GPIO é uma porta, de entrada ou saída genérica, digital, que possibilita ser controlada e programada para diversos fins, desde uma comunicação entre periféricos, controle de estado de entrada, como um botão ou saída com um LED, por exemplo.

A GPIO tem dois estados apenas, 0 e 1, ou seja, desligada ou ligada. Quando ligada, a tensão medida no pino da GPIO é de 3.3V e quando desligada é 0V.
O LED que pisca em uma placa, sinalizando um estado, por exemplo, é uma GPIO programada para essa função.
Portanto, em um projeto em que queremos interagir com outros periféricos, o uso das GPIOs é inevitável.

GPIO na Raspberry Pi

Desde a primeira versão da Raspberry Pi, em 2012, o número de GPIOs tem aumentado. A tabela abaixo mostra o número de GPIOs de acordo com cada modelo e dependendo do processador utilizado.

Vemos portando, que a Raspberry Pi B 3, da qual estamos tratando neste artigo, tem 46 GPIOs (nem todas estão disponíveis para serem utilizadas), um número mais que o suficiente para grande parte das aplicações. Mas antes de continuar, temos que entender algumas limitações e precauções no uso das GPIOs.

A GPIO está diretamente ligada ao processador, sem nenhum tipo de proteção externa, portanto, se algo der errado, as chances de queimar o processador são grandes. Para isso vamos tomar alguns cuidados quando utilizarmos as GPIOs da Raspberry.

  1. A corrente máxima de cada GPIO é de 50mA.
    • Por isso o uso de um resistor para limitar a corrente é essencial.
    • Para correntes mais altas, use um driver de corrente, feito com um transistor, por exemplo.
  2.  A tensão de cada GPIO é de 3.3V.
    • A Raspberry não é tolerante a 5V, portando não use tensões superiores a 3.3V nas GPIOs.
  3.  Algumas GPIOs já estão em uso por outros periféricos.
    • Tome cuidado ao usar as GPIOs para não utilizar alguma que já estiver em uso por outro
      periférico.
  4. Existem pull-up e pull-down internos.
    • Se precisar, use-o.
  5.  Curto-circuito pode danificar a sua Raspberry
    • Conecte os cabos nas GPIOs com ela desligada e verifique sempre as ligações.

GPIO Header

Todas as GPIOs disponíveis estão no barramento de 40 pinos da Raspberry. A figura abaixo mostra todos os pinos do barramento e sua respectiva função.

 

Para ligar um LED nas GPIOs da Raspberry Pi 3, devemos seguir conforme o esquemático abaixo:

O pino anodo (+) do LED deve ser conectado no GPIO21 e o catodo (-) deverá ser conectado no GND, utilizando um resistor de 220 ohms, para limitar a corrente na porta.
Devemos nos atentar ao fazer as conexões de forma correta, pois um erro pode danificar a placa.

Controlando uma GPIO por Sysfs

Para entender como funciona o controle da GPIO, devemos primeiramente entender o funcionamento de um pedaço do Kernel Linux, que os sistemas operacionais baseados nele utilizam.

Deve-se obter uma versão atualizada da imagem do Raspbian (http://raspbian.org/RaspbianImages) e gravar utilizando o Etcher (https://etcher.io/).

Sysfs

No Linux, uma das formas de fazer a comunicação com o hardware é por meio do sysfs. O sysfs é um pseudo sistema virtual de arquivos que faz interface entre os drivers e hardware e o espaço de usuário.
Em outras palavras, para enviar um comando do nível de usuário para o hardware, fazemos escritas e leituras em um arquivo virtual, que por sua vez faz a interação com o hardware ou o driver do dispositivo.
Com o sysfs, é possível o usuário acessar recursos de hardware por meio dos arquivos virtuais, em uma abstração com o driver que controla o dispositivo no mais baixo nível.
Para entender melhor, vamos fazer o controle de uma GPIO diretamente pelo terminal. Para isso vamos precisar acessar o terminal da Raspberry.

Acessando o terminal

O terminal, ou console de comandos, é uma interface de linha de comandos em que o sistema operacional pode ser controlado e manipulado. No terminal é possível acessar e manipular arquivos, iniciar programas, controlar o funcionamento do sistema entre outras funcionalidades.

Existem diversas formas de acessar o terminal da Raspberry Pi. A mais fácil é conectá-la a um monitor por meio de um cabo HDMI e um teclado USB.

Controlando a GPIO

Para usar uma GPIO, devemos seguir alguns passos antes de propriamente controlá-la. A GPIO tem que ser configurada através de dois passos, o export/unexport e a configuração da direção da GPIO.
O export de uma GPIO é a criação dos arquivos de interface com ela, sem esse passo, a GPIO não pode ser controlada uma vez que as interfaces com ela não foram criadas. O comando unexport é o contrario, remove as interfaces.
Para os próximos passos, vamos utilizar o comando echo para escrever no arquivo.
Para fazer o export, vamos escolher uma GPIO, por exemplo a GPIO21 (pino 40). Para fazer o export da GPIO21, devemos executar a seguinte linha de comando no terminal:

$ echo “21” > /sys/class/gpio/export

Feito isso, note que agora no diretório /sys/class/gpio/ existe um diretório chamado gpio16. Dentro deste diretório, estão todas as interfaces desta GPIO, como por exemplo o arquivo direction, que determina se a GPIO será INPUT ou OUTPUT.

Os arquivos criados são:

/sys/class/gpio/gpio21/direction

Determina se é GPIO de entrada ou saída

/sys/class/gpio/gpio21/value

É o estado da GPIO

/sys/class/gpio/gpio21/edge

Determina o momento da troca do estado

/sys/class/gpio/gpio21/active_low

Inverte a lógica de leitura da GPIO

Para configurar a direção, devemos executar o seguinte comando:

Para OUTPUT:

$ echo “out” >/sys/class/gpio/gpio21/direction

Para INPUT:

$ echo “in” >/sys/class/gpio/gpio21/direction

Lembrando que é possível apenas um modo de cada vez.

Com a GPIO já com as interfaces criadas e a direção escolhida, já podemos fazer o controle ou a leitura do estado. Para isso podemos fazer a escrita ou a leitura do arquivo value.

Para escrever:

$ echo “0” >/sys/class/gpio/gpio21/value

ou

$ echo “1” >/sys/class/gpio/gpio21/value

Após a execução do comando, o estado da GPIO deverá alterar de acordo com o nível lógico escrito no arquivo.

Para ler:

$ cat /sys/class/gpio/gpio21/value

Executado o comando de leitura do arquivo value, o mesmo retornará o estado atual da GPIO.

Com esses comandos já dá para fazer o controle e leitura de qualquer GPIO disponível, até mesmo implementar um script em bash para uma automação ou a implementação do controle das GPIOs em linguagem C.

Conclusão

Este artigo teve como objetivo mostrar como funciona o controle das GPIOs da Raspberry diretamente pelo sysfs. É importante para entender o funcionamento do sistema operacional, antes de embarcar com o uso de bibliotecas que abstraem isso.
Essa técnica pode ajudar até a criar uma biblioteca para uma linguagem ou mesmo um script em bash para o controle direto das GPIOs sem o uso de bibliotecas.
Se o projeto já faz uso de uma linguagem de programação como o Python, o indicado nesse caso é usar uma biblioteca já pronta, como a Rpi.GPIO, pigpio ou wiringpi2.

Referencias:

http://elinux.org/RPi_GPIO_Code_Samples
http://elinux.org/RPi_Low-level_peripherals
https://www.kernel.org/doc/ Documentation/ filesystems/sysfs.txt
https://www.raspberrypi.org/ documentation/ usage/gpio-plus-and-raspi2/
https://www.element14.com/community/ servlet/ JiveServlet/previewBody/73950-102-11-
339300/pi3_gpio.png

Categorias
Raspberry Pi

Formado em Analise de Sistemas e com técnico em Eletrônica, trabalha há mais de 10 anos com o desenvolvimento de produtos, com foco em embarcados. Atualmente trabalha com pesquisa de tecnologias de segurança embarcada, possuindo patentes nacionais e internacionais nas áreas de segurança, wearables e Internet das Coisas. Parceiro do site UsinaInfo.
Um Comentário
  • http://custom-essay-writing-service.org/blog/category/custom-essay
    8 maio 2018 at 10:05
    Enviar Resposta

    That is so good ot have such programmes like. The post is really great and it seems to that if you need some help you can find it in here.

    • Equipe Usinainfo
      10 maio 2018 at 13:03
      Enviar Resposta

      Good Morning! Thank you

    Enviar Resposta

    *

    *

    Sobre nós

    Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

    Sugestões

    Artigos Relacionados