nanoFramework.Iot.Device.Common.GnssDevice 1.0.15
前缀已保留
dotnet add package nanoFramework.Iot.Device.Common.GnssDevice --version 1.0.15
NuGet\Install-Package nanoFramework.Iot.Device.Common.GnssDevice -Version 1.0.15
<PackageReference Include="nanoFramework.Iot.Device.Common.GnssDevice" Version="1.0.15" />
paket add nanoFramework.Iot.Device.Common.GnssDevice --version 1.0.15
#r "nuget: nanoFramework.Iot.Device.Common.GnssDevice, 1.0.15"
// Install nanoFramework.Iot.Device.Common.GnssDevice as a Cake Addin #addin nuget:?package=nanoFramework.Iot.Device.Common.GnssDevice&version=1.0.15 // Install nanoFramework.Iot.Device.Common.GnssDevice as a Cake Tool #tool nuget:?package=nanoFramework.Iot.Device.Common.GnssDevice&version=1.0.15
全球导航卫星系统设备 NMEA 0183 - 包括带有 GPS、GNSS、北斗(China Beidou)的通用串行模块 - u-blox 的 NEO6-M、NEO-M8P-2、NEO-M9N,ATGM336H、Minewsemi、ZED-F9P、ZOE-M8Q、SAM-M8Q、SARA-R5 以及许多许多其他设备
此绑定实现了一个基本的全球导航卫星系统(GNSS)设备和通用的串行实现。设备包括一个支持多个卫星导航系统(如 GPS、GNSS、北斗)的通用串行模块。通用串行 GNSS 设备也是可扩展的。直接支持许多串行模块,如 u-blox 的 NEO6-M、NEO-M8P-2、NEO-M9N,ATGM336H、Minewsemi、ZED-F9P、ZOE-M8Q、SAM-M8Q、SARA-R5 以及更多,以支持主要的 NMEA0183 功能。
文档
此绑定实现了一部分 NMEA 0183 的协议和一种扩展处理元素的方法。
《Location》类也与 MAUI 类 Location
一致。由于 .NET nanoFramework 使用 UnitsNet 为航向(包含角度)和速度(包含速度),所以并非一一对应。
连接
只需4根线
GPS/GNSS模块 | MCU引脚头 |
---|---|
电源 | 3.3V / 5V |
地 | 地 |
TX | RX |
RX | TX |
请检查您的模块需要哪种电压。
通用GNSS串行模块的使用
// Some modules like ESP32 requires to setup serial pins
// Configure GPIOs 16 and 17 to be used in UART2 (that's refered as COM3)
Configuration.SetPinFunction(9, DeviceFunction.COM2_RX);
Configuration.SetPinFunction(8, DeviceFunction.COM2_TX);
// By default baud rate is 9600
var gnssDevice = new GenericSerialGnssDevice("COM2");
// Subscribe for events
gnssDevice.FixChanged += FixChanged;
gnssDevice.LocationChanged += LocationChanged;
gnssDevice.OperationModeChanged += OperationModeChanged;
gnssDevice.ParsingError += ParsingError;
gnssDevice.ParsedMessage += ParsedMessage;
// Starts the module
gnssDevice.Start();
各种事件允许您订阅各种行为。其中主要的一个是当 Fix
改变时,意味着,您的模块开始获取适当的数据。
private static void ParsingError(Exception exception)
{
Console.WriteLine($"Received parsed error: {exception.Message}");
}
private static void OperationModeChanged(GnssOperation mode)
{
Console.WriteLine($"Received Operation Mode changed: {mode}");
}
private static void LocationChanged(GeoPosition position)
{
Console.WriteLine($"Received position changed: {position.Latitude},{position.Longitude}");
}
private static void FixChanged(Fix fix)
{
Console.WriteLine($"Received Fix changed: {fix}");
}
通用串行GNSS设备的扩展性
创建自己的 NmeaData 解析器
此类通过使用 ParsedMessage
事件和将 NmeaData
元素添加到 Nmea0183Parser
来扩展。示例显示了如何操作。
以下是处理 TXT 消息的简单示例
using Iot.Device.Common.GnssDevice;
using System;
namespace GnssDevice.Sample
{
/// <summary>
/// Implements a simple TXT data from a GNSS device.
/// </summary>
internal class TxtData : NmeaData
{
/// <inheritdoc/>
public override string MessageId => "TXT";
/// <summary>
/// Gets the decoded text.
/// </summary>
public string Text { get; internal set; }
/// <summary>
/// Gets the severity of the message.
/// </summary>
public MessageSeverity Severity { get; internal set; }
/// <inheritdoc/>
public override NmeaData Parse(string inputData)
{
if (!IsMatch(inputData))
{
throw new ArgumentException();
}
try
{
var subfields = GetSubFields(inputData);
if(subfields.Length < 5)
{
return null;
}
var txt = subfields[4];
var sev = (MessageSeverity)int.Parse(subfields[3]);
return new TxtData(txt, sev);
}
catch (Exception ex)
{
throw new ArgumentException("Invalid NMEA TXT data", ex);
}
}
/// <summary>
/// Initializes a new instance of the <see cref="TxtData"/> class.
/// </summary>
public TxtData()
{ }
/// <summary>
/// Initializes a new instance of the <see cref="TxtData"/> class.
/// </summary>
/// <param name="txt">The TXT entry.</param>
/// <param name="sev">The severity of the message.</param>
public TxtData(string txt, MessageSeverity sev)
{
Text = txt;
Severity = sev;
}
}
public enum MessageSeverity
{
Error = 0,
Warning = 1,
Notice = 2,
User = 7
}
}
一旦设置了您自己的解析器,您需要将其添加到解析器中
// Add the TXT parser in the NMEA Parser
Nmea0183Parser.AddParser(new TxtData());
// on the GNSS device, make sure you add the ParsedMessage event
gnssDevice = new GenericSerialGnssDevice("COM2");
gnssDevice.ParsedMessage += ParsedMessage;
然后您可以在这里获取解析元素
private static void ParsedMessage(NmeaData data)
{
Console.WriteLine($"Received parsed message: {data.GetType()}");
if (data is TxtData txtData)
{
Console.WriteLine($"Received TXT message: {txtData.Text}, severity: {txtData.Severity}");
}
}
如果您想用您自己的替换现有的解析器,您可以将其从 Nmea0183Parser 中移除,然后按同样的原则添加您自己的。
处理您自己的未解析消息
这可以通过使用 UnparsedMessage
事件来完成。您只需订阅此事件,您就能处理消息
// on the GNSS device, make sure you add the UnparsedMessage event
gnssDevice = new GenericSerialGnssDevice("COM2");
gnssDevice.UnparsedMessage += UnparsedMessage;
结果,所有未解析的消息都将被传递给您来处理
private static void UnparsedMessage(string message)
{
Console.WriteLine($"Received unparsed message: {message}");
}
与 GnssDevice 一起扩展
GnssDevice
抽象类已集成一些逻辑。GenericSerialGnssDevice
正在使用它,并是扩展性的一个很好的例子。查看代码。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET Framework | net 兼容。 |
-
- nanoFramework.CoreLibrary (>= 1.15.5)
- nanoFramework.System.Collections (>= 1.5.31)
- nanoFramework.System.IO.Ports (>= 1.1.86)
- nanoFramework.System.Math (>= 1.5.43)
- UnitsNet.nanoFramework.Angle (>= 5.56.0)
- UnitsNet.nanoFramework.Speed (>= 5.56.0)
NuGet 包
此包不被任何 NuGet 包使用。
GitHub 存储库
此包不被任何流行的 GitHub 存储库使用。