我正在尝试使用我在网上找到的一些代码在树莓派上制作一个LED灯闪光灯(我知道 - 不是最好但是它是一个教程网站)
当我运行以下python代码时,指示灯闪烁;
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引脚号
感谢您的帮助
答案 0 :(得分:11)
Python GPIO代码中的GPIO_4对应于此图
pi4j对应下图
所以GPIO_04位于一个完全不同的位置!您应该更改Java代码以使用GPIO_07
Here's an explanation为什么wirespi有不同的引脚名称。他们都使用GPIO_XX
非常令人困惑答案 1 :(得分:10)
我相信您的密码可能已关闭。由于java代码没有抛出异常,我认为其中一个引脚可能被激活,但其索引的索引与LED连接的索引不同。
Pi4J的文档列出了此表的引脚号参考:https://projects.drogon.net/raspberry-pi/wiringpi/pins/
您的python代码使用BCM索引模式,其端口映射在表中列出。在这种情况下,BCM端口4映射到Pi4j中的GPIO_7,而不是您在java代码中使用的GPIO_4。