2021年7月5日月曜日

Raspberry Pi 4 Model B に GPS を接続して NTP サーバーにしたかったがダメだった

必要なソフトをいれて接続してみたけど、 GPS モジュールが信号を受信していないっぽくて上手くいかない。

とりあえずやったことメモを残す。

GPS 受信キット組み立て

GPS受信機キット 1PPS出力付き 「みちびき」3機受信対応: センサ一般 秋月電子通商-電子部品・ネット通販 を購入。

  1. 付属の L 型ピンが 6 ピンだったので、ニッパーで 1 ピンを取り外す
  2. 「1.」のピンを 5V, GND, RXD, TXD, 1pps にはんだ付け

今回は、バックアップ電源は不要なので電池ソケットの取り付けは行わなかった。

Raspberry Pi の準備

前回 の手順の「オーバーレイファイルシステムの有効化」以外を実施

GPS 用の UART 有効化

sudo sh -c 'echo "enable_uart=1" >> /boot/config.txt'

reboot

GPS 接続

GPS モジュールと Raspberry Pi のピンを、以下のようにつなげる。

+------+  +-----------+
| 5V   |--| PIN 4(5V) |
+------+  +-----------+

+------+  +------------+
| GND  |--| PIN 6(GND) |
+------+  +------------+

+------+  +----------------+
| RXD  |--| PIN 8(GPIO 14) |
+------+  +----------------+

+------+  +-----------------+
| TXD  |--| PIN 10(GPIO 15) |
+------+  +-----------------+

+------+  +-----------------+
| 1pps |--| PIN 12(GPIO 18) |
+------+  +-----------------+

ソフトウェアの準備

必要パッケージのインストール

sudo apt-get install -y ntp gpsd gpsd-clients pps-tools setserial

ntpd 動作確認

とりあえず、普通の NTP サーバーを参照して同期してみる。

sudo sh -c 'echo "server ntp.nict.jp iburst" >> /etc/ntp.conf'
systemctl restart ntp

ntpq -p で nict のサーバーが追加されていることを確認。

シリアルをローレイテンシーモードで実行するための設定

/etc/rc.localexit 0 の前に、以下コマンドを追加。

/usr/bin/setserial /dev/ttyS0 low_latency

pps 設定

pps モジュール有効化

sudo sh -c 'echo "pps-gpio" >> /etc/modules'
sudo sh -c 'echo "dtoverlay=pps-gpio,gpiopin=18" >> /boot/config.txt'
reboot

lsmod でモジュールが有効化されていることを確認。

lsmod | grep pps

gpsd 設定

/etc/default/gpsd を修正。

/etc/default/gpsd

START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/ttyS0 /dev/pps0"
GPSD_OPTIONS="-n"
GPSD_SOCKET="/var/run/gpsd.sock"

動作確認

gpsmon で GPS 情報の取得ができるはずだが、ずっと GPS 信号をつかまない…。

GSP モジュールの LED が点滅していないので基盤側っぽいのだがどうなんだろうか。

後で別モジュールを調達して試してみる。

今回はここまで。

その他

systemd による自動起動をしてみる

/etc/rc.local への追記で済ませたが、 systemd でやりたい場合には以下のようになる。

/etc/systemd/system/serial.service を作成し、以下のように編集。

[Unit]
Description= Set low latency to /dev/ttyS0
After=syslog.target

[Service]
Type=simple
Restart=no
ExecStart=/usr/bin/setserial /dev/ttyS0 low_latency

[Install]
WantedBy=multi-user.target

systemd で自動起動を有効化。

sudo systemctl enable serial

参考資料

0 件のコメント:

コメントを投稿