NanoPi M4でGPS情報を取得する

NanoPi M4とは

FriendlyElecが出しているシングルボードコンピューター
https://www.friendlyarm.com/
まあラズパイみたいなやつ

使ったGPS受信機キット

GPS受信機キット 1PPS出力付き「みちびき」3機受信対応
http://akizukidenshi.com/catalog/g/gK-13849/

なぜラズパイじゃなかったか?

シングルボードコンピューターでNASを作りたかった。
NanoPi M4 にはSATA HATという追加基盤で4台のHDDでRAIDが組めたため。

GPSは何のために使う?

NASだけじゃもったいないので、勉強用に色々接続してみたかった。
また家の位置情報を登録しておいて、盗難された場合に見られてはまずいファイルを削除するためにGPSで位置情報を取得したかった。

1.作業前確認

NanoPi M4のOSはArmbianを使っている

2.GPS受信機キットの情報整理

http://akizukidenshi.com/download/ds/akizuki/AE-GNSS_manual_r1.00s.pdf

ピン配置
5V
GND
RXD
TXD
1PPS
UART 通信速度 
9600bps ( デフォルト )、 4800 ~ 115200bps ( 設定可 )

3.NanoPi M4の情報整理

http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4

UART0 - UART3まではシステム側で使用されている。
UART4を使えばいい。
ピンは19と21を使います。
ピンの電圧は3Vとなっていますので、そのまま接続して大丈夫。

4.NanoPi − GPSキットの接続

5V     - Pin 1
GND - Pin 3
RXD - Pin 19
TXD - Pin 21
1PPS - 今回は未使用

5. NanoPi M4でUART4を使えるようにする

/boot/armbianEnv.txt の編集

sudo vi /boot/armbianEnv.txt
overlay= uart4

上記を追記後、再起動します。

/dev/ttyS4 の通信速度のデフォルト値を設定します。
/dev/ttyS*の部分は環境により番号が違う可能性もあります。

sudo stty -F /dev/ttyS4 ispeed 9600

GPSを /dev/gps0 でアクセスできるようにudev にて シンボリックリンクを作成します。

sudo vim /etc/udev/rules.d/60-selialgps.rules
KERNEL=="ttyS4", SYMLINK+="gps0"

上記を作成後、再起動します。

2.GPS受信機キットからデータを取得するためのソフトウェアをインストール

gpsd, gpsd-clientsをインストールします。

sudo apt-get install gpsd gpsd-clients

設定ファイルを書き換えます。

sudo vim /etc/default/gpsd 
START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/gps0"
GPSD_OPTIONS=""

サービスの再起動を行いますが、自分の環境ではエラーが発生しました。

sudo systemctl start gpsd

エラーメッセージ

Dec 15 21:18:26 nanopim4 systemd[1]: Failed to create listening socket: Cannot assign requested address
Dec 15 21:18:26 nanopim4 systemd[1]: gpsd.socket: Failed to listen on sockets: Cannot assign requested address
Dec 15 21:18:26 nanopim4 systemd[1]: gpsd.socket: Failed with result 'resources'.
Dec 15 21:18:26 nanopim4 systemd[1]: Failed to listen on GPS (Global Positioning System) Daemon Sockets.

NanoPi側でIPv6を無効にしていたので、gpsd.socketに記載されているIPv6用の設定が満たされずにエラーが出ているようです。
回避するにはIPv6を有効にするか、/lib/systemd/system/gpsd.socketからIPv6用の設定を削除します。今回は後者を選択しました。

sudo vim /lib/systemd/system/gpsd.socket
[Unit]
Description=GPS (Global Positioning System) Daemon Sockets
[Socket]
ListenStream=/var/run/gpsd.sock
ListenStream=127.0.0.1:2947
SocketMode=0600
[Install]
WantedBy=sockets.target

ListenStream=[::1]:2947を削除しました。
再起動するとgpsdが起動されているのを確認します。

3. モニタリング

gpsmonというコマンドが使えるようになっています。

gpsmon

スクリーンショット 2019-12-15 21.36.26

位置情報を正しく取得できると、LatitudeとLomgitudeに値が表示されます。

4.GPS受信キットの感度について

正しく衛星と通信が始まると、LEDランプが点灯 -> 点滅に変化します。
自分の環境では10分ほどかかりました。またアンテナの位置が結構シビアで窓の近くに置いても受信せずに何度か位置の変更を行いました。

この記事が気に入ったらサポートをしてみませんか?