Raspberry Pi:使用Pi4J从UART读取数据

时间:2016-11-23 06:48:06

标签: java gwt raspberry-pi2 uart

在按照“使用Pi4J进行串行通信示例”示例时,我从Raspberry Pi的UART(/ dev / ttyAMA0)读取数据时遇到问题

http://pi4j.com/example/serial.html

    // create an instance of the serial communications class
    final Serial serial = SerialFactory.createInstance();

    SerialConfig config = new SerialConfig();

    // set default serial settings (device, baud rate, flow control, etc)
    //
    // by default, use the DEFAULT com port on the Raspberry Pi (exposed on GPIO header)
    // NOTE: this utility method will determine the default serial port for the
    //       detected platform and board/model.  For all Raspberry Pi models
    //       except the 3B, it will return "/dev/ttyAMA0".  For Raspberry Pi
    //       model 3B may return "/dev/ttyS0" or "/dev/ttyAMA0" depending on
    //       environment configuration.
    config.device(SerialPort.getDefaultPort());
    config.baud(Baud._38400);
    config.dataBits(DataBits._8);
    config.parity(Parity.NONE);
    config.stopBits(StopBits._1);
    config.flowControl(FlowControl.NONE);

    // open the default serial device/port with the configuration settings
    serial.open(config);

回调方法是:

    // create and register the serial data listener
    serial.addListener(new SerialDataEventListener()
    {
        @Override
        public void dataReceived(SerialDataEvent event)
        {
            byte[] receivedBytes = event.getBytes();
            ....

问题是: 我确定每2秒就会有192个字节被“我的其他硬件”发送到UART。 但我的回调方法没有收到192字节,但有时是16,然后是97,然后是141,......等等。

添加

event.discardData();

阅读事件后至少阻止我收到0字节...

当我在GWT应用程序的服务器端读取UART时会发生这种情况。

使用launchpi

直接在Raspberry Pi上调试时

http://tsvetan-stoyanov.github.io/launchpi/

然后我还收到一些长度小于192字节的数据块,但是经过10 ...... 20秒的“调整时间”后,我主要一次接收192字节,正如我所料(有时 192字节被分成144字节和48字节,但我可以处理。)

我用于使用launchpi和GWT服务器端进行调试的代码当然是相同的。 我的发送者和Raspi作为接收者的波特率相同。

使用GWT时有什么区别,或者通过插入额外的start / stop-Bytes以某种方式同步UART?

我需要在一个块中发送可靠的192字节。 想法和提示(当然还有解决方案:-)非常受欢迎...... 最好的问候!

0 个答案:

没有答案