pi4j串行通信锁定在raspi4上

6ss1mwsb  于 2021-07-08  发布在  Java
关注(0)|答案(0)|浏览(193)

昨天我通过txd0和rxd0端口将mh-z19b连接到我的raspberry 4,并使用pi4j发送和读取数据

[...]
serial = SerialFactory.createInstance();

        serial.addListener(new SerialDataEventListener() {
            @Override
            public void dataReceived(SerialDataEvent serialDataEvent) {
                try {
                    System.out.println(serialDataEvent.getHexByteString());
                    byte [] response = serialDataEvent.getBytes();
[...]
serial.open(new SerialConfig()); //Serial Config:/dev/ttyAMA0 (9600,8N1) {FC:NONE}
serial.write(generateReceiveDataCommand());
[...]

 private byte[] generateReceiveDataCommand(){
        return new byte [] {(byte)0xFF, (byte)0x01, (byte)0x86, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x79};
    }

这个代码昨天运行得非常好。我启动和停止程序好几次,并宣读了大量的数据。
然而,当我打开我的树莓并执行代码时,我没有得到任何结果。当我将线程设为哑巴时,我得到以下消息:

"main" #1 prio=5 os_prio=0 tid=0xb4f08800 nid=0x63c runnable [0xb511e000]
   java.lang.Thread.State: RUNNABLE
    at com.pi4j.jni.Serial.write(Native Method)
    - locked <0xa32d1258> (a java.lang.Class for com.pi4j.jni.Serial)
    at com.pi4j.jni.Serial.write(Serial.java:683)
    - locked <0xa32d1258> (a java.lang.Class for com.pi4j.jni.Serial)
    at com.pi4j.io.serial.impl.SerialImpl.write(SerialImpl.java:730)
    at com.pi4j.io.serial.impl.AbstractSerialDataWriter.write(AbstractSerialDataWriter.java:68)
    at de.tn8.impl.MHZ19B.getData(MHZ19B.java:78)
    at de.tn8.main.UseCases.doMHZ19BUseCase(UseCases.java:29)
    at de.tn8.main.App.main(App.java:29)

有时它会被锁在 serial.open(new SerialConfig()); 有时如上图所示 serial.write(generateReceiveDataCommand()) 这绝对是奇怪的,因为我没有改变任何代码。
我还实现了一些python代码来发送和读取数据(相同的设置:/dev/ttyama0(9600,8n1){fc:none})。这个还能用。所以它与java或pi4j有关。有人能帮忙吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题