Control de circuitos eléctricos con Raspberry Pi: Java

Después de hacer nuestro primer programa en Java, vamos a pasar a controlar un circuito eléctrico a través del GPIO de Raspberry PI.

Previamente hay que descargar las librerías de Java necesarias para trabajar con GPIO que están bajo el proyecto pi4j. En este caso además de poder usar el comando apt-get install pi4j‘ puede hacerlo directamente con el navegador en la URL http://get.pi4j.com/download/pi4j-1.2-SNAPSHOT.deb (Versiones anteriores dan el error “Unable to determine hardware version. I see: Hardware : BCM2835” ) descargándola y ejecutando.

Hay que comprobar que la libreria gpio ya está en el sistema mediante el comando  gpio -v

En JAVA la numeración de los PIN varía y así el 18 pasa a ser el 1 ver aquí.

El programa en JAVA quedaría así:

/**
 * led.java
 * Parpadea el LED 18
 */

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class led
{
 public static void main(String[] args) throws InterruptedException {
 System.out.println("GPIO LED");
 // Crea controlador GPIO
 final GpioController gpio = GpioFactory.getInstance();
 // Pone PIN 18 como salida y ON
 final GpioPinDigitalOutput ledPin = 
 gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01,"LED");
 ledPin.high();
 System.out.println("LED ON");
 Thread.sleep(2000);
 // Pone PIN 18 como salida y OFF
 ledPin.low();
 System.out.println("LED OFF");
 gpio.shutdown();
} 
}

Algunos comentarios:

  • EN JAVA los comentarios pueden ir bloque entre /* y */  o en la linea a continuacion de //
  • Los métodos de la libreria GPIO controller pueden ser consultados en la documentación en linea.
  • Puede ajustarse el estado inicial (p.e. apagado) con gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, “LED”,ledPin.LOW); 
  • Puede programar parpadeo con la instrucción ledpin.blink(1000, 15000);
  • Puede cambiar el estado con  ledPin.toggle();
  • Puede tener un estado un tiempo determinado con ledPin.pulse(1000,true);
  • Para terminar gpio.shutdown();

Para ejecutar la clase led.class necesita ir al terminal y teclear java -classpath .:/opt/pi4j/lib/’*’ led

Programo en Java desde hace más de 15 años y mi conclusión es que en JAVA es muy dificil programar tareas sencillas (Por ejemplo Hola mundo)  pero muy fácil programar tareas complejas (Observe a potencia de los comandos).