簡體   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