Arduino模块学习笔记(一)——GSP模块的使用

文章目录

  • Arduino模块学习笔记(一)——GSP模块的使用
    • 所需组件
    • 一、模块使用介绍
      • 1.GPS模块(在室内时,一般获取不到位置信息)
      • 2.接线
      • 3.NMEA协议
    • 二、示例演示
      • 1.示例1:简单通讯,获取NMEA协议信息
      • 2.示例2:导入TinyGPSPlus库,获取解码信息
      • 3.示例3:获取指定解码信息

所需组件

  • Arduino UNO开发板
  • Arduino IDE环境
  • 数据线
  • NEO-6M GPS模块(+配套的陶瓷天线 可选)

一、模块使用介绍

1.GPS模块(在室内时,一般获取不到位置信息)

常见的GPS模块的参数都差不多,除了有些个别输出格式不同。
● 接口:RS232 TTL
● 电源:3.3V至5V均可(内置降压模块)
默认波特率:9600 bps(有些可能是4800)
● 支持标准的NMEA

本实验也是第一次使用,购买的是维特智能的ATK-NEO-6M GPS模块以及配套的陶瓷天线


2.接线

这里使用了Arduino自带的SoftwareSerial库,把引脚7,8定义为一组软串口来使用

GPS模块 Arduino UNO
RX 8
TX 7
VCC 5V / 3.3V
GND GND

3.NMEA协议

需要了解可参考 GPS NMEA-0183标准详解(常用的精度以及经纬度坐标),非常详细

二、示例演示

1.示例1:简单通讯,获取NMEA协议信息

源码展示——示例1:

#include<SoftwareSerial.h>
#define gpsTX 7
#define gpsRX 8
#define gpsBand 9600SoftwareSerial gpsSerial(gpsRX,gpsTX);void setup(){Serial.begin(9600);gpsSerial.begin(gpsBand);
}void loop(){if(gpsSerial.available()){char c =gpsSerial.read();Serial.write(c);}
}

2.示例2:导入TinyGPSPlus库,获取解码信息

导入TinyGPSPlus库

使用TinyGPSPlus库的示例FullExample

接线保持不变,修改软串口定义和波特率

上传即得到如下效果(因为目前在室内,所以没有位置信息)

源码展示——示例2:

#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
/*This sample code demonstrates the normal use of a TinyGPSPlus (TinyGPSPlus) object.It requires the use of SoftwareSerial, and assumes that you have a4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
static const int RXPin = 8, TXPin = 7;
static const uint32_t GPSBaud = 9600;// The TinyGPSPlus object
TinyGPSPlus gps;// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);void setup()
{Serial.begin(9600);ss.begin(GPSBaud);Serial.println(F("FullExample.ino"));Serial.println(F("An extensive example of many interesting TinyGPSPlus features"));Serial.print(F("Testing TinyGPSPlus library v. ")); Serial.println(TinyGPSPlus::libraryVersion());Serial.println(F("by Mikal Hart"));Serial.println();Serial.println(F("Sats HDOP  Latitude   Longitude   Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum"));Serial.println(F("           (deg)      (deg)       Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail"));Serial.println(F("----------------------------------------------------------------------------------------------------------------------------------------"));
}void loop()
{static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;printInt(gps.satellites.value(), gps.satellites.isValid(), 5);printFloat(gps.hdop.hdop(), gps.hdop.isValid(), 6, 1);printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);printInt(gps.location.age(), gps.location.isValid(), 5);printDateTime(gps.date, gps.time);printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.deg()) : "*** ", 6);unsigned long distanceKmToLondon =(unsigned long)TinyGPSPlus::distanceBetween(gps.location.lat(),gps.location.lng(),LONDON_LAT, LONDON_LON) / 1000;printInt(distanceKmToLondon, gps.location.isValid(), 9);double courseToLondon =TinyGPSPlus::courseTo(gps.location.lat(),gps.location.lng(),LONDON_LAT, LONDON_LON);printFloat(courseToLondon, gps.location.isValid(), 7, 2);const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6);printInt(gps.charsProcessed(), true, 6);printInt(gps.sentencesWithFix(), true, 10);printInt(gps.failedChecksum(), true, 9);Serial.println();smartDelay(1000);if (millis() > 5000 && gps.charsProcessed() < 10)Serial.println(F("No GPS data received: check wiring"));
}// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{unsigned long start = millis();do {while (ss.available())gps.encode(ss.read());} while (millis() - start < ms);
}static void printFloat(float val, bool valid, int len, int prec)
{if (!valid){while (len-- > 1)Serial.print('*');Serial.print(' ');}else{Serial.print(val, prec);int vi = abs((int)val);int flen = prec + (val < 0.0 ? 2 : 1); // . and -flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;for (int i=flen; i<len; ++i)Serial.print(' ');}smartDelay(0);
}static void printInt(unsigned long val, bool valid, int len)
{char sz[32] = "*****************";if (valid)sprintf(sz, "%ld", val);sz[len] = 0;for (int i=strlen(sz); i<len; ++i)sz[i] = ' ';if (len > 0) sz[len-1] = ' ';Serial.print(sz);smartDelay(0);
}static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{if (!d.isValid()){Serial.print(F("********** "));}else{char sz[32];sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());Serial.print(sz);}if (!t.isValid()){Serial.print(F("******** "));}else{char sz[32];sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());Serial.print(sz);}printInt(d.age(), d.isValid(), 5);smartDelay(0);
}static void printStr(const char *str, int len)
{int slen = strlen(str);for (int i=0; i<len; ++i)Serial.print(i<slen ? str[i] : ' ');smartDelay(0);
}

3.示例3:获取指定解码信息

源码展示——示例3:

#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>static const int RXPin = 8, TXPin = 7;
static const uint32_t GPSBaud = 9600;// The TinyGPS++ object
TinyGPSPlus gps;// The serial connection to the GPS device
SoftwareSerial gpsSerial(RXPin, TXPin);void setup(){Serial.begin(9600);gpsSerial.begin(GPSBaud);
}void loop(){// This sketch displays information every time a new sentence is correctly encoded.while (gpsSerial.available() > 0){if (gps.encode(gpsSerial.read())){displayInfo();}if(millis() > 5000 && gps.charsProcessed() < 10){Serial.println("No GPS detected:check wiring.");while(true);}}
}void displayInfo(){Serial.print("Location:");if(gps.location.isValid()){Serial.print(gps.location.lat(),6);Serial.print(",");Serial.print(gps.location.lng(),6);}else{Serial.print("INVALID");}Serial.print("  Date");if(gps.date.isValid()){Serial.print(gps.date.month());Serial.print("/");Serial.print(gps.date.day());Serial.print("/");Serial.print(gps.date.year());}else{Serial.print("INVALID");}Serial.println();
}

Arduino模块学习笔记(一)—GPS模块的使用相关推荐

  1. Apollo学习笔记3-定位模块配置

    Apollo学习笔记3-定位模块配置 环境介绍 导航设备参数配置 导航设备配置 (1)杆臂配置 (2)GNSS 航向配置 (3)导航模式配置 (4) USB 接口输出设置 (5)网口配置 (6) PP ...

  2. 好程序员web前端分享Nodejs学习笔记之Stream模块

    好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...

  3. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  4. python学习笔记4(模块

    python学习笔记4(模块) 一.模块 1.1 import语句 1.2 __name__属性 1.3 dir()函数 1.4 包 2.1 导入特定模块: 二.输入与输出 2.1 format使用 ...

  5. STM32F407学习笔记——MG90S舵机模块(基本控制)

    STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...

  6. python模块学习笔记

    python模块学习笔记 1.Python自动发送邮件smtplib 2.制作二维码图片MyQR 3.绝对值模块math 4.CSV模块 5.openpyxl 模块,操作Excel文件 ExcelMa ...

  7. cma linux 起始地址,CMA模块学习笔记

    CMA模块学习笔记 作者:linuxer 发布于:2017-6-28 18:29 分类:内存管理 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. 学习的 ...

  8. 如何使用Arduino开发板连接NEO-6M GPS模块

    本文主要介绍如何使用Arduino开发板连接NEO-6M GPS模块,然后获取GPS数据. GPS全称全球定位系统,当你旅行时,它可以用来确定位置.时间和速度. NEO-6M GPS模块简介 NEO- ...

  9. Arduino开发之如何连接GPS模块?

    文章目录 0.引言 1.GPS模块说明 2.接调试助手测试GPS模块接收数据 3.代码编写 4.功能演示 0.引言   NEO-6M/7M GPS模块,具有高灵敏度.低功耗.小型化.高追踪灵敏度,大大 ...

最新文章

  1. loadruner中加中Java_Script
  2. SSH之IDEA2017整合Struts2+Spring+Hibernate
  3. 更改应用程序图标_【iOS12人机交互指南】6.2-应用图标
  4. SqlConnetction类
  5. python复利计算函数_PyThon编程入门:了解python format格式化函数的使用
  6. MySQL新建存储过程出现:ERROR 1558 (HY000): Column count of mysql.proc is wrong. Expected 20, found 16. Create
  7. leetcode题目整理
  8. python的全局变量和局部变量
  9. Lesson 17.2 经典数据集(1):入门数据集,以及读数据时哪些可能的坑
  10. 沉没成本---欲罢不能的困局?
  11. gitlab . pre-receive hook declined
  12. 大数据技术如何影响企业决策?
  13. Mounty 1.10免费版(NTFS硬盘工具)支持big sur
  14. 定时打开指定程序软件
  15. 用于excel(或wps)中进行ip处理转换的vbs模块
  16. Android webview实现QQ一键登录授权
  17. 用python编写万年历
  18. Scala 环境搭建安装配置
  19. php教程燕十八_2PHP 3小时光速入门视频教程【燕十八】
  20. 双击jar包运行,出现使用压缩软件打开的情况

热门文章

  1. Vue 2.0 商业案例一则-姜威-专题视频课程
  2. Python爬取链家北京租房信息!北京租房都租不起啊!
  3. P1462 通往奥格瑞玛的道路(二分+dijkstra)
  4. 【xdoj难题集】1202 The Offer - Lunatic(附优化版)
  5. 计算机二级无忧软件mysql_无忧考吧全国计算机二级MS Office模拟软件
  6. Unity Input 通过蓝牙手柄控制游戏
  7. 小饭桌沙盘演戏商战-老友记成长
  8. 发帖添加作者水印插件无法发帖问题-缺少GD库支持,php如何安装gd库-一颗优雅草科技伊凡
  9. 机器学习---回归模型和分类模型的评价指标体系
  10. 数模国赛备赛(6)数学建模中的图论方法