如何从串口读取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();
我正在尝试从 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();