读取GPS数据-RaspberryPi


文档摘要

读取GPS数据 - Raspberry Pi 在这部分课程中,你将为你的Raspberry Pi添加一个GPS传感器,并从中读取数据。 硬件 Raspberry Pi需要一个GPS传感器。 你将使用的传感器是一个Grove GPS Air530传感器。这个传感器可以连接到多个GPS系统,以获得快速、准确的定位。传感器由两部分组成——传感器的核心电子元件和一个通过细线连接的外部天线,用于接收来自卫星的无线电波。 这是一个UART传感器,因此通过UART发送GPS数据。 连接GPS传感器 Grove GPS传感器可以连接到Raspberry Pi。 任务 - 连接GPS传感器 连接GPS传感器。 一个Grove GPS传感器 将Grove电缆的一端插入GPS传感器上的插槽。它只能以一种方式插入。

读取GPS数据 - Raspberry Pi

在这部分课程中,你将为你的Raspberry Pi添加一个GPS传感器,并从中读取数据。

硬件

Raspberry Pi需要一个GPS传感器。

你将使用的传感器是一个Grove GPS Air530传感器。这个传感器可以连接到多个GPS系统,以获得快速、准确的定位。传感器由两部分组成——传感器的核心电子元件和一个通过细线连接的外部天线,用于接收来自卫星的无线电波。

这是一个UART传感器,因此通过UART发送GPS数据。

连接GPS传感器

Grove GPS传感器可以连接到Raspberry Pi。

任务 - 连接GPS传感器

连接GPS传感器。

一个Grove GPS传感器

  1. 将Grove电缆的一端插入GPS传感器上的插槽。它只能以一种方式插入。

  2. 在Raspberry Pi断电的情况下,将Grove电缆的另一端连接到Grove Base hat上标记为UART的UART插槽。该插槽位于中间一行,靠近SD卡插槽的一侧,远离USB端口和网口。

    Grove GPS传感器连接到UART插槽

  3. 将GPS传感器放置在确保附带天线能清晰看到天空的位置——理想情况下应放在窗户旁边或户外。这样更容易获得清晰信号,因为天线上方没有障碍物。

编程GPS传感器

现在可以编写程序来使用连接的GPS传感器。

任务 - 编程GPS传感器

编程设备。

  1. 开启Pi并等待其启动。

  2. GPS传感器有两个LED灯——一个蓝色LED灯,在传输数据时闪烁,另一个绿色LED灯,在从卫星接收数据时每秒闪烁一次。在开启Pi时确保蓝色LED灯正在闪烁。几分钟后,绿色LED灯会开始闪烁——如果没有,可能需要重新定位天线。

  3. 启动VS Code,可以直接在Pi上启动,也可以通过Remote SSH扩展远程连接。

    ⚠️ 如果需要,请参阅第1课中的设置和启动VS Code的说明

  4. 对于支持蓝牙的新版本Raspberry Pi,蓝牙使用的串行端口与Grove UART端口使用的串行端口之间存在冲突。要解决这个问题,请执行以下操作:

    1. 从VS Code终端,使用内置的终端文本编辑器nano编辑/boot/config.txt文件,命令如下:

      sudo nano /boot/config.txt

      由于需要使用sudo权限(提升权限)编辑此文件,因此无法通过VS Code进行编辑。VS Code不会运行此权限。

    2. 使用光标键导航到文件末尾,然后复制以下代码并粘贴到文件末尾:

      dtoverlay=pi3-miniuart-bt dtoverlay=pi3-disable-bt enable_uart=1

      可以使用设备的正常键盘快捷键进行粘贴(Ctrl+v on Windows, Linux or Raspberry Pi OS, Cmd+v on macOS).

    3. Save this file and exit nano by pressing Ctrl+x. Press y when asked if you want to save the modified buffer, then press enter确认要覆盖/boot/config.txt)。

      如果出错,可以不保存退出,然后重复这些步骤。

    4. 使用以下命令在nano中编辑/boot/cmdline.txt文件:

      sudo nano /boot/cmdline.txt
    5. 此文件包含一些用空格分隔的键值对。删除所有键为console的键值对。它们可能看起来像这样:

      console=serial0,115200 console=tty1

      使用光标键导航到这些条目,然后使用正常的del or backspace键删除。

      例如,如果你的原始文件看起来像这样:

      console=serial0,115200 console=tty1 root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

      新版本将是:

      root=PARTUUID=058e2867-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    6. 按照上述步骤保存文件并退出nano。

    7. 重启你的Pi,然后在Pi重启后通过VS Code重新连接。

  5. 从终端创建一个新的文件夹,在pi users home directory called gps-sensor. Create a file in this folder called app.py.

  6. Open this folder in VS Code

  7. The GPS module sends UART data over a serial port. Install the pyserial包中,以便通过Python代码与串行端口通信:

    pip3 install pyserial
  8. 将以下代码添加到你的app.py文件中:

    import time import serial serial = serial.Serial('/dev/ttyAMA0', 9600, timeout=1) serial.reset_input_buffer() serial.flush() def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1)

    这段代码导入了serial module from the pyserial Pip package. It then connects to the /dev/ttyAMA0 serial port - this is the address of the serial port that the Grove Pi Base Hat uses for its UART port. It then clears any existing data from this serial connection.

    Next a function called print_gps_data is defined that prints out the line passed to it to the console.

    Next the code loops forever, reading as many lines of text as it can from the serial port in each loop. It calls the print_gps_data函数,用于处理每一行的数据。

    在读取完所有数据后,循环休眠1秒,然后再次尝试。

  9. 运行这段代码。你会看到来自GPS传感器的原始输出,类似于以下内容:

    $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $BDGSA,A,1,,,,,,,,,,,,,,,*0F $GPGSV,1,1,00*79 $BDGSV,1,1,00*68

    如果在停止并重新启动代码时收到以下错误之一,请在while循环中添加一个try - except块。

    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: invalid continuation byte
    while True: try: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data() line = serial.readline().decode('utf-8') # There's a random chance the first byte being read is part way through a character. # Read another full line and continue. except UnicodeDecodeError: line = serial.readline().decode('utf-8') time.sleep(1)

你可以在此代码-GPS/pi文件夹中找到这段代码。

你的GPS传感器程序成功了!

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: microsoft
来源:microsoft
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: microsoft 转发
评论区 (0)
U