pi4j串行通信锁定在raspi4上

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

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

  1. [...]
  2. serial = SerialFactory.createInstance();
  3. serial.addListener(new SerialDataEventListener() {
  4. @Override
  5. public void dataReceived(SerialDataEvent serialDataEvent) {
  6. try {
  7. System.out.println(serialDataEvent.getHexByteString());
  8. byte [] response = serialDataEvent.getBytes();
  9. [...]
  10. serial.open(new SerialConfig()); //Serial Config:/dev/ttyAMA0 (9600,8N1) {FC:NONE}
  11. serial.write(generateReceiveDataCommand());
  12. [...]
  13. private byte[] generateReceiveDataCommand(){
  14. return new byte [] {(byte)0xFF, (byte)0x01, (byte)0x86, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x79};
  15. }

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

  1. "main" #1 prio=5 os_prio=0 tid=0xb4f08800 nid=0x63c runnable [0xb511e000]
  2. java.lang.Thread.State: RUNNABLE
  3. at com.pi4j.jni.Serial.write(Native Method)
  4. - locked <0xa32d1258> (a java.lang.Class for com.pi4j.jni.Serial)
  5. at com.pi4j.jni.Serial.write(Serial.java:683)
  6. - locked <0xa32d1258> (a java.lang.Class for com.pi4j.jni.Serial)
  7. at com.pi4j.io.serial.impl.SerialImpl.write(SerialImpl.java:730)
  8. at com.pi4j.io.serial.impl.AbstractSerialDataWriter.write(AbstractSerialDataWriter.java:68)
  9. at de.tn8.impl.MHZ19B.getData(MHZ19B.java:78)
  10. at de.tn8.main.UseCases.doMHZ19BUseCase(UseCases.java:29)
  11. 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有关。有人能帮忙吗?

暂无答案!

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

相关问题