在按照“使用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字节。 想法和提示(当然还有解决方案:-)非常受欢迎...... 最好的问候!