Controle GPIO Pi4 com Java
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
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:
- Usando Pi4j (V1) no Raspberry Pi 4
- História, versões, pins e cabeçalhos do Raspberry Pi como uma biblioteca Java Maven
- Oracle Java Magazine: Introdução ao JavaFX no Raspberry Pi