当前位置:首页 > 经验 >

gpr打开教程(gpr按键图解)

来源:原点资讯(www.yd166.com)时间:2022-11-06 11:46:04作者:YD166手机阅读>>

使用Arduino控制NEO-6M GPS模块应用

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

gpr打开教程,gpr按键图解(1)

您将学习到如何:

  • 将NEO-6M GPS模块连接到Arduino UNO
  • 获取原始GPS数据
  • 解析原始数据以获得选定的可读GPS信息
  • 取得位置
  • 推出NEO-6M GPS模块

    NEO-6M GPS模块如下图所示。它带有一个外部天线,并且不带有插头。因此,您需要获取并焊接一些引脚。

    gpr打开教程,gpr按键图解(2)

  • 该模块具有外部天线和内置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 5伏

    RX 软件序列中定义的TX引脚

    TX 软件序列中定义的RX引脚

    GND 地线

    获取GPS原始数据

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

    所需零件

    为了测试此示例,您将需要以下部分:

  • Arduino
  • NEO-6M GPS模块
  • 跳线
  • 原理图

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

    gpr打开教程,gpr按键图解(3)

  • 模块GND引脚连接到Arduino GND引脚
  • 模块RX引脚连接到Arduino 引脚3
  • 模块TX引脚连接到Arduino 引脚4
  • 模块VCC引脚连接到Arduino 5V引脚
  • 代码

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

    #include <SoftwareSerial.h>

    SoftwareSerial ss(4, 3);

    void setup(){

    Serial.begin(9600);

    ss.begin(9600);

    }

    void loop(){

    while (ss.available() > 0){

    byte gpsData = 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的波特率打开串行监视器。

    gpr打开教程,gpr按键图解(4)

    您应该以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,06,71,227,30 * 7C

    $ GPGSV, 3,2,11,07,47,138,33,09,64,044,28,17,01,199,19,13,214,* 7C

    $ GPGSV,3,3,11,23,29,054,29,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 =估计(航位推算); 7 =手动输入模式; 8 =模拟模式)
  • 05 –被跟踪的卫星数
  • 2.68 –头寸水平稀释
  • 129.0,M –海拔,海拔高度
  • 50.1,M – WGS84椭球上方的大地水准面的高度(平均海平面)
  • 空字段-自上次DGPS更新以来的时间(以秒为单位)
  • 空字段– DGPS站ID号
  • * 42 –校验和数据,始终以*开头
  • NMEA的其他句子提供了其他信息:

    • $ GPGSA – GPS DOP和活动卫星
    • $ GPGSV –详细的GPS卫星信息
    • $ GPGLL –地理纬度和经度
    • $ GPRMC –基本的GPS pvt(位置,速度,时间)数据
    • $ GPVTG –速度不错
    使用TinyGPS 库解析NMEA句子

    您可以处理来自GPS的原始数据,也可以通过将字符序列保存到变量中来将这些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 <TinyGPS .h>

    #include <SoftwareSerial.h>

    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 <TinyGPS .h>

    #include <SoftwareSerial.h>

    然后,您定义软件串行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,您应该会在串行监视器上看到显示的位置。上载代码后,请等待几分钟,同时模块将调整位置以获取更准确的数据。

    gpr打开教程,gpr按键图解(5)

    使用TinyGPS 库获取更多GPS信息

    TinyGPS 库使您不仅可以简单地获取位置信息,还可以获取更多信息。除了位置,您还可以获得:

  • 日期
  • 时间
  • 速度
  • 课程
  • 高度
  • 卫星
  • 高清
  • 下面的代码示例了如何以一种简单的方式获取所有这些信息。

    #include <TinyGPS .h>

    #include <SoftwareSerial.h>

    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 在如何使用其所有功能方面得到了很好的评价。

    写到最后

    希望本指南对您有所帮助。喜欢就记得关注,后续会继续分享更多项目示例,敬请期待。

    栏目热文

    入门学gprs(gprs编程基础)

    入门学gprs(gprs编程基础)

    导读物联网,顾名思义,把“物”“连成网”。物联网通常分为三个层:感知层、传输层、应用层。和“云、管、端”的概念相同。感知...

    2022-11-06 11:50:13查看全文 >>

    gpr附着详细流程(gpr初始化怎么解决)

    gpr附着详细流程(gpr初始化怎么解决)

    OLX703A是一种由韩国临床阶段的制药公司OliX Pharmaceuticals开发的乙肝新机制化合物,目前OliX...

    2022-11-06 11:53:37查看全文 >>

    gpio设置教程(gpio模式怎么设置)

    gpio设置教程(gpio模式怎么设置)

    作者 | 赵青窕随着Linux内核代码的逐步完善,其gpio口的操作接口也在不断完善。内核中存在多种GPIO API接口...

    2022-11-06 11:58:02查看全文 >>

    gpio使用技巧(gpio口使用方法汇总)

    gpio使用技巧(gpio口使用方法汇总)

    相信大多是硬件工程师的第一个程序都是使用IO口点灯,就像程序员的第一个程序都是Hello world一样。本篇文章将详细...

    2022-11-06 11:49:31查看全文 >>

    gplp的使用方法(gplp实际操作)

    gplp的使用方法(gplp实际操作)

    文/琼凉 GPLP曾经如日中天的直播行业迎来了下半场——王思聪30亿贱卖熊猫直播,虎牙和映客相继上市,以及斗鱼主播的相继...

    2022-11-06 11:53:56查看全文 >>

    gprinter(gprinter打印机打不出字)

    gprinter(gprinter打印机打不出字)

    如今,市场上的票据打印机可谓琳琅满目,品牌及种类各异。消费者因看得眼花缭乱,而无从下手。今天,小编为大家重点推荐佳博品牌...

    2022-11-06 12:26:25查看全文 >>

    gpio入门教程(gpio内部结构图解)

    gpio入门教程(gpio内部结构图解)

    点亮LED概述本教程目的是用程序将 LED 灯点亮,3秒钟后灯自动熄灭。在所有软件编程语言中,第一个程序都叫 hello...

    2022-11-06 11:59:15查看全文 >>

    gpio基础知识(gpio的八种工作模式及其使用场合)

    gpio基础知识(gpio的八种工作模式及其使用场合)

    问:很多人说:有51基础的人很容易入门ARM。我想说,坑爹啊,我就是51走过来的,看ARM几个月了,一点进展都没有,也不...

    2022-11-06 12:02:06查看全文 >>

    gpio接口使用(gpio口简介)

    gpio接口使用(gpio口简介)

    树莓派作为一款低成本的计算机,最初的设计目的是帮助人们学习计算机编程。在随后的应用中,很多电子爱好者将其作为电子项目中的...

    2022-11-06 11:42:35查看全文 >>

    gpio函数怎么用(gpio编程教学)

    gpio函数怎么用(gpio编程教学)

    一,输出控制信号GPIO用来做开关控制,是最常见的应用场景。如上图,P21这个GPIO口,输出1的时候,LED403点亮...

    2022-11-06 11:45:16查看全文 >>

    文档排行