Curso Raspberry Pi – #12 – Noções Básicas sobre GPIO, Scripts

Anteriormente, exercícios com uma câmara conectada ao Raspberry Pi. Tempo para o tópico mais interessante do ponto de vista de toda a eletrónica. As portas GPIO permitem controlar praticamente qualquer dispositivo. Vamos começar com comandos simples para controlar as saídas do Raspberry Pi.

 

No passado, todos os livros de programação começaram com um exemplo com a escrita Hello World! No caso de dispositivos eletrónicos, tal equivalente provavelmente será a inclusão de um diodo LED conectado ao Raspberry Pi. Está na hora de praticar!

Portas de entrada e saída Universal Raspberry Pi

Ao conectar qualquer coisa ao GPIO, lembre-se sempre que o Raspberry Pi foi projetado para funcionar com 3,3V. Se fornecermos uma voltagem mais alta aos pinos, danificaremos facilmente Raspberry.

Na seção dedicada à comunicação UART , já escrevemos sobre isso, mas não faz mal repetir: pinos número 2 e 4 no Raspberry Pi estão conectados a 5V. Encurtá-los acidentalmente com outros pinos danificará o PCB. Para se proteger contra este risco, pode configurar um jumper nos dois pinos acima. Graças a isso, não teremos acesso físico a eles:

 

 

 

 

 

 

 

Após a montagem do circuito, nós verificamos se não nos confundimos com nada e ligamos o Rapberry. Nós entramos no terminal e usamos no comando:

diretório/sys é um dos muitos diretórios virtuais no nosso sistema. Nós não vamos encontrá-lo no cartão SD. O sistema apenas “finge” que tal diretório existe, na verdade todas as referências a arquivos neste diretório são tratadas pelo núcleo do sistema. O diretório/sys permite aceder informações sobre drivers do sistema Linux.

Agora podemos verificar o conteúdo do diretório/sys/class/gpio – vamos encontrar nele um novo sub diretório chamado gpio21. Seu conteúdo permitirá que controle o comportamento do pino selecionado.

Por padrão, o pino exportado é definido como entrada (in). Queremos controlar o díodo, então precisamos de uma saída (out). Precisamos mudar a direção do pino. Para fazer isso, simplesmente escrita para fora para o arquivo /sys/class/GPIO/gpio21/direção.

echo out > /sys/class/gpio/gpio21/direction
echo 0 > /sys/class/gpio/gpio21/value

 

 

 

 

 

 

 

Quando terminamos os experimentos, podemos limpar, ou seja, desativar o acesso ao pino GPIO21. No começo nós exportamos, então agora deve desfazer essa operação:

echo 21 > /sys/class/gpio/unexport

Como pode ver no mundo do Linux, tudo é um arquivo. O diretório/sys comporta-se como arquivos normais em um cartão SD. Para controlar os dispositivos conectados, podemos usar ferramentas padrão ou dos nossos próprios programas. Curiosamente, o lançamento dos exemplos não requer programação nossa, é apenas operações simples em arquivos. Naturalmente, este não é um método eficiente, mas em muitos casos será suficiente.

Vale ressaltar que usando o acesso ao diretório/sys/class/gpio você também pode controlar os pinos em outras plataformas. Esta funcionalidade é fornecida pelo núcleo do Linux, não depende do Raspberry Pi.

O programa gpio e a biblioteca WiringPi

Já aprendemos o método de comunicação direta com o núcleo do sistema. Esta é uma opção interessante, mas não muito eficaz e não necessariamente confortável. Felizmente, o Raspberry Pi oferece algumas boas bibliotecas e programas que permitem um acesso mais eficiente aos pinos. Um deles é o WiringPi.

Nesta parte do curso não vamos escrever programas (apenas scripts simples), então vamos usar um programa chamado gpio – usando-o pode facilmente usar a linha GPIO.

Mais informações sobre o programa podem ser encontradas na extensa documentação:

man gpio

Atualização para pessoas com Raspberry Pi 3 modelo B +

As pessoas que usam o novo Raspberry Pi 3 B+ devem começar por verificar a versão instalada do gpio. Para fazer isso, emita o comando gpio -v. Se o número da versão for igual ou maior que 2,46, então tudo está bem e pode ir mais longe.

Se a versão retornada for menor que 2.46 (geralmente 2.44), as 3 instruções a seguir devem ser executadas. Elaa nos ajudarão a fazer download da versão apropriada do wiringPi do site do autor e atualizá-la manualmente:

cd /tmp
wget https://unicorn.drogon.net/wiringpi-2.46-1.deb
sudo dpkg -i wiringpi-2.46-1.deb

Numeração de pinos GPIO no Raspberry Pi

No entanto, antes de começar a usar o GPIO na íntegra, precisamos de aprender algumas informações sobre a numeração dos pinos. No caso de Raspberry Pi, há uma grande confusão e temos que lidar com isso. A placa tem um conector de 40 pinos. Os pinos disponíveis são numerados de 1 a 40 (o mesmo que para qualquer outro conector deste tipo). O número do pino indica a posição do sinal no conector.

Alguns pinos têm um significado especial, por exemplo, os pinos 2 e 4 estão conectados à tensão de 5V e os pinos 6, 9, 14, 20, 25, 30, 34 e 39 ao ground (GND). Do ponto de vista do programador, esses pinos não são interessantes. Por outro lado, parece natural usar atribuições de pinos usadas pelo próprio processador.

No caso dos micro controladores, os pinos são agrupados em portas (porta A, B, etc.) e numerados, portanto temos, por exemplo, o pino PA1. No caso de Raspberry Pi, apenas números são usados. Nós já lidamos com eles no exemplo anterior. Ao escrever o GPIO21, estávamos a falar sobre o pino 21 do processador.

Nem todos os pinos do processador estão disponíveis no conector Raspberry Pi. Além disso, diferentes modelos diferem ligeiramente nas conexões. Para facilitar a vida dos iniciantes, os designers do Raspberry Pi decidiram introduzir mais um número de pinos.

 

 

 

 

 

 

Como foi mencionado, a biblioteca WiringPi usa uma numeração diferente de pinos. No entanto, pode forçar os mesmos números que no diretório/sys. Vamos ficar com esta numeração agora.

No início, definimos o número do pino 12 como a saída, emitindo o comando:

gpio mode 26 out
gpio write 26 0
gpio write 26 1

O funcionamento do sistema será idêntico.

Scripts – programas simples no terminal

Já podemos controlar as saídas universais. No entanto, o método de emissão manual de comandos não é muito conveniente. Felizmente, não precisamos inserir manualmente todos os comandos no terminal.

Um script é simplesmente um arquivo de texto com comandos que normalmente inserimos do teclado na janela do terminal. Ao colocá-los num arquivo, não precisamos de digitar tudo novamente – basta chamar o arquivo apropriado.

O primeiro script – ligando o díodo

Vamos começar com um exemplo extremamente simples. Deixe o nosso primeiro script configurar o pino apropriado como uma saída e definir um estado alto (ou seja, por exemplo, ligue o díodo). É claro que a sensibilidade de tal “programa” é pequena, mas vamos praticar a criação e execução do próprio script.

No começo, precisamos de criar um novo arquivo com a extensão sh. Por exemplo, pode ser led.sh, para esse propósito, usaremos o editor nano:

nano led.sh

No seu conteúdo, inserimos comandos que normalmente seriam inseridos no console – devemos preceder-los com apenas uma linha: #!/Bin/sh. O script que liga o díodo conectado ao pino 21 ficaria assim:

#!/bin/sh
gpio -g mode 21 out
gpio -g write 21 1

Guarde o arquivo (CTRL + X). Então precisamos dar ao nosso script as permissões apropriadas para serem tratados como um “programa”. Para este propósito, é claro, usamos chmod:

sudo chmod +x led.sh

Para executar o script, emitimos o comando:

./led.sh

O díodo agora deve brilhar!

Um script a piscar com um díodo no Raspberry Pi

Os scripts podem ser mais extensos. Eles podem, por exemplo, conter loops. É hora de fazer um “exemplo” com um díodo a piscar. Criamos um novo arquivo blink.sh:

nano blink.sh

No seu conteúdo, nós colamos um loop while simples (neste momento não nos vamos concentrar na sintaxe):

#!/bin/sh
gpio -g mode 21 out
while true
do
   gpio -g write 21 1
   sleep 1
   gpio -g write 21 0
   sleep 1
done

O código acima configura o pino 21 como a saída. Então muda de estado a cada segundo. O arquivo é salvo (CTRL + X), nós damos as permissões apropriadas (sudo chmod + x blink.sh).

Depois de iniciar o programa, o díodo ficará a piscar, como na animação a seguir:

As fundações mais importantes para nós! Com base nos exemplos descritos aqui, pode criar, por exemplo, simulação de semáforos simples. Voltaremos a essa ideia no próximo artigo e, enquanto isso, encorajamos experimentos independentes!

Sumário

Nesta parte do curso, assumimos operações básicas nas saídas. O mais importante é ler os três métodos de numeração depois de ler este artigo e criar scripts simples sozinho.

No próximo episódio usaremos pinos gerando o sinal PWM, também verificaremos como as entradas funcionam na prática. Finalmente, substituiremos o nosso Raspberry Pi por uma câmara digital simples. Pressionar o botão fará com que a foto seja tirada. Vamos combinar habilidades de todas as partes anteriores.

___________

O que achou deste artigo? Deixe o seu comentário abaixo, e partilhe nas Redes Sociais que certamente será útil e interessante para os seus amigos!

 

 

 Curso Raspberry Pi – #1 – Introdução, Índice

 Curso Raspberry Pi – #2 – O que é o Raspberry Pi?

Curso Raspberry Pi – #3 – Caixa, Dissipadores de Calor

 Curso Raspberry Pi – #4 – Instalação do Sistema, Raspberry Pi como PC 

 Curso Raspberry Pi – #5 – Instalação / Comunicação Via UART

 Curso Raspberry Pi – #6 – Instalação / Comunicação Através da Rede

 Curso Raspberry Pi – #7 – Acesso Remoto VNC, Chaves SCP, RSA

 Curso Raspberry Pi – #8 – O Básico do Linux

 Curso Raspberry Pi – #9 – Processadores de Texto

 Curso Raspberry Pi – #10 – Câmara, Fotos, Transmissão de Imagem

 Curso Raspberry Pi – #11 – Filmes, Slowmotion, Timelapse

 Curso Raspberry Pi – #12 – Noções Básicas sobre GPIO, Scripts

 Curso Raspberry Pi – #13 – PWM, Entradas, Scripts com uma Câmara

 Curso Raspberry Pi – #14 – Python Básico, GPIO