Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Raspberry Pi Java Pi4j gpio不是';但是,它不适用于我,但适用于python_Java_Raspberry Pi_Pi4j - Fatal编程技术网

Raspberry Pi Java Pi4j gpio不是';但是,它不适用于我,但适用于python

Raspberry Pi Java Pi4j gpio不是';但是,它不适用于我,但适用于python,java,raspberry-pi,pi4j,Java,Raspberry Pi,Pi4j,我是一个老java程序员,将代码从桌面翻译成Raspberry Pi,目的是在硬件接口中嵌入软件 我连接了一个16*2字符的LCD显示器,它与Python代码一起工作,但是当我使用pi4j库通过Java访问GPIO时,屏幕是空白的 我是否缺少一个二进制开/关开关 我在一个A+Pi上运行pi4j1.2,克服了影响Pi布线的1.1处理器错误 感谢阅读,任何建议都将不胜感激 import com.pi4j.component.lcd.LCDTextAlignment; import com.pi4j.

我是一个老java程序员,将代码从桌面翻译成Raspberry Pi,目的是在硬件接口中嵌入软件

我连接了一个16*2字符的LCD显示器,它与Python代码一起工作,但是当我使用pi4j库通过Java访问GPIO时,屏幕是空白的

我是否缺少一个二进制开/关开关

我在一个A+Pi上运行pi4j1.2,克服了影响Pi布线的1.1处理器错误

感谢阅读,任何建议都将不胜感激

import com.pi4j.component.lcd.LCDTextAlignment;
import com.pi4j.component.lcd.impl.GpioLcdDisplay;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.system.NetworkInfo;

public class LCD {

    public static void main(String args[]) {
        System.out.println("SYSTEM PRINT TEST");
        GpioController gpio = GpioFactory.getInstance();
        GpioLcdDisplay lcd = new GpioLcdDisplay(2,16,
            RaspiPin.GPIO_26,
            RaspiPin.GPIO_31,
            RaspiPin.GPIO_15,
            RaspiPin.GPIO_16,
            RaspiPin.GPIO_01,
            RaspiPin.GPIO_04);

        lcd.clear();
        Thread.sleep(1000);

        lcd.write(0, "LINE 1 TEST");
        lcd.write(1, "LINE 2 TEST");

        Thread.sleep(2000);
        gpio.shutdown();
    }
}

这个行话代码上的pin编号与原始基础wiringPi编号之间的差异是造成这种挫折感的原因。这里是修改后的代码,其中gpio 25对应于wiringPi 6,而不是26!请记住将wiringPi和pi4j更新至最新版本

import com.pi4j.wiringpi.Gpio;
import com.pi4j.wiringpi.Lcd;

public class LCD {

    public final static int LCD_ROWS = 2;
    public final static int LCD_COLUMNS = 16;
    public final static int LCD_BITS = 4;

    public static  void main(String args[]) {

        System.out.println("SYSTEM PRINT TEST");

        if (Gpio.wiringPiSetup() == -1) {
            System.out.println("GPIO SETUP ERROR");
            return;
        }

        int lcdHandle= Lcd.lcdInit(LCD_ROWS,
                                   LCD_COLUMNS,
                                   LCD_BITS,
                                   6,
                                   5,
                                   15,
                                   16,
                                   1,
                                   4,
                                   0,
                                   0,
                                   0,
                                   0);

        if (lcdHandle == -1) {
            System.out.println("LCD INIT ERROR");
            return;
        }

        Lcd.lcdDisplay(lcdHandle,1);
        Lcd.lcdClear(lcdHandle);

        Lcd.lcdPuts (lcdHandle, "LCD TEST LINE 1") ;

        Lcd.lcdPosition (lcdHandle, 0, 1) ; 
        Lcd.lcdPuts (lcdHandle, "LCD TEST LINE 2") ;

try {
     Thread.sleep(10000);
    } catch (Exception e) {}
     Lcd.lcdDisplay(lcdHandle,0);  

    }
}

在花了几个小时的时间把头撞在桌子上之后,我决定用谷歌搜索

google.com>>raspberry pi java gpio不工作python工作

这让我想到了这个问题,出于某种原因,这个问题被否决了3次,但这正是我所经历的

我搜索的第二个结果是这个问题:

这让我意识到,我需要添加这行代码,因为pi4j默认使用不同的引脚布局

GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));
这还不够,但这个问题让我想到了这个问题/答案:

这解释了我需要将gpio二进制文件更新为v2.52


此示例Python代码正常工作:

但是我尝试使用pi4jjava库的尝试失败得很惨

这是我的工作Java代码:

//This line was initially not here, it is part of the solution
GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));

gpio = GpioFactory.getInstance();
    
in2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_16, "IN2", PinState.LOW);
in1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_20, "IN1", PinState.LOW);
en = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_21, "EN", PinState.LOW);
    
//Going forwards
in1.high();
in2.low();
en.high();
   
Thread.sleep(5000);
       
//Going backwards
in1.low();
in2.high();
en.high();
    
Thread.sleep(5000);
    
// stop           
en.low();
in2.low();
    
gpio.shutdown();

您如何知道java代码的工作原理?运行python程序显示python库和您的硬件连接工作正常,但这并没有告诉我java代码不工作的原因。您也可以尝试一下。添加了最少的代码作为参考,开发者是对的,我不知道这是否有效。
//This line was initially not here, it is part of the solution
GpioFactory.setDefaultProvider(new RaspiGpioProvider(RaspiPinNumberingScheme.BROADCOM_PIN_NUMBERING));

gpio = GpioFactory.getInstance();
    
in2 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_16, "IN2", PinState.LOW);
in1 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_20, "IN1", PinState.LOW);
en = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_21, "EN", PinState.LOW);
    
//Going forwards
in1.high();
in2.low();
en.high();
   
Thread.sleep(5000);
       
//Going backwards
in1.low();
in2.high();
en.high();
    
Thread.sleep(5000);
    
// stop           
en.low();
in2.low();
    
gpio.shutdown();