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. Sendo assim,muitas duvidas surgem e hoje vamos sanar algumas com esse Tutorial Raspberry Pi 3 Com Primeiros Passos.
Atualmente, 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 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.
- 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.
- 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.
- 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.
- Tome cuidado ao usar as GPIOs para não utilizar alguma que já estiver em uso por outro
- Existem pull-up e pull-down internos.
- Se precisar, use-o.
- 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:
[crayon-673f5bbacd8e8526103966/]
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:
[crayon-673f5bbacd8ed327790822/]
Determina se é GPIO de entrada ou saída
[crayon-673f5bbacd8ee410778570/]
É o estado da GPIO
[crayon-673f5bbacd8ef617445649/]
Determina o momento da troca do estado
[crayon-673f5bbacd8f0015753392/]
Inverte a lógica de leitura da GPIO
Para configurar a direção, devemos executar o seguinte comando:
Para OUTPUT:
[crayon-673f5bbacd8f1575165703/]
Para INPUT:
[crayon-673f5bbacd8f2816720397/]
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:
[crayon-673f5bbacd8f3772454589/]
ou
[crayon-673f5bbacd8f4048492249/]
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:
[crayon-673f5bbacd8f5046381438/]
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 Tutorial Raspberry Pi 3 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.
Conheça toda Linha de Produtos Raspberry Pi no Site da UsinaInfo.
Referências:
- 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.jpg