Usando a GPIO do Raspberry Pi com BlueJ
Publicado em 14/01/2015
Na parte superior do Raspberry Pi, ao lado do soquete amarelo de saída de vídeo, encontram-se os conectores da GPIO, sigla em inglês para General Purpose Input/Output, isto é, "Entrada/Saída de Uso Geral". Isso constitui uma das principais características deste fantástico dispositivo, permitindo uma variedade imensa de aplicações no campo da mecatrônica.
Estes inocentes pininhos fazem a interface entre o Pi e o mundo exterior. De uma forma bem simples, pode-se considerá-los como se fossem interruptores que podem ser ligados/desligados (entrada ou input) ou que o Pi pode ligar/desligar (saída ou output). Dezessete dos 26 pinos são efetivamente GPIO; os outros são pinos de alimentação ou aterramento. Confira o esquema da pinagem na figura a seguir:
Os pinos da GPIO podem ser programados para interagir numa enorme variedade de maneiras. As entradas, por exemplo, podem ser acionadas também por sensores ou sinais de outros dispositivos; as saídas podem ser conectadas a outros componentes eletrônicos como leds, motores, servos, etc.
É preciso tomar muito cuidado ao fazer conexões nos pinos GPIO, pois um erro de pinagem ou sobrecarga podem inutilizar completamente o Raspberry Pi. Preste muita atenção, portanto, na hora de plugar os cabos nos pinos, conferindo tudo cuidadosamente antes de ativar o circuito.
Um "HelloWorld" para a GPIO
Um dos circuitos mais elementares que existem é o de um LED em série com um resistor e um interruptor, o qual comanda seu acendimento. No esquema abaixo vemos o diagrama deste circuito:
A próxima figura mostra o circuito acima devidamente montado na nossa protoboard. À esquerda, o LED está apagado e, ao ser fechado o interruptor, na imagem da direita, ele acende. Nada mais simples do que isso, não é mesmo?
Observe que os LED possuem polaridade (negativo e positivo). Se essa polaridade for invertida na montagem, ADEUS LED!!! Para identificar os pinos, observe um pequeno chanfro no corpo do LED. O terminal do lado do chanfro é o Cátodo (negativo). Esse terminal também costuma ser mais curto, para facilitar sua identificação. O outro terminal, consequentemente, é o Ânodo (positivo).
A montagem de apenas um LED, num único pino da GPIO, é bastante segura, ainda mais que estamos usando um resistor de 330Ω para limitar a corrente. Isso garante que a corrente drenada da saída fique em torno dos 4mA. O LED não vai ofuscá-lo com o melhor do seu brilho, mas estaremos dentro do limite de segurança.
Esses limites variam conforme a quantidade de pinos utilizados, mas de uma maneira geral, podemos considerar seguro o limite de 16mA para apenas um pino e de 51mA para todos os pinos. Parece que não é muito, mas é mais do que suficiente para alimentar outros circuitos (drivers) os quais, por sua vez, podem acionar cargas bem mais potentes.
Bom, chega de conversa. Vamos botar as mãos na massa e elaborar um programa bem básico para demonstrar o uso da GPIO, a partir do IDE BlueJ. É o equivalente ao famoso "HelloWorld", e sua finalidade é apenas acender o LED, fazendo a função do interruptor. Para isso, além do BlueJ e JDK devidamente instalados no Pi (consulte nossos artigos anteriores para maiores informações - v. links abaixo), você vai precisar dos seguintes itens:
- Uma "protoboard" (base para montagens experimentais sem solda);
- Dois cabinhos com conectores "macho/fêmea" preto e vermelho;
- Um LED (Diodo Emissor de Luz) de uso geral;
- Um resistor de 330Ω (laranja, laranja, marron).
Veja na figura a seguir a aparência desses componentes:
O cabo preto deve ser conectado no pino marcado 20 (Terra ou Ground) no Pi e o cabo vermelho deve ser conectado no pino marcado 22 (GPIO25). Consulte o diagrama seguinte:
Se você possui um Raspberry Pi modelo B+, ele terá mais do que 26 pinos. Todavia, as atribuições de numeração GPIO para ambos os modelos (B e B+), será a mesma descrita aqui e o projeto funciona nos dois sem que seja necessário fazer nenhuma alteração.
Veja no próxima imagem a minha montagem numa protoboard (também chamada breadboard), usando o modelo B:
Programando a GPIO com o BlueJ
Abra o IDE BlueJ na interface gráfica do seu Raspian e carregue o projeto LED-Button. A figura a seguir mostra a janela do BlueJ com o projeto carregado:
Cada uma das caixas amarelas na janela do BlueJ acima é uma classe Java. A classe LED representa o LED real do nosso circuito conectado ao Raspberry Pi, e é ela que vamos usar neste primeiro exercício. Todas as demais classes já estão implementadas e vamos usá-las em exercícios futuros.
Criando um novo objeto LED
Vamos aproveitar a funcionalidade do BlueJ para interagir diretamente com o objeto LED. Como já disse no meu artigo anterior, uma das grandes vantagens de usar o BlueJ é poder testar os objetos sem necessidade de um programa de teste com o método main()
.
A primeira coisa a fazer, é criar o objeto LED. Para isso, clique com o botão direito do mouse sobre a classe LED e selecione new LED()
. Se esta opção não existir é porque a classe precisa ser compilada. Confira na figura seguinte:
O BlueJ solicitará um nome para a instância. O nome sugerido (lED1
) está bom por ora. Clique o botão Ok
e observe o aparecimento de um retângulo vermelho representando o objeto criado no painel inferior à esquerda, denominado lED1: LED
:
Acendendo e Apagando o LED
Para acender o LED, clique com o botão direito do mouse sobre o objeto lED1
e selecione o método void on()
:
Isso vai acender o LED. (Vai demorar um pouquinho da primeira vez, tendo em vista que precisam ser feitas todas as conexões nos bastidores).
Para encerrar, use o método `void off() para apagar o LED... e até a próxima.