1

我正在尝试使用 pi4j java library v1.2 在我的 Raspberry Pi4 上运行一个简单的测试。不知何故,它什么也没做。我也没有在控制台上看到任何错误。它仅在 2 秒后完成。我预计 LED 灯会在 2 秒后打开并关闭。

我还根据此https://stackoverflow.com/a/63433316/607637将我的 gpio 二进制文件更新为 v2.52,但它仍然相同。此外,该命令gpio write 19 1没有做任何事情。

通用输入输出接口

pi@gtpi:~ $ gpio -v
gpio version: 2.52
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 4B, Revision: 02, Memory: 4096MB, Maker: Sony 
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.
pi@gtpi:~ $ gpio write 19 1  ///---> this also doesn't do anything


Java 应用程序:使用 com.pi4j:pi4j-core:1.2

import com.pi4j.io.gpio.*;
public class Pi4 {
  public static void main(String[] a) throws Exception {
    GpioPinDigitalOutput op = GpioFactory.getInstance().provisionDigitalOutputPin(RaspiPin.GPIO_19);

    op.high();
    Thread.sleep(2000);
    op.low();
 }
}

但是,我编写的执行相同操作的 python 脚本正在工作:

from gpiozero import LED
from time import sleep

red = LED(19)
red.on()
sleep(2)
red.off()

问题:我还需要做什么才能使 Java 应用程序正常工作(打开 LED)?它根本不兼容Pi4吗?

4

2 回答 2

3

它似乎在这里得到了回答:

看起来 Pi4j 正在使用不同的引脚编号方案。“在幕后”,WiringPi 用于控制 GPIO。

所以,我需要告诉它使用 Broadcom 引脚编​​号方案:

GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));

现在它的工作:

import com.pi4j.io.gpio.*;
public class Pi4 {
  public static void main(String[] a) throws Exception {
    GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));

    GpioPinDigitalOutput op = GpioFactory.getInstance().provisionDigitalOutputPin(RaspiPin.GPIO_19);

    op.high();
    Thread.sleep(2000);
    op.low();
 }
}
于 2020-10-29T04:01:47.447 回答
1

实际上 Pi4J 默认使用 WiringPi 编号方案。这是一个很好的概述,其中您的物理引脚编号 (1-40)、BMC 和 WiringPi (WPI) 彼此相邻。

这在我的书“在 Raspberry Pi 上使用 Java 入门”中有进一步的描述。是的,我知道,这是无耻的自我推销;-)

在此处输入图像描述

于 2020-10-30T08:42:56.513 回答