VK2828U7G5LF GPS Moduleを使ってみた

以前、初めてRaspberry Pi Zeroを購入して「ラズベリーパイ zero GPSロガー作成」という記事を投稿しました。その時は、GPS装置に秋月電子通商さんで扱っている製品を使いましたが、現在、廃版になってしまいました。その後継機はあるのですが、初代よりも使いづらいので(個人的感想)、今回はAmazonの格安製品を購入してみました。
そして、前と同様にGPS受信機を作成してみました。今回はArduino UNO R4 MINIMAとの組み合わせでシステムを構築してみます。
1.使用するハードウェア
GPS受信機
今回使用するGPS受信機ですが、感度が良いと口コミにあります。GPSって測位に時間がかかると、使う気が失せてしまいますからね。
1 PPS Time standard pulse output
2 VCC Power supply input 3.3V-5V
3 TX UART/TTL Interface
4 RX UART/TTL Interface
5 GND Ground
6 EN 有効・無効
接続はシリアル通信(UART)を使うので、前回と同じ仕様になります。GPSモジュールからは線が6本出ており、その仕様はネットで探すと出てきますが、製品端子1番の「B」の印字がマニュアルでは「P」です。ここはPPS信号のはずですが、どうして「B」なんでしょう。
また、付属するケーブルの色が、マニュアルと異なっています。本来、電源を表す赤ケーブルがPPSの線として使われるなど、注意が必要です。

そして、このままでは使いにくいので、ブレッドボードで使用できるように基板上にピンヘッダを配置した端子を用意しました。
1 5V
2 GND
3 TXD0
4 RXD0
5 1PPS
6 EN 有効・無効
線の順番も分かりやすいように変えています。
Arduino UNO R4 MINIMA
今回、Arduino UNO R4 MINIMAを使いました。MINIMAは、Wi-Fiが使えないので出番が少ないけれど、I/Oが豊富なのでGPS受信機には向いています。(SDカードスロットがないのがつらい)
ジャンパーワイヤーの接続

GPS装置とArduino UNO R4 MINIMAの接続は以下のとおりです。
5V / 5V出力
GND / GND
TXD0 / GPIO2
RXD0 / GPIO3
1PPS / 使わない
EN / 3.3V出力
TXとRXに接続するGPIOですが、最初は10と11を指定したのですが、動作しませんでした。Arduino UNO R3であれば問題ないようですが、R4では使えないようです。
2.プログラム
#include <SoftwareSerial.h>
SoftwareSerial GpsSerial(2, 3); // 受信, 送信
void setup() {
Serial.begin(9600);
GpsSerial.begin(9600);
}
void loop() {
if (GpsSerial.available()) {
Serial.write(GpsSerial.read());
}
}
シリアルモニタに出力するだけのプログラムなので、これだけです。SoftwareSerialライブラリはほんと便利です。

実行してしばらくするとPPSのLEDが点滅して(赤枠)、NMEA-0183データがシリアルモニタに表示されます。

オフライン後にキャプチャーしたので、警告がでちゃってます。このように、NMEA-0183データが出力されています。NMEA-0183データをもとに、緯度・経度、速度、高度などが取得できます。これらは、TinyGPSPlusライブラリなどを使えば、簡単に取得できるはずです。
3.新GPSはRaspberry Pi Picoで使用します

今回購入したGPS装置ですが、測位は思ったよりも早くない感じです。秋月電子通商さんのよりは良い気もしますが、大きく測位性能が上がったという感じはありませんでした。しかしながら、必要十分に動作するGPSであり、価格が安いので購入する価値は十分にあるでしょう。
このGPS装置は、次にRaspberry Pi Picoで使用します。こちらが本命であり、車載プログラムで使用したいと考えています。⇒テスト中ですが、TinyGPSPlusライブラリで高度や衛星数がなぜか取得できなくて困ってます。他の属性と何が違うのか分かりません。Raspberry Piの方で1バイトずつ解析しようと思います。