Control Pi4 GPIO con Java

Oct 12 2020

Básicamente estoy tratando de encender un led usando la biblioteca pi4j. Mi código es bastante simple:

public static void main(String args[]) throws InterruptedException {
    GpioController gpioController = GpioFactory.getInstance();
    GpioPinDigitalOutput pinOut = gpioController.provisionDigitalOutputPin(RaspiPin.GPIO_17);
    pinOut.high();
    Thread.sleep(5000);
    pinOut.low();
}

Estoy exportando el archivo jar desde mi computadora, copiando a mi Raspberry Pi 4 y luego ejecutándolo allí.

Para verificar si mi led no está roto o si GPIO está configurado, ejecuté los siguientes scripts de Python y veo que mi led funciona perfectamente:

python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.output(17,True)

¿Qué me estoy perdiendo?

Respuestas

1 Frank Oct 12 2020 at 13:51

De hecho, como se menciona en los comentarios, Pi4J está utilizando un esquema de numeración de pines diferente. "Bajo el capó", WiringPi se utiliza para controlar los GPIO. Esta biblioteca utiliza un esquema de numeración diferente. Esto significa que el pin 17 de BCM que está utilizando en Python es el pin 0 en el esquema WiringPi.

Vea a continuación una tabla completa con BCM, WiringPi y numeración de pines físicos (consulte el enlace 2 a continuación).

Además, el cableado interno de la Raspberry Pi 4 es diferente en comparación con los anteriores, por lo que deberá actualizar su WiringPi a la última versión 2.52 con:

$ gpio -v gpio version: 2.50 $ cd /tmp
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb $ sudo dpkg -i wiringpi-latest.deb
$ gpio -v
gpio version: 2.52

Como nota al margen: estamos trabajando en una nueva versión de Pi4J que hará las cosas más fáciles, pero trabajo en progreso ... ;-)

Más información en las publicaciones de mi blog sobre:

  1. Usando Pi4j (V1) en la Raspberry Pi 4
  2. Historial, versiones, pines y encabezados de Raspberry Pi como una biblioteca Java Maven
  3. Oracle Java Magazine: Introducción a JavaFX en Raspberry Pi