像Arduino这样最酷的嵌入式平台之一,已经使制造商和DIYers能够使用GPS模块轻松获取位置数据,从而构建依赖于位置的事物。借助Raspberry Pi所具有的强大功能,使用相同的廉价GPS模块构建基于GPS的项目无疑是非常了不起的,这是本文的重点。今天,在这个项目中,我们将与Raspberry Pi 3接口GPS模块。
该项目的目标是通过UART从GPS模块收集位置数据(经度和纬度)并将其显示在16x2 LCD上,因此,如果您不熟悉16x2 LCD与Raspberry Pi配合使用的方式,这是另一个很好的学习机会。
所需组件:
- 树莓派3
- Neo 6m v2 GPS模块
- 16 x 2液晶屏
- Raspberry Pi的电源
- LAN电缆以无头模式将pi连接到PC
- 面包板和跨接电缆
- 电阻/电位计至LCD
- 运行Raspbian Jessie的存储卡8或16Gb
除此之外,我们需要安装GPS守护程序(GPSD)库,16x2 LCD Adafruit库,我们将在本教程的后面部分安装该库。
在这里,我们使用 Raspberry Pi 3 和Raspbian Jessie OS。前面已经讨论了所有基本的硬件和软件要求,您可以在Raspberry Pi简介中进行查找。
GPS模块及其工作原理:
GPS代表全球定位系统,用于以精确的UTC时间(协调世界时)检测地球上任何位置的纬度和经度。GPS模块是我们的车辆跟踪系统项目的主要组成部分。该设备每隔一秒钟从卫星接收带有时间和日期的坐标。
GPS模块实时发送与跟踪位置有关的数据,并以NMEA格式发送大量数据(请参见下面的屏幕截图)。NMEA格式包含几个句子,其中我们只需要一个句子。这句话从$ GPGGA开始,包含坐标,时间和其他有用的信息。该GPGGA被称为“全球定位系统修订数据”。在此处了解有关读取GPS数据及其字符串的更多信息。
我们可以通过计算字符串中的逗号来从$ GPGGA字符串中提取坐标。假设您找到$ GPGGA字符串并将其存储在数组中,则可以在两个逗号后找到“纬度”,在四个逗号后找到“经度”。现在,这些纬度和经度可以放在其他数组中。
以下是$ GPGGA字符串及其说明:
$ GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,, * 47
$ GPGGA,HHMMSS.SSS,纬度,N,经度,E,FQ,NOS,HDP,高度,M,高度,M,校验和数据
识别码 |
描述 |
$ GPGGA |
全球定位系统修复数据 |
卫生管理系统 |
时间以小时,分钟,秒和毫秒的格式表示。 |
纬度 |
纬度(坐标) |
ñ |
方向N =北,S =南 |
经度 |
经度(坐标) |
Ë |
方向E =东,W =西 |
FQ |
修正质量数据 |
NOS |
正在使用的卫星数 |
HPD |
水平精度稀释 |
高度 |
海拔高度 |
中号 |
仪表 |
高度 |
高度 |
校验和 |
校验和数据 |
您可以检查我们的其他GPS项目:
- 使用GPS和GSM的基于Arduino的车辆追踪器
- 使用GPS,GSM和加速度计的基于Arduino的车辆事故警报系统
- 如何在Arduino上使用GPS
- 使用Arduino,ESP8266和GPS在Google Maps上跟踪车辆
准备Raspberry Pi与GPS通信:
好吧,跳进去,这样就不会感到无聊了,我假设您已经对Raspberry Pi了如指掌,足以安装您的OS,获取IP地址,连接到腻子之类的终端软件以及其他有关PI。如果您在执行上述任何操作时遇到任何问题,请在评论部分打我,我们将很乐意为您提供帮助。
要使该项目正在进行,我们要做的第一件事就是准备我们的Raspberry Pi 3,使其能够通过UART与GPS模块通信,相信我,这非常棘手,并且已经做了很多尝试来使其正确,但是如果您遵循我的指南很仔细,您将一口气获得,这是该项目中最困难的部分。在这里,我们使用了Neo 6m v2 GPS模块。
要深入研究,这里对Raspberry Pi 3 UART的工作原理进行了一些解释。
Raspberry Pi具有两个内置UART,一个PL011和一个迷你UART。它们是使用不同的硬件模块实现的,因此它们的特性略有不同。但是,在树莓派3上,无线/蓝牙模块连接到PLO11 UART,而微型UART用于Linux控制台输出。根据您的看法,由于其实现级别,我将PLO11定义为两个UART中最好的一个。因此,对于该项目,我们将使用更新的Raspbian Jessie当前版本中可用的覆盖层,从PLO11 UART禁用蓝牙模块。
步骤1:更新Raspberry Pi:
在启动每个项目之前,我喜欢做的第一件事是更新树莓派。因此,让我们照常运行并运行以下命令;
sudo apt-get更新sudo apt-get升级
然后重新启动系统;
须藤重启
步骤2:在Raspberry Pi中设置UART:
在此之下,我们要做的第一件事是编辑 /boot/config.txt 文件。为此,请运行以下命令:
须藤nano /boot/config.txt
在config.txt文件的底部,添加以下行
dtparam = spi =在dtoverlay = pi3-disable-bt core_freq = 250 enable_uart = 1 force_turbo = 1
ctrl + x退出,然后按y并输入保存。
请仔细检查以确保没有错别字或错误,因为这样做可能会阻止pi启动。
使用这些命令的原因是什么, force_turbo 使UART可以使用我们在这种情况下设置的最大内核频率为250。这样做的原因是为了确保接收到串行数据的一致性和完整性。在这一点上需要注意的重要一点是,使用 force_turbo = 1 会使树莓派的保修无效,但同时也很安全。
该 dtoverlay = PI3-禁用-BT 断开与蓝牙 ttyAMA0 ,这是为了让我们获得通过使用现有的全UART功率 ttyAMAO 而不是迷你UART ttyS0来。
UART设置部分下的第二步是编辑 boot / cmdline.txt
我建议您制作一份cmdline.txt的副本,并在编辑之前先保存它,以便以后可以根据需要返回到它。可以使用以下方法完成:
sudo cp boot / cmdline.txt boot / cmdline_backup.txt sudo nano /boot.cmdline.txt
将内容替换为;
dwc_otg.lpm_enable = 0 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 lift = deadline fsck.repair = yes rootwait安静启动plymouth.ignore-serial-soles
保存并退出。
完成此操作后,我们将需要再次重新引导系统以进行更改( sudo reboot )。
步骤3:禁用Raspberry Pi串行Getty服务
下一步是禁用Pi的串行 getty服务 ,该命令将阻止它在重新启动时再次启动:
sudo systemctl停止[email protected] sudo systemctl禁用[email protected]
如果需要,可以使用以下命令再次启用它
sudo systemctl启用[email protected] sudo systemctl启动[email protected]
重新启动系统。
步骤4:激活ttyAMAO:
我们已经禁用了ttyS0,接下来我们要启用 ttyAMAO 。
sudo systemctl启用[email protected]
步骤5:安装Minicom和pynmea2:
我们将通过minicom连接到GPS模块并理解数据。这也是我们将用来测试的工具之一,因为我们的GPS模块工作正常。minicom的替代方法是守护程序GPSD。
sudo apt-get安装minicom
为了轻松解析接收到的数据,我们将使用 pynmea2库 。可以使用安装;
须藤点安装pynmea2
可以在这里找到库文档https://github.com/Knio/pynmea2
步骤6:安装LCD库:
在本教程中,我们将使用AdaFruit库。该库是为AdaFruit屏幕制作的,但也可用于使用HD44780的显示板。如果您的显示基于此,则它将正常工作。
我觉得最好克隆该库并直接安装。克隆运行;
git clone
进入克隆目录并安装
cd./Adafruit_Python_CharLCD sudo python setup.py安装
在此阶段,我将建议重新启动一次,以便我们准备继续连接组件。
Raspberry Pi GPS模块的接口:
如下图所示,将GPS模块和LCD连接到Raspberry Pi。
在Python脚本之前进行测试:
我觉得在继续执行python脚本之前测试GPS模块连接很重要,为此我们将使用minicom。运行命令:
须藤minicom -D / dev / ttyAMA0 -b9600
其中9600表示GPS模块通信的波特率。一旦我们确定了GPS和RPI之间的数据通信,就可以使用它来编写Python脚本。
该测试也可以使用cat完成
须藤猫/ dev / ttyAMA0
在Window中,您可以看到我们之前讨论过的NMEA句子。
此Raspberry Pi GPS教程的Python脚本在下面的代码部分中给出。
言归正传,测试整个系统的时间到了。重要的是要确保GPS定位良好,将它取出来,尽管我的GPS在室内工作,但大多数GPS都需要3到4颗卫星才能获得定位。
工作正常吗?是的
有问题或意见吗?将它们放在评论部分。
演示视频如下所示,其中我们使用GPS和Raspberry Pi在LCD上显示了经纬度位置。