树莓派闪烁LED问题 - Python与Java对比

14

我试图使用在网上找到的一些代码使树莓派上的LED灯闪烁(我知道不是最好的方法,但这是一个教程网站)。

当我运行以下Python代码时,LED灯会闪烁:

import RPi.GPIO as GPIO
import time
pinNum = 4
GPIO.setmode(GPIO.BCM) #numbering scheme that corresponds to breakout board and pin layout
GPIO.setup(pinNum,GPIO.OUT) #replace pinNum with whatever pin you used, this sets up that pin as an output
#set LED to flash forever
while True:
  GPIO.output(pinNum,GPIO.HIGH)
  time.sleep(0.5)
  GPIO.output(pinNum,GPIO.LOW)
  time.sleep(0.5)

当我运行以下Java代码,它应该做相同的事情-但我只能看到我添加的打印语句,没有闪烁的灯

import com.pi4j.io.gpio.GpioController;  
 import com.pi4j.io.gpio.GpioFactory;  
 import com.pi4j.io.gpio.GpioPinDigitalOutput;  
 import com.pi4j.io.gpio.PinState;  
 import com.pi4j.io.gpio.RaspiPin;  

 public class ControlGpioExample {  
  public static void main(String[] args) throws InterruptedException {  
     final GpioController gpio = GpioFactory.getInstance();  
     final GpioPinDigitalOutput ledPin = gpio.provisionDigitalOutputPin(RaspiPin
.GPIO_04, "MyLED", PinState.LOW);  
     System.out.println("Started");
     try  
     {  
       while(true)  
       {
         System.out.println(ledPin==null);
         System.out.println("Looping pin now"); 
         ledPin.high();
         System.out.println("Set high called");  
         Thread.sleep(2000);  
         ledPin.low();  
         System.out.println("Set low called");
         Thread.sleep(2000);  
       }  
     }  
     catch(Exception ex)  
     {  
       gpio.shutdown();  
       ex.printStackTrace();  
     }  
   }  
 }  

有人知道这可能是为什么吗?我认为从逻辑上讲,它们应该做相同的事情-两者都使用pi的相同GPIO引脚号码

谢谢你的帮助


你确定两个引脚映射到同一个“物理”引脚吗?这里 http://pi4j.com/usage.html 的“引脚编号”标题下的图表似乎将它们枚举为与设计规范不同。鉴于操作成功,我认为您可能没有使用正确的引脚索引。 - Bartvbl
2个回答

11

Python GPIO代码中的GPIO_4对应于此示意图

enter image description here

pi4j对应于下面的这个示意图

enter image description here

因此,GPIO_04位于完全不同的位置! 您应该更改Java代码以使用GPIO_07

这里有一个解释 ,说明为什么wiringpi对引脚有不同的名称。它们都使用GPIO_XX,这非常令人困惑。


只是好奇:为什么您要提供一个额外的答案,而这个答案与已经存在的答案完全相同? - Bartvbl
@Bartvbl,通知上说“这个问题没有得到足够的关注”,所以我给它多加了一些关注。至少有两个人发现它很有用。 - John La Rooy
啊,我以为那意味着它需要更多的视图。 - Bartvbl

10
我认为您的引脚编号可能有误。由于Java代码没有抛出例外,我认为其中一个引脚已被激活,但其索引与LED所连接的不同。
Pi4J文档列出了引脚编号参考表:https://projects.drogon.net/raspberry-pi/wiringpi/pins/
您的Python代码使用的是BCM索引模式,其端口映射在该表中列出。在这种情况下,BCM端口4将映射到Pi4j中的GPIO_7,而不是您在Java代码中使用的GPIO_4。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接