有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

覆盆子Pi4与Pi4j Java

我正在尝试使用pi4j java库v1在我的Raspberry Pi4上运行一个简单的测试。2.不知怎的,它什么也没做。我在控制台上也没有看到任何错误。2秒后就结束了。 我希望LED灯在2秒钟后打开和关闭

我还将我的gpio二进制文件更新为v2。52根据这个{a1}但还是一样。另外,命令gpio write 19 1没有做任何事情

GPIO

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完全不兼容吗


共 (2) 个答案

  1. # 1 楼答案

    似乎它的答案如下:

    看起来Pi4j使用了不同的管脚编号方案。“发动机罩下”,WiringPi用于控制GPIO

    因此,我需要告诉它使用Broadcom pin编号方案,使用:

    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();
     }
    }
    
  2. # 2 楼答案

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

    这在我的书Getting Started with Java on the Raspberry Pi中有进一步的描述。是的,我知道,这是无耻的自我推销;-)

    enter image description here