Programar Raspberry Pi con Java

En éste tutorial veremos como podemos desarrollar nuestros proyectos electrónicos mediante el lenguaje orientado a objetos por excelencia; Java, con la librería Pi4J, desarrollada específicamente para el cometido.

Requisitos:

  1. Java Runtime(JRE/JDK) <Pre-instalado en Raspbian Stretch>.

  2. Librería WiringPi <Pre-instalado en Raspbian Stretch>.

  3. Raspberry Pi.
  4. 2 Led 5mm.
  5. 2 Resistencias THT 220Ω.
  6. 1 Botón Pulsador. 

Instalación:

Abrimos la Terminal e introducimos:

  • curl -s get.pi4j.com | sudo bash

Esto agregará el repositorio Pi4J, su clave GPG correspondiente, actualiza nuestro repositorio para incluir Pi4J, posteriormente instala Pi4J.

Para desinstalar todo tecleamos lo siguiente:

  • curl -s get.pi4j.com/uninstall | sudo bash

Los ejemplos son instalados en la carpeta:

  • /opt/pi4j/examples

Podemos ver la lista de ejemplos con:

  • ls /opt/pi4j/examples

Con el siguiente comando podemos compilar todos los ejemplos:

  • /opt/pi4j/examples/build

Esto compilará los 66 ejemplos, dándole a cada archivo de salida la extensión .java, Ej: ControlGpioExample.java.

Los ejemplos pueden ser ejecutados de las siguientes maneras:

  • sudo pi4j –run -Dpi4j.linking=dynamic BlinkGpioExample

  • sudo java -Dpi4j.linking=dynamic -classpath .:classes:/opt/pi4j/lib/’*’ BlinkGpioExample
  • ./run -Dpi4j.linking=dynamic BlinkGpioExample

Como podemos observar tenemos 3 formas diferentes de ejecutar nuestro proyecto. El link dinámico es necesario, ya que, por actualizaciones del kernel, registra el controlador BCM2385, pero espera ver el BCM2708 y BCM2709, dándonos un error, sobre que nuestra Raspberry Pi, no lo es. Con esa instrucción podemos ejecutar el programa tranquilamente.

Uso de la librería:

Paquetes disponibles para importar:

  1. import com.pi4j.io.gpio.GpioController;

  2. import com.pi4j.io.gpio.GpioFactory;

  3. import com.pi4j.io.gpio.GpioPin;

  4. import com.pi4j.io.gpio.GpioPinDigitalInput;

  5. import com.pi4j.io.gpio.GpioPinDigitalOutput;

  6. import com.pi4j.io.gpio.PinDirection;

  7. import com.pi4j.io.gpio.PinMode;

  8. import com.pi4j.io.gpio.PinPullResistance;

  9. import com.pi4j.io.gpio.PinState;

  10. import com.pi4j.io.gpio.RaspiPin;

  11. import com.pi4j.io.gpio.trigger.GpioCallbackTrigger;

  12. import com.pi4j.io.gpio.trigger.GpioPulseStateTrigger;

  13. import com.pi4j.io.gpio.trigger.GpioSetStateTrigger;

  14. import com.pi4j.io.gpio.trigger.GpioSyncStateTrigger;

  15. import com.pi4j.io.gpio.event.GpioPinListener;

  16. import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;

  17. import com.pi4j.io.gpio.event.GpioPinEvent;

  18. import com.pi4j.io.gpio.event.GpioPinListenerDigital;

  19. import com.pi4j.io.gpio.event.PinEventType;

Veámoslo un poco más claro

Control de Gpio con Pi4j:

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 ControlGpioExample {
  public static void main(String[] args) throws InterruptedException {
    System.out.println(“Control Gpio ...comenzo.”);
    final GpioController gpio = GpioFactory.getInstance();
    final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, “miLed”, PinState.HIGH);
    pin.setShutdownOptions(true, PinState.LOW);
    System.out.println(“el estado del Gpio sera: ON”);
    Thread.sleep(5000);
    pin.low();
    System.out.println(“el estado del Gpio sera: OFF”);
    Thread.sleep(5000);
    pin.toggle();
    System.out.println(“el estado del Gpio sera: ON”);
    Thread.sleep(5000);
    pin.toggle();
    System.out.println(“el estado del Gpio sera: OFF”);
    Thread.sleep(5000);
    System.out.println(“el estado del Gpio sera: ON por 1 segundo”);
    pin.pulse(1000,true);
    gpio.shutdown();
    System.out.println(“Saliendo del programa ControlGpio”);
  }
}

Diagrama de conexión

Si no hubiésemos compilado los ejemplos, podemos compilar éste de la siguiente manera:

  • cd /opt/pi4j/examples

  • javac -classpath .:classes:/opt/pi4j/lib/’*’ -d . ControlGpioExample
  • En Geany: javac -classpath .:classes:/opt/pi4j/lib/’*’ “%f”

Ejecutamos:

  • sudo java -Dpi4j.linking=dynamic -classpath .:classes:/opt/pi4j/lib/’*’ ControlGpioExample

Blink con Java en Geany

Configurar Geany

Vamos a ConstruirEstablecer los comandos de construcción.

En Compilar, ingresamos lo siguiente en el campo Comando:

  • javac -classpath .:classes:/opt/pi4j/lib/’*’ “%f”

En Ejecutar, ingresamos lo siguiente en el campo Comando:

  •  sudo java -Dpi4j.linking=dynamic -classpath .:classes:/opt/pi4j/lib/’*’ “%e”

Conexión:

Código:

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.PinPullResistance;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;

public class BlinkGpioExample {

    public static void main(String[] args) throws InterruptedException {

        System.out.println("<--Pi4J--> GPIO Blink Example ... started.");

        // creamos la instancia gpio controller
        final GpioController gpio = GpioFactory.getInstance();

        // designamos los pines gpio 1 y 3 como salidas
        final GpioPinDigitalOutput led1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01);
        final GpioPinDigitalOutput led2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_03);

        // declaramos Gpio 2 como entrada con su resistencia interna pulldown habilitada.
   final GpioPinDigitalInput myButton = gpio.provisionDigitalInputPin(RaspiPin.GPIO_02, PinPullResistance.PULL_DOWN);

        // creamos y registramos la lectura de pines
        myButton.addListener(new GpioPinListenerDigital() {
                @Override
                public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
                    // cuando presionamos un botón, aceleramos el parpadeo en LED #2 a 200ms sino a 1 segundo.
                    if(event.getState().isHigh()){
                      led2.blink(200);
                    }
                    else{
                      led2.blink(1000);
                    }
                }
            });

        // continuamente parpadea led 1 cada medio segundo por 15 segundos.
        led1.blink(500, 15000);

        // continuamente parpadea cada 1 segundo led 2
        led2.blink(1000);

        System.out.println(" ... el LED parpadeara continuamente hasta finalizar el programa.");
        System.out.println(" ... PRESIONA <CTRL-C> para detener el PROGRAMA.");

        // Loop
        while(true) {
            Thread.sleep(500);
        }

        // Detenemos toda actividad en los pines
        // gpio.shutdown();   <--- usamos este metodo si queremos detener Pi4J GPIO controller, descomentando.
    }
}

Ejecutamos con:

  • ./run -Dpi4j.linking=dynamic BlinkGpioExample

  • sudo java -Dpi4j.linking=dynamic -classpath .:classes:/opt/pi4j/lib/’*’ BlinkGpioExample
  • sudo pi4j -run -Dpi4j.linking=dynamic BlinkGpioExample

Gracias por leer DitecnoMakers, pueden ver mis otros post aquí: Luciano

views
29

ElectroMercado

  • programación | raspberry_pi
2 Comentarios
  1. DitecnoDigital
    DitecnoDigital 8 meses

    Genio, la programación orientada a objetos es el futuro de la programación ya que es escalable, se tiene clases, herencia, polimorfismo y es una programación mas natural y lógica para los seres humanos, sea cual sea el lenguaje. Yo prefiero c# pero Java es un lenguaje ampliamente usado. Saludos

    1+
  2. carlitos145
    carlitos145 8 meses

    Muy buen post, gracias

    1+

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account