Pi4 GPIO Control с Java
Я в основном пытаюсь включить светодиод, используя библиотеку 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)
Что мне не хватает?
Ответы
Действительно, как упоминалось в комментариях, 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, которая упростит работу, но в процессе ... ;-)
Больше информации в моих сообщениях в блоге:
- Использование Pi4j (V1) на Raspberry Pi 4
- История Raspberry Pi, версии, контакты и заголовки как библиотека Java Maven
- Журнал Oracle Java: начало работы с JavaFX на Raspberry Pi