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                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="nanoFramework.Iot.Device.Common.GnssDevice" Version="1.0.15" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用该包。
paket add nanoFramework.Iot.Device.Common.GnssDevice --version 1.0.15                
#r "nuget: nanoFramework.Iot.Device.Common.GnssDevice, 1.0.15"                
#r 指令可用于 F# 交互式和 Polyglot 笔记本。将此内容复制到交互式工具或脚本的源代码中以引用该包。
// 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                

此绑定实现了一个基本的全球导航卫星系统(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 兼容。
兼容的目标框架
包含的目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

NuGet 包

此包不被任何 NuGet 包使用。

GitHub 存储库

此包不被任何流行的 GitHub 存储库使用。

版本 下载 最后更新
1.0.15 29 8/14/2024
1.0.8 45 8/12/2024
1.0.5 41 8/9/2024
1.0.1 41 8/6/2024