Controllo GPIO Pi4 con Java
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
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:
- Utilizzando Pi4j (V1) su Raspberry Pi 4
- Cronologia, versioni, pin e intestazioni di Raspberry Pi come libreria Java Maven
- Oracle Java Magazine: Introduzione a JavaFX su Raspberry Pi