繁体   English   中英

如何从串口读取GPS数据

[英]How to read GPS data from serial port

我正在尝试从 BU-353S4 USB GPS 读取来自串行端口的数据。 就可读的 NMEA 句子而言,我一无所获。 GPS 与 Raspberry Pi 完美搭配。

这适用于 .NET 控制台应用程序。 web 中到处都有类似的问题,但似乎没有一个示例有效。

var port = new SerialPort
{
    PortName = "COM5",
    BaudRate = 4800,
    Parity = Parity.None,
    DataBits = 8,
    StopBits = StopBits.One,
};
port.DataReceived += Port_DataReceived;


private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    string line = "";
    SerialPort port = (SerialPort)sender;
    line = port.ReadExisting();
    Console.Write(line);
}

和...

private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort port = (SerialPort)sender;
    var count = port.BytesToRead;
    var buffer = new byte[count];
    port.Read(buffer, 0, count);
    var line = Encoding.ASCII.GetString(buffer);
    Console.Write(line);
}

无论我尝试什么,我都会得到类似的结果:

?)))))(((((#Y?""???????? ??z ?----------?D??

?J?&%%%%%%%%%?? ?%$$$$$$$$$f Qx?++++******?? ? ? #???? ) xm???? =?? ? ??? ??? ]? 吨? D0?? ??? 3 4?? 2\

原来 GPS 发送的是 SiRF 而不是 NMEA。 一旦我按照此 SuperUser 帖子中的步骤将其切换到 NMEA,一切正常!

这个问题与波特率有关。 尝试将您的值更改为与您的设备兼容的值。

我收到了这个错误,这就是我为解决这个问题所做的:

_GPSReceiver = new SerialPort("COM9");
_GPSReceiver.ReceivedBytesThreshold = 1024;
_GPSReceiver.ReadTimeout = 5000;
_GPSReceiver.BaudRate = 4800;
_GPSReceiver.Parity = Parity.None;
_GPSReceiver.StopBits = StopBits.One;
_GPSReceiver.DataBits = 7;
_GPSReceiver.Handshake = Handshake.None;
_GPSReceiver.Encoding = ASCIIEncoding.ASCII;

_GPSReceiver.DataReceived += new SerialDataReceivedEventHandler(GPSReceiver_DataReceived);
_GPSReceiver.Open();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM