Post

Gpsship

Gpsship

要使用树莓派4B实时读取GPS定位数据并将其传回电脑,可以按照以下步骤进行配置:

1. 硬件连接

  1. GPS模块连接
    • 将GPS模块的VCC连接到树莓派的5V电源引脚。
    • 将GPS模块的GND连接到树莓派的GND引脚。
    • 将GPS模块的TX引脚连接到树莓派的RX引脚(GPIO10)。
    • 将GPS模块的RX引脚连接到树莓派的TX引脚(GPIO9)。

2. 软件配置

  1. 启用串口
    • 运行 raspi-config
      1
      
      sudo raspi-config
      
    • 选择 Interfacing Options -> Serial
    • 禁用通过串行连接访问login-shell的可能性,并在下一步中选择 Yes 以保留串行端口启用。
  2. 安装必要的软件包
    • 安装 gpsdgpsd-clients
      1
      
      sudo apt-get install gpsd gpsd-clients
      
  3. 配置GPS服务
    • 停止默认的 gpsd 服务:
      1
      
      sudo systemctl stop gpsd.socket
      
    • 启动一个新的 gpsd 实例,指定正确的串行端口:
      1
      
      sudo gpsd /dev/serial0 -F /var/run/gpsd.sock
      
  4. 验证GPS数据
    • 使用 cgpsgpsmon 查看GPS数据:
      1
      
      sudo cgps -s
      

      1
      
      sudo gpsmon
      

3. 读取GPS数据并传输到电脑

  1. 使用Python读取GPS数据
    • 安装 pynmea2 库:
      1
      
      pip3 install pynmea2
      
    • 创建一个Python脚本来读取和解析GPS数据:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      
      import serial
      import pynmea2
      import socket
      
      def read_gps_data():
          port = "/dev/serial0"
          ser = serial.Serial(port, baudrate=9600, timeout=0.5)
          while True:
              newdata = ser.readline().decode('ascii', errors='replace')
              if newdata[0:6] == "$GPRMC":
                  newmsg = pynmea2.parse(newdata)
                  lat = newmsg.latitude
                  lng = newmsg.longitude
                  return lat, lng
      
      def send_data_to_computer(lat, lng):
          # 配置电脑的IP地址和端口号
          computer_ip = "192.168.1.100"
          port = 5000
          with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
              s.connect((computer_ip, port))
              data = f"Latitude: {lat}, Longitude: {lng}"
              s.sendall(data.encode())
      
      if __name__ == "__main__":
          while True:
              lat, lng = read_gps_data()
              send_data_to_computer(lat, lng)
              time.sleep(1)
      
  2. 在电脑上接收数据
    • 创建一个简单的服务器脚本来接收数据:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
      import socket
      
      def receive_data():
          computer_ip = "192.168.1.100"
          port = 5000
          with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
              s.bind((computer_ip, port))
              s.listen()
              conn, addr = s.accept()
              with conn:
                  print(f"Connected by {addr}")
                  while True:
                      data = conn.recv(1024)
                      if not data:
                          break
                      print(data.decode())
      
      if __name__ == "__main__":
          receive_data()
      

4. 运行脚本

  • 在树莓派上运行GPS数据读取和发送脚本。
  • 在电脑上运行接收脚本。

通过以上步骤,树莓派可以实时读取GPS定位数据并将其传回电脑。 在电脑上接收树莓派发送的GPS数据,可以使用以下Python脚本创建一个简单的TCP服务器来接收数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import socket

def receive_gps_data():
    # 配置电脑的IP地址和端口号
    computer_ip = "192.168.1.100"  # 替换为电脑的IP地址
    port = 5000  # 替换为与树莓派脚本中相同的端口号

    # 创建TCP套接字
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        # 绑定到指定的IP和端口
        s.bind((computer_ip, port))
        print(f"服务器已启动,正在监听 {computer_ip}:{port}...")
        
        # 开始监听
        s.listen()
        conn, addr = s.accept()
        with conn:
            print(f"已连接到 {addr}")
            while True:
                # 接收数据
                data = conn.recv(1024)
                if not data:
                    break
                # 打印接收到的数据
                print("接收到的数据:", data.decode())

if __name__ == "__main__":
    receive_gps_data()

配置步骤:

  1. 确定电脑的IP地址
    • 在Windows系统中,打开命令提示符(CMD)或PowerShell,输入ipconfig命令,找到以太网或无线网络适配器的IPv4地址。
    • 在Linux或macOS系统中,打开终端,输入ifconfig命令,找到以太网或无线网络接口的inet地址。
  2. 修改脚本中的IP地址和端口号
    • 将脚本中的computer_ip替换为电脑的实际IP地址。
    • 确保端口号与树莓派发送数据时使用的端口号一致。
  3. 运行脚本
    • 保存脚本为receive_gps.py
    • 在终端或命令提示符中运行脚本:
      1
      
      python receive_gps.py
      
  4. 接收数据
    • 当树莓派发送GPS数据时,电脑上的脚本会接收并打印数据。

注意事项:

  • 网络连接:确保树莓派和电脑在同一个局域网中。
  • 防火墙设置:如果遇到连接问题,检查电脑的防火墙设置,确保允许指定端口的TCP连接。
  • 脚本兼容性:确保在电脑上安装了Python,并且安装了必要的库。

通过以上步骤,电脑可以成功接收树莓派发送的GPS数据。

This post is licensed under CC BY 4.0 by the author.