Raspberry Pi e Java com Pi4j
Se buscarmos um meio de acesso ao barramento do Raspberry Pi, acharemos muito material em Python. Que aliás, traz o acrônimo no nome do dispositivo (Pi de Python). Porém, pode ser que nos sentimos mais a vontade com outra linguagem, como C ou java.
Pensando exatamente nisso, podemos usar algumas bibliotecas como por exemplo o Pi4j que usa internamente o WiringPi para o acesso de baixo nível. Sua instalação é bastante simples, basta pegar o .deb
:
wget http://pi4j.googlecode.com/files/pi4j-0.0.5.deb
depois, extrair e instalar:
sudo dpkg -i pi4j-0.0.5.deb
Após a instalação, vamos fazer alguns trechos de código para ver como é simples a utilização:
Primeiro, que tal piscarmos uns leds?
1.Pegue a instancia de GPIO 2.Precisamos dizer se o io será usado como saída. 3.Precisamos inicializar com o GPIO especificado 4.Precisamos estar ou receptar o estado do bit.
Segue o código:
GpioController gpio = GpioFactory.getInstance();</em> GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin(RaspiPin.GPIO\_01, ”MyLed”, PinState.LOW);</em> myLed.blink(500);
Ou seja, o GPIO1 é uma saída e é para piscar a cada 500ms. Fácil né? Mas e se eu tiver um botão? Como faço para “ouvir” seu estado quando pressionado?
1.Pegue a instancia de GPIO 2.Declarar o io como entrada. 3.Criar o listener para o botão 4.Fazer algo com o botão clicado!
GpioController gpio = GpioFactory.getInstance(); GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO\_02); myButton.addListener(new GpioPinListenerDigital() { public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) { if(event.getState().isHigh()){ System.out.println(“Pressionou”); } else{ System.out.println(“Parou de pressionar”); } } });
Com o código pronto, vc pode compilar assim:
javac -classpath .:classes:/opt/pi4j/lib/'\*' -d . PiscaPiscaDetectorDeBotao.java
E finalmente, rodar assim:
sudo java -classpath .:classes:/opt/pi4j/lib/'\*' PiscaPiscaDetectorDeBotao
Segue agora um exemplo completo do nosso PiscaPiscaDetectorDeBotao.java
import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalInput; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.RaspiPin; import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent; import com.pi4j.io.gpio.event.GpioPinListenerDigital;
public class PiscaPiscaDetectorDeBotao { public static void main(String\[\] args) { GpioController gpio = GpioFactory.getInstance(); GpioPinDigitalOutput myLed = gpio.provisionDigitalOutputPin(RaspiPin.GPIO\_04, "MyLed", PinState.LOW); myLed.blink(500);
GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO\_02); myButton.addListener(new GpioPinListenerDigital() { public void handleGpioPinDigitalStateChangeEvent( GpioPinDigitalStateChangeEvent event) { if (event.getState().isHigh()) { System.out.println("Pressionou"); } else { System.out.println("Parou de pressionar"); } } }); } }