Проблесковый светодиодный индикатор Raspberry pi - Python vs Java
Я пытаюсь сделать светодиодную вспышку на малине pi, используя код, который я нашел онлайн (я знаю - не самый лучший, но это был учебный сайт)
Когда я запускаю следующий код 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();
}
}
}
Кто-нибудь знает, почему это может быть? Я думаю, что логично, что нужно делать то же самое - оба используют один и тот же номер вывода GPIO из pi тоже
Спасибо за помощь
Ответы
Ответ 1
Я считаю, что ваши номера контактов могут быть выключены. Поскольку код java не генерирует исключений, я бы предположил, что один из контактов активирован, но имеет другой индекс, чем тот, к которому подключен ваш светодиод.
Документация Pi4J перечисляет эту таблицу для ссылки на номер ссылки: https://projects.drogon.net/raspberry-pi/wiringpi/pins/
В вашем коде python используется индексный режим BCM, сопоставления портов которого указаны в таблице. В этом случае порт 4 BCM сопоставляется с GPIO_7 в Pi4j вместо GPIO_4, который вы используете в своем java-коде.
Ответ 2
GPIO_4 в коде GPIO Python соответствует этой диаграмме
![enter image description here]()
pi4j соответствует диаграмме ниже
![enter image description here]()
Итак, GPIO_04 находится в совершенно другом месте! Вы должны изменить java-код для использования GPIO_07
Вот объяснение, почему wiringpi имеет разные имена для контактов. Это очень запутывает, что они оба используют GPIO_XX