Controle GPIO Pi4 com Java

Oct 12 2020

Basicamente, estou tentando ligar um led usando a biblioteca pi4j. Meu código é muito simples:

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

Estou exportando o arquivo jar do meu computador, copiando para o meu Raspberry Pi 4 e não executando lá.

Para verificar se meu led não está quebrado ou se o GPIO está configurado, executei os seguintes scripts Python e vejo que meu led funciona perfeitamente:

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

o que estou perdendo?

Respostas

1 Frank Oct 12 2020 at 13:51

Na verdade, conforme mencionado nos comentários, Pi4J está usando um esquema de numeração de pinos diferente. "Sob o capô", WiringPi é usado para controlar os GPIOs. Esta biblioteca usa um esquema de numeração diferente. Isso significa que o pino 17 do BCM que você está usando em Python é o pino 0 no esquema WiringPi.

Veja abaixo uma tabela completa com BCM, WiringPi e numeração de pinos físicos (consulte o link 2 abaixo).

Além disso, a fiação interna do Raspberry Pi 4 é diferente em comparação com os anteriores, então você precisará atualizar seu WiringPi para a versão mais recente 2.52 com:

$ 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 observação lateral: estamos trabalhando em uma nova versão do Pi4J que tornará as coisas mais fáceis, mas trabalho em andamento ... ;-)

Mais informações nas postagens do meu blog sobre:

  1. Usando Pi4j (V1) no Raspberry Pi 4
  2. História, versões, pins e cabeçalhos do Raspberry Pi como uma biblioteca Java Maven
  3. Oracle Java Magazine: Introdução ao JavaFX no Raspberry Pi