Столкнулся с нестабильным NMEA потоком в модуле WBE3-I-GPS v5.0 с постоянными “bad checksum in NMEA packet” и постоянными потерями координат/времени. В вики решения не нашел, решил поделиться своей настройкой.
Устанавливаем gpsd
~# apt update
~# apt install gpsd -y
Редактируем конфиг
~# nano /etc/default/gpsd
# Указываем слот где расположен GPS модуль и pps
# Без указания pps будет большая погрешность по времени
DEVICES="/dev/ttyMOD4 /dev/pps0"
# Обязательно ставим данные флаги. Помогает наладить стабильный NMEA с Ai-Thinker GP-02
GPSD_OPTIONS="-n -b -s 9600"
GPSD_SOCKET="/var/run/gpsd.sock"
USBAUTO="false"
Проверяем, что модуль ядра pps загружен
~# dmesg | grep pps
[ 0.036646] pps_core: LinuxPPS API ver. 1 registered
[ 0.036650] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 13.884791] pps pps0: new PPS source mod4_pps.-1
[ 13.889618] pps pps0: Registered IRQ 102 as PPS source
~# ppstest /dev/pps0
trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1742257305.000017384, sequence: 4709 - clear 0.000000000, sequence: 0
source 0 - assert 1742257306.000015584, sequence: 4710 - clear 0.000000000, sequence: 0
Перезагружаем gpsd для применения конфигурации
~# systemctl restart gpsd
Запускаем cgps и проверяем значение уровня сигнала(SNR). На открытой местности SNR должен быль больше 25.
Дополнительно распишу настройку NTP сервера chrony с использование GPS + PPS который даёт точность в микросекундах.
Отключаем ntpd если установлен
~# systemctl stop ntp
~# systemctl disable ntp
Устанавливаем chrony
~# apt install chrony
Дополняем конфигурацию следующим образом
~# nano /etc/chrony/chrony.conf
...
# Разрешаем доступ из локальной сети к NTP серверу
allow 192.168.0.0/24
# GPS
refclock SHM 0 refid GPS poll 4 precision 1e-3 offset 0.071 delay 0.2
# PPS
refclock PPS /dev/pps0 lock GPS refid PPS poll 2 precision 1e-7 prefer
# Use Debian vendor zone.
pool debian.pool.ntp.org iburst
...
Перезагружаем chrony для применения конфигурации и проверяем статус
~# systemctl restart chrony
~# systemctl status chrony
> Active: active (running)
Запускаем через минуту chronyc sources -v и убеждаемся в работе PPS.
~# chronyc sources -v
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#x GPS 0 4 377 12 +145ms[ +145ms] +/- 101ms
#* PPS 0 2 377 3 +1048ns[+1140ns] +/- 4275ns
^- time.cloudflare.com 3 6 377 55 +3547us[+3542us] +/- 24ms
^- julkinen.dclabra.fi 2 6 377 54 +2874us[+2869us] +/- 29ms
^- zabbix.sarik.tech 2 6 377 55 -13ms[ -13ms] +/- 32ms
^- hackclub.app 3 6 377 57 -708us[ -714us] +/- 21ms