如何从串口读取GPS数据

How to read GPS data from serial port

我正在尝试从 BU-353S4 USB GPS 读取串口输入的数据。就可读的 NMEA 句子而言,我一无所获。 GPS 与 Raspberry Pi.

完美配合

这适用于 .NET 控制台应用程序。网上到处都有类似的问题,但 none 的样本似乎有效。

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。一旦我按照 this SuperUser post 中的步骤将其切换到 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();