锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

GPS 校验和 代码_如何使用GPS模块?从头到尾,详细讲解和程序说明

时间:2022-09-27 06:30:01 2c公形引脚插头线对线连接器

如何使用GPS模块?从头到尾详细说明和程序说明

一、使用Arduino控制NEO-6M GPS模块应用 本应用说明如何将NEO-6M GPS模块与Arduino一起使用以获取GPS数据。GPS可用于确定位置、时间和速度,代表全球定位系统。

c0cefa7a7f33f0325394448b68d596f6.png

你将如何学习: 1、将NEO-6M GPS模块连接到Arduino UNO; 2、获取原始GPS数据; 3.分析原始数据以获得选定的可读性GPS信息; 4.获取位置。 二、推出NEO-6M GPS模块 NEO-6M GPS如下图所示。 它有一个没有插头的外部天线。 因此,您需要获得并焊接一些引脚。

该模块具有外部天线和内部天线EEPROM。

接口:RS232 TTL;

电源:3V至5V;

默认波特率:9600 bps;

与标准NMEA语法一起使用;

NEO-6M GPS该模块还与其他微控制器板兼容。

引脚接线

NEO-6M GPS模块有四个引脚:VCC,RX,TX和GND。该模块使用TX和RX引脚串行通信Arduino所以接线有多简单:

NEO-6M GPS模块 接线到Arduino UNO
VCC 5V
RX 在软件序列中定义TX引脚
TX 在软件序列中定义RX引脚
GND 地线

三、取GPS原始数据

要获取原始GPS您只需使用数据"软件串行口"开始与GPS串行口通信模块。继续阅读以了解具体操作方法。

所需零件

您将需要以下部分来测试此示例:

Arduino;

NEO-6M GPS模块;

跳线

四、原理图

请按循以下示意图NEO-6M GPS模块连接到Arduino。

模块GND引脚连接到Arduino GND引脚;

模块RX引脚连接到Arduino 引脚3;

模块TX引脚连接到Arduino 引脚4;

模块VCC引脚连接到Arduino 5V引脚。

五、代码

复制以下代码Arduino IDE,并上传到Arduino开发板

#include SoftwareSerial ss(4, 3);void setup(){       
            Serial.begin(9600);    ss.begin(9600);}void loop(){       
            while (ss.available() > 0)    {       
                bytegpsData=ss.read();        Serial.write(gpsData);    }}

假设你将引脚4和引脚3作为电路图RX和TX串行引脚,以和GPS建立串行通信的模块。若使用其它引脚,则应在以下行中编辑:

SoftwareSerial ss(4, 3);

此外,如果您的模块使用的默认波特率与9600不同 bps,在以下行中修改代码:

ss.begin(9600);

电路图侦听GPS从模块接收数据时,将串行端口发送到串行监视器。

while (ss.available() > 0)

{

byte gpsData = ss.read();

Serial.write(gpsData);

}

串行监视器以9600波特率打开。

您应该以GPS标准语言NMEA获取大量信息。您在串行监视器中看到的每一行都是NMEA语句。NMEA代表国家海洋电子协会GPS在领域,它是GPS制造商支持的标准数据格式。

六、了解NMEA句子

NMEA句子以$字符开头,每个数据字段用逗号分隔。

$ GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M ,, * 42

$ GPGSA,A,3,06,09,30,07,23 ,, ,,,,, 4.43,2.68,3.53 * 02

$ GPGSV,3、1、11、02、48、298、24、03、05、101、24、05、17、292、20 * 7C

$ GPGSV,3、2、11、07、47、138、33、09、64、04、28、19、13、214* 7C

$ GPGSV,3、3、11、23、29、054、29、01、335、30、29、167、33 * 4E

$ GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A * 70

$ GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,030118 ,,, A * 6A

$ GPVTG,, T ,, M,0.043,N,0.080,K,A * 2C

NMEA不同类型的句子。

新闻类型由第一个逗号前的字符指示。

$之后的GP表示它是GPS位置。$GPGGA是基本的GPS NMEA消息,提供3D位置和准确性数据。以下句子:

$ GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M ,, * 42

110617–表示采取修复位置的时间,UTC时间11:06:17

41XX.XXXXX,N–纬度41度XX.XXXXX'N

00831.54761,W–经度008度31.54761′W

1 –修复质量(0 =无效;1 = GPS修复;2 = DGPS修复;3 = PPS修复;4 =实时运动学;5. =浮点RTK;6 =估计(航位计算) =8.手动输入模式 =模拟模式)

05–被跟踪的卫星数

2.68–水平稀释

129.0,M–海拔,海拔高度

50.1,M– WGS大地水平面高度(平均海平面)在84椭球上方

空字段-自上次以来DGPS更新以来的时间(以秒为单位)

空字段– DGPS站ID号

* 42–始终以验证和数据为基础*开头

NMEA其他句子提供其他信息:

  • $ GPGSA– GPS DOP和活动卫星

  • $ GPGSV–详细的GPS卫星信息

  • $ GPGLL–地理纬度和经度

  • $ GPRMC–基本的GPS pvt数据(位置、速度、时间)

  • $ GPVTG–速度不错

七、使用TinyGPS 库解析NMEA句子

你可以从中处理PS的原始数据,也可以通过将字符序列保存到变量中来将这些NMEA消息转换为可读且有用的格式。为此,我们将使用TinyGPS ++库 。

通过该库,可以轻松获取有用且易于理解的格式的位置信息。

安装TinyGPS ++库

请按照以下步骤在您的Arduino IDE中安装TinyGPS ++库:

1. 下载TinyGPSPlus库。您的下载文件夹中应该有一个.zip文件夹

2. 解压缩.zip文件夹,您应该得到TinyGPSPlus-master文件夹

3. 重命名文件夹 到TinyGPSPlus

4. 将TinyGPSPlus文件夹移至Arduino IDE安装库文件夹

5. 最后,重新打开您的Arduino IDE

该库提供了一些有关如何使用它的示例。在您的Arduino IDE中,您只需要转到 File >Examples > TinyGPS ++,然后从提供的示例中进行选择。

注意:库中提供的示例假定GPS模块的波特率为4800。如果您使用的是NEO-6M GPS模块,则需要将其更改为9600。

八、使用NEO-6M GPS模块和TinyGPS ++库获取位置

您可以使用TinyGPS ++库以方便实用的格式获取位置。下面,我们提供了一个代码来从GPS获取位置。这是其中一个库示例的简化版本。

#include #include static const int RXPin = 4, TXPin = 3;static const uint32_t GPSBaud = 9600;TinyGPSPlus gps;SoftwareSerial ss(RXPin, TXPin);void setup(){
      
            Serial.begin(9600);    ss.begin(GPSBaud);}void loop(){
      
            while (ss.available() > 0)    {
      
                gps.encode(ss.read());        if (gps.location.isUpdated())        {
      
                    Serial.print("Latitude= ");            Serial.print(gps.location.lat(), 6);            Serial.print(" Longitude= ");            Serial.println(gps.location.lng(), 6);        }    }}

首先导入所需的库:TinyGPSPlus和SoftwareSerial:

#include

#include

然后,您定义软件串行RX和TX引脚,以及GPS波特率。如果将其他引脚用于软件串行,则需要在此处进行更改。另外,如果您的GPS模块使用其他默认波特率,则还应该对其进行修改。

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

然后,创建一个TinyGPS ++对象:

TinyGPSPlus gps;

然后在您先前定义的引脚上开始串行连接

SoftwareSerial ss(RXPin, TXPin);

在setup()中,您可以初始化串行通信,以查看串行监视器上的读数并与GPS模块通信。

void setup() 

{

        Serial.begin(9600);

        ss.begin(GPSBaud);

}

在循环中,您需要提供信息。为了使TinyGPS ++能够正常工作,您必须使用encode()方法从GPS模块中反复向其添加字符。

while (ss.available() > 0){

gps.encode(ss.read());

然后,您可以查询gps对象以查看是否已更新任何数据字段:

if (gps.location.isUpdated())

{

        Serial.print("Latitude="); Serial.print(gps.location.lat(), 6);

        Serial.print("Longitude="); Serial.println(gps.location.lng(), 6);

}

分别使用gps.location.lat()和gps.location.lng()即可轻松获得纬度和经度。

将代码上传到Arduino,您应该会在串行监视器上看到显示的位置。上载代码后,请等待几分钟,同时模块将调整位置以获取更准确的数据。

九、使用TinyGPS ++库获取更多GPS信息

TinyGPS ++库使您不仅可以简单地获取位置信息,还可以获取更多信息。除了位置,您还可以获得:日期、时间、速度、课程、高度、卫星、高清。

下面的代码示例了如何以一种简单的方式获取所有这些信息。

#include #include static const int RXPin = 4, TXPin = 3;static const uint32_t GPSBaud = 9600;SoftwareSerial ss(RXPin, TXPin);void setup(){
      
            Serial.begin(9600);    ss.begin(GPSBaud);}void loop(){
      
            while (ss.available() > 0)    {
      
                gps.encode(ss.read());        if (gps.location.isUpdated())        {
      
                    Serial.print("Latitude= ");            Serial.print(gps.location.lat(), 6);            Serial.print(" Longitude= ");            Serial.println(gps.location.lng(), 6);            Serial.print("Raw latitude = ");            Serial.print(gps.location.rawLat().negative ? "-" : "+");            Serial.println(gps.location.rawLat().deg);            Serial.println(gps.location.rawLat().billionths);            Serial.print("Raw longitude = ");            Serial.print(gps.location.rawLng().negative ? "-" : "+");            Serial.println(gps.location.rawLng().deg);            Serial.println(gps.location.rawLng().billionths);            Serial.print("Raw date DDMMYY = ");            Serial.println(gps.date.value());            Serial.print("Year = ");            Serial.println(gps.date.year());            Serial.print("Month = ");            Serial.println(gps.date.month());            Serial.print("Day = ");            Serial.println(gps.date.day());            Serial.print("Raw time in HHMMSSCC = ");            Serial.println(gps.time.value());            Serial.print("Hour = ");            Serial.println(gps.time.hour());            Serial.print("Minute = ");            Serial.println(gps.time.minute());            Serial.print("Second = ");            Serial.println(gps.time.second());            Serial.print("Centisecond = ");            Serial.println(gps.time.centisecond());            Serial.print("Raw speed in 100ths/knot = ");            Serial.println(gps.speed.value());            Serial.print("Speed in knots/h = ");            Serial.println(gps.speed.knots());            Serial.println(gps.speed.mph());            Serial.print("Speed in m/s = ");            Serial.println(gps.speed.mps());            Serial.print("Speed in km/h = ");            Serial.println(gps.speed.kmph());            Serial.print("Raw course in degrees = ");            Serial.println(gps.course.value());            Serial.print("Course in degrees = ");            Serial.println(gps.course.deg());            Serial.print("Raw altitude in centimeters = ");            Serial.println(gps.altitude.value());            Serial.print("Altitude in meters = ");            Serial.println(gps.altitude.meters());            Serial.print("Altitude in miles = ");            Serial.println(gps.altitude.miles());            Serial.print("Altitude in kilometers = ");            Serial.println(gps.altitude.kilometers());            Serial.print("Altitude in feet = ");            Serial.println(gps.altitude.feet());            Serial.print("Number os satellites in use = ");            Serial.println(gps.satellites.value());            Serial.print("HDOP = ");            Serial.println(gps.hdop.value());        }    }}

TinyGPS ++ 在如何使用其所有功能方面得到了很好的评价。

免责声明:本文来源于今日头条,作者为工控电子爱好者转载目的在于传播相关技术知识,版权归原作者所有,如涉及侵权,请联系删除。谢谢。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章