SIM7500のGPSを利用する


環境

$ cat /etc/armbian-release 
# PLEASE DO NOT EDIT THIS FILE
BOARD=nanopineo2
BOARD_NAME="NanoPi Neo 2"
BOARDFAMILY=sun50iw2
VERSION=5.49
LINUXFAMILY=sunxi64
BRANCH=next
ARCH=arm64
IMAGE_TYPE=user-built
BOARD_TYPE=conf
INITRD_ARCH=arm64
KERNEL_IMAGE_TYPE=Image
$ cat /etc/debian_version 
9.4

アクティブアンテナの電源回路

sim7500a_sim7500e_sim7500je_sim7500jc_sim7500s_sim7500sa_hardware_design_v1.01.pdf 39pに記載のFig30 より。

最低限オレンジで囲ったところだけつくればとりあえずアクティブアンテナに電源を供給することはできる。
(πマッチの定数どう決めばいいかよくわかんなかったのでマッチング回路は省略した)

GPSの有効化

GPSは工場出荷値ではOFFのようなので、

$ screen /dev/ttyUSB2 115200

でSIM7500のATポートを開いて、

AT+CGPS=1

でスタンドアロンモードでGPSセッション開始。
(AGPSも使えるようだが、今回はLTEがoffの状態でもGPSを使用する必要があったのでスタンドアロンモード)

AT+CGPSAUTO=1

を設定しておくと、次回モジュール起動時からGPSセッションが自動的に開始される。

$ cat /dev/ttyUSB1

でNMEAセンテンスがずらずら流れてきていたらGPSは動いている(実際に衛星を捕捉できているかどうかは別として)

gpsdのインストール

NMEAセンテンスについて学んで自力でパースしてもよさそうだけど、それはちょっとやりたくなかったので定番のgpsdを使う。

sudo apt-get update
sudo apt-get install gpsd gpsd-clients

gpsdの設定

デフォルトのunitファイルが設定ファイルとして/etc/default/gpsdを読みにいくようになっているのだが、/etc/gpsd/gpsd.confを読みにいくように変更したいので、デフォルトのunitファイルを上書きする設定を作成する。
参考: https://qiita.com/nvsofts/items/529e422bb8a326401c39

$ sudo systemctl edit --full gpsd

Nanoが起動して嫌なので、

sudo update-alternatives --config editor

して、vimを選択するとvimで編集できる。

内容は以下のようにする。

[Unit]
Description=GPS (Global Positioning System) Daemon
Requires=gpsd.socket
# Needed with chrony SOCK refclock
After=chronyd.service

[Service]
#EnvironmentFile=-/etc/default/gpsd
EnvironmentFile=/etc/gpsd/gpsd.conf
ExecStart=/usr/sbin/gpsd -N $GPSD_OPTIONS $DEVICES

[Install]
Also=gpsd.socket

/etc/gpsd/gpsd.confは以下のようにする。

/etc/gpsd/gpsd.conf
# Start the gpsd daemon automatically at boot time
START_DAEMON="true"

# Use USB hotplugging to add new USB devices automatically to the daemon
USBAUTO="false"

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyUSB1"

# Other options you want to pass to gpsd
GPSD_OPTIONS=""

gpsdの動作チェック

cgps

左側の枠の中に、

Status:     3D FIX (X secs)

と出ていれば、測位できている状態です。
コールドスタートになるので、3D fix まで数分程度かかる。

緯度経度高度を読む

cgpsでも出力されているJSONっぽい部分だけほしい場合、gpspipeコマンドを使います。

gpspipe -w

続く・・・