Controllo GPIO Pi4 con Java

Oct 12 2020

Fondamentalmente sto cercando di accendere un led usando la libreria pi4j. Il mio codice è piuttosto semplice:

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();
}

Sto esportando il file jar dal mio computer, copiandolo sul mio Raspberry Pi 4 che in esecuzione lì.

Per verificare se il mio led non è rotto o GPIO è impostato, ho eseguito i seguenti script Python e vedo che il mio led funziona perfettamente:

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

Cosa mi manca?

Risposte

1 Frank Oct 12 2020 at 13:51

Infatti, come accennato nei commenti, Pi4J utilizza uno schema di numerazione dei pin diverso. "Sotto il cofano", WiringPi viene utilizzato per controllare i GPIO. Questa libreria utilizza uno schema di numerazione diverso. Ciò significa che il pin 17 di BCM che stai utilizzando in Python è il pin 0 nello schema WiringPi.

Vedere di seguito una tabella completa con BCM, WiringPi e numerazione dei pin fisici (vedere il collegamento 2 di seguito).

Inoltre, il cablaggio interno del Raspberry Pi 4 è diverso rispetto ai precedenti, quindi dovrai aggiornare il tuo WiringPi all'ultima versione 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

Come nota a margine: stiamo lavorando a una nuova versione di Pi4J che renderà le cose più facili, ma work-in-progress ... ;-)

Maggiori informazioni nei post del mio blog su:

  1. Utilizzando Pi4j (V1) su Raspberry Pi 4
  2. Cronologia, versioni, pin e intestazioni di Raspberry Pi come libreria Java Maven
  3. Oracle Java Magazine: Introduzione a JavaFX su Raspberry Pi