Pi4 GPIO Control с Java

Oct 12 2020

Я в основном пытаюсь включить светодиод, используя библиотеку pi4j. Мой код довольно прост:

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

Я экспортирую файл jar со своего компьютера, копирую его на свой Raspberry Pi 4, а не работаю там.

Чтобы проверить, не сломан ли мой светодиод или установлен ли GPIO, я выполнил следующие сценарии Python и вижу, что мой светодиод работает отлично:

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

Что мне не хватает?

Ответы

1 Frank Oct 12 2020 at 13:51

Действительно, как упоминалось в комментариях, Pi4J использует другую схему нумерации контактов. «Под капотом» WiringPi используется для управления GPIO. В этой библиотеке используется другая схема нумерации. Это означает, что вывод 17 BCM, который вы используете в Python, является выводом 0 в схеме WiringPi.

См. Ниже полную таблицу с BCM, WiringPi и физической нумерацией контактов (см. Ссылку 2 ниже).

Кроме того, внутренняя проводка Raspberry Pi 4 отличается от предыдущих, поэтому вам необходимо обновить WiringPi до последней версии 2.52 с помощью:

$ 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

В качестве побочного примечания: мы работаем над новой версией Pi4J, которая упростит работу, но в процессе ... ;-)

Больше информации в моих сообщениях в блоге:

  1. Использование Pi4j (V1) на Raspberry Pi 4
  2. История Raspberry Pi, версии, контакты и заголовки как библиотека Java Maven
  3. Журнал Oracle Java: начало работы с JavaFX на Raspberry Pi