modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

Raspberry Pi Zero WHで、みちびき対応GPS受信機キットを使い位置情報を取得する

秋月電子GPS受信機キットを買ったので、位置情報を取得してみた1

GPS受信機キット

akizukidenshi.com

小型高感度GPSモジュールを使ったGPS受信機キットで、バックアップ電池の電池ボックスとピンヘッダのはんだ付けが必要 ※ バックアップ電池を使わない場合、電池ボックスは不要

配線

Raspberry Pi Zero GPSモジュール
5V 5V
GND GND
RxD TxD
TxD RxD
なし 1PPS

とても基本的なことなんですが、RxDとTxDはクロスさせて接続します。これを間違えて、位置情報が取れず何度も設定を見直し、時間を無駄にしてしまった。。※ 上の写真は間違えた状態です

シリアルの有効化

raspi-config

sudo raspi-config
  • P5 Interfacing Options
  • P6 Serial
  • YES

で、Finish

> ls /dev/serial*
/dev/serial0

/dev/serial0があることを確認

/boot/cmdline.txt

sudo vi /boot/cmdline.txt

もとの/boot/cmdline.txtから、console=serial0,115200の記述を削除する

# dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=PARTUUID=b7e00398-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_ether
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

リブート

sudo reboot

動作確認

pyserialのインストール

シリアルモジュールをインストール

pip install pyserial

repl

~$ python
Python 3.6.6 (default, Oct  7 2018, 12:22:23)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> s = serial.Serial('/dev/serial0', 9600, timeout=10)
>>> s.readline().decode('utf-8')
'$GPGGA,154327.000,,,,,0,1,,,M,,M,,*4F\r\n'

なにか値が取得できた

NMEA0183

モジュールから得られるデータは、NMEA0183に準拠したフォーマットになっている NMEA 0183 - Wikipedia

micropyGPS

取得したデータを扱いやすくするために、NMEAパーサーのmicropyGPSを使う

github.com

repl

Python 3.6.6 (default, Oct  7 2018, 12:22:23)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> from micropyGPS import MicropyGPS
>>> my_gps = MicropyGPS(9, 'dd')
>>> s = serial.Serial('/dev/serial0', 9600, timeout=10)
>>> for x in s.readline().decode('utf-8'):
...     my_gps.update(x)
...
'GPGGA'
>>> my_gps.latitude
[35.658580566666665, 'N']
>>> my_gps.longitude
[139.74323896666668, 'E']

これでいい感じの位置情報が取得できるようになった