1. 最近購入したM5Stack製のGPSモジュール
-
GPSユニット v1.1

比較的新しいチップAT6668を使用
複数の衛星(GPS、BD2、BD3、GLONASS、GALILEO、QZSS)を受信可能
UARTインタフェース 115200bps
2. 自分の記事に何度も登場してきたGPSモジュール
-
秋月電子通商GPS受信機キット(終売)

10年程前のチップGYSFDMAXBを使用
GPSおよびQZSS(2機(衛星番号194、195のみ))
UARTインタフェース 9600bps
上記2つのGPSを同時に接続し、生NMEAをシリアルに出力して違いを見てみます(今回は、M5StickC-Plus2(ESP32-PICO-V3-02)を使用。Raspberry Pi Pico(RP2040)でもよい)。
3. 比較コード
【接続構成】M5StickC-Plus2 の Grove端子に M5 GPS v1.1、拡張ピン(25, 26)に 秋月モジュール を接続しました。
// 2つのGPSモジュールの生NMEAを比較するためのスケッチ
#include <M5Unified.h>
// GPS 1: M5Stack GPSユニット v1.1
static const int RXPin1 = 33, TXPin1 = 32; //Grove端子
static const uint32_t Baud1 = 115200;
// GPS 2: 秋月電子製モジュール
static const int RXPin2 = 25, TXPin2 = 26;
static const uint32_t Baud2 = 9600;
HardwareSerial gpsSerial1(1);
HardwareSerial gpsSerial2(2);
// 2つのモジュールから同時にデータが届いても行の途中で混ざらないよう、
// 改行が来るまで1行分をバッファに溜めてから、タグ付きでまとめて出力する。
char lineBuf1[128]; int lineLen1 = 0;
char lineBuf2[128]; int lineLen2 = 0;
void pumpGps(HardwareSerial& src, const char* tag, char* buf, int& len)
{
while (src.available()) {
char c = src.read();
if (c == '\r') continue;
if (c == '\n') {
buf[len] = '\0';
Serial.print(tag);
Serial.println(buf);
len = 0;
continue;
}
if (len < 127) buf[len++] = c;
}
}
void setup()
{
M5.begin();
Serial.begin(115200);
delay(100);
gpsSerial1.setRxBufferSize(1024);
gpsSerial1.begin(Baud1, SERIAL_8N1, RXPin1, TXPin1);
gpsSerial2.setRxBufferSize(1024);
gpsSerial2.begin(Baud2, SERIAL_8N1, RXPin2, TXPin2);
}
void loop()
{
M5.update();
pumpGps(gpsSerial1, "[M5GPS1.1] ", lineBuf1, lineLen1);
pumpGps(gpsSerial2, "[Akizuki ] ", lineBuf2, lineLen2);
}
4. 生NMEA出力結果(抜粋)
見やすくするために 同類センテンスを上下に並べています(経度緯度はダミーに変更済み)
$GNRMC や $GPRMC などのプレフィックス:「GNから始まるのは複数衛星(GNSS)を統合したデータ、GPはGPS単体のデータ」を表します。
[2026-08-27 14:01:55] [M5GPS1.1] $GNRMC,050155.00,A,3500.00000,N,13900.00000,E,0.00,,270826,,,A,V*24
[2026-08-27 14:01:55] [Akizuki ] $GPRMC,050155.000,A,3500.0000,N,13900.0000,E,0.03,350.44,270826,,,D*6E
[2026-08-27 14:01:55] [M5GPS1.1] $GNVTG,,,,,0.00,N,0.01,K,A*25
[2026-08-27 14:01:55] [Akizuki ] $GPVTG,350.44,T,,M,0.03,N,0.05,K,D*38
[2026-08-27 14:01:55] [M5GPS1.1] $GNGGA,050155.00,3500.00000,N,13900.00000,E,1,30,0.6,54.31,M,39.75,M,,*45
[2026-08-27 14:01:55] [Akizuki ] $GPGGA,050155.000,3500.0000,N,13900.0000,E,2,10,1.00,64.2,M,39.5,M,,*59
[2026-08-27 14:01:55] [M5GPS1.1] $GNGSA,A,3,05,10,12,15,18,20,23,24,25,,,,1.1,0.6,0.9,1*36
[2026-08-27 14:01:55] [M5GPS1.1] $GNGSA,A,3,71,72,87,,,,,,,,,,1.1,0.6,0.9,2*31
[2026-08-27 14:01:55] [M5GPS1.1] $GNGSA,A,3,05,15,34,36,,,,,,,,,1.1,0.6,0.9,3*3F
[2026-08-27 14:01:55] [M5GPS1.1] $GNGSA,A,3,03,04,06,07,09,10,12,19,20,22,36,,1.1,0.6,0.9,4*39
[2026-08-27 14:01:55] [M5GPS1.1] $GNGSA,A,3,02,03,07,,,,,,,,,,1.1,0.6,0.9,5*3C
[2026-08-27 14:01:55] [Akizuki ] $GPGSA,A,3,18,23,10,12,25,24,15,195,194,05,,,1.34,1.00,0.89*0F
[2026-08-27 14:01:55] [M5GPS1.1] $GPGSV,3,1,12,05,11,149,19,10,32,318,36,12,35,154,28,13,,,27,1*53
[2026-08-27 14:01:55] [M5GPS1.1] $GPGSV,3,2,12,15,51,081,17,18,21,225,38,20,22,089,20,23,65,301,40,1*68
[2026-08-27 14:01:55] [M5GPS1.1] $GPGSV,3,3,12,24,68,026,30,25,14,186,29,42,47,201,30,43,49,179,30,1*6D
[2026-08-27 14:01:55] [M5GPS1.1] $GLGSV,1,1,04,71,58,016,20,72,22,318,29,73,71,090,,87,15,283,27,1*7A
[2026-08-27 14:01:55] [M5GPS1.1] $GAGSV,2,1,05,05,57,319,38,15,12,321,32,16,,,31,34,37,272,41,7*40
[2026-08-27 14:01:55] [M5GPS1.1] $GAGSV,2,2,05,36,28,210,22,7*4A
[2026-08-27 14:01:55] [M5GPS1.1] $BDGSV,4,1,13,01,49,179,19,02,18,253,,03,41,226,36,04,46,145,34,1*72
[2026-08-27 14:01:55] [M5GPS1.1] $BDGSV,4,2,13,06,85,328,40,07,51,228,34,09,58,324,39,10,41,223,41,1*72
[2026-08-27 14:01:55] [M5GPS1.1] $BDGSV,4,3,13,12,45,108,28,19,69,076,24,20,25,114,24,22,44,320,37,1*73
[2026-08-27 14:01:55] [M5GPS1.1] $BDGSV,4,4,13,36,59,185,32,1*43
[2026-08-27 14:01:55] [M5GPS1.1] $GQGSV,1,1,03,02,18,164,26,03,32,195,37,07,47,201,08,1*5E
[2026-08-27 14:01:55] [Akizuki ] $GPGSV,4,1,14,24,68,026,40,23,65,301,29,15,51,081,23,12,35,154,32*76
[2026-08-27 14:01:55] [Akizuki ] $GPGSV,4,2,14,10,32,318,45,195,32,195,37,20,22,089,17,18,21,225,36*4B
[2026-08-27 14:01:55] [Akizuki ] $GPGSV,4,3,14,194,18,164,23,25,14,186,26,05,12,149,14,22,08,037,*46
[2026-08-27 14:01:55] [Akizuki ] $GPGSV,4,4,14,32,06,289,21,44,04,260,*7B
[2026-08-27 14:01:55] [M5GPS1.1] $GNGLL,3500.00000,N,13900.00000,E,050155.00,A,A*7E
[2026-08-27 14:01:55] [Akizuki ] $GPGLL,3500.0000,N,13900.0000,E,050155.000,A,D*55
[2026-08-27 14:01:55] [M5GPS1.1] $GNGST,050155.00,0.82,,,,0.62,0.68,0.66,0.08,0.12*68
[2026-08-27 14:01:55] [M5GPS1.1] $GNZDA,050155.00,27,08,2026,00,00*77
[2026-08-27 14:01:55] [Akizuki ] $GPZDA,050155.000,27,08,2026,,*59
[2026-08-27 14:01:55] [M5GPS1.1] $GNDHV,050155.00,0.00,-0.003,-0.003,0.002,0.00,,0.00,,,M*2A
[2026-08-27 14:01:55] [M5GPS1.1] $GPTXT,01,01,02,MS=7,9,01CA4A10,33,14,002C0B6F,33,4,004001C0*23
[2026-08-27 14:01:55] [M5GPS1.1] $GPTXT,01,01,01,ANTENNA OPEN*25
[2026-08-27 14:01:55] [M5GPS1.1] $GPTXT,01,01,02,RF=0,0,0,0,A,0,,,,B,0,,,,C,0,,,,,0,6F,00,0*48
[2026-08-27 14:01:56] [M5GPS1.1] $GNRMC,050156.00,A,3500.00000,N,13900.00000,E,0.00,,270826,,,A,V*27
[2026-08-27 14:01:56] [Akizuki ] $GPRMC,050156.000,A,3500.0000,N,13900.0000,E,0.00,350.44,270826,,,D*66
[2026-08-27 14:01:56] [M5GPS1.1] $GNVTG,,,,,0.00,N,0.01,K,A*25
[2026-08-27 14:01:56] [Akizuki ] $GPVTG,350.44,T,,M,0.00,N,0.01,K,D*3F
[2026-08-27 14:01:56] [M5GPS1.1] $GNGGA,050156.00,3500.00000,N,13900.00000,E,1,30,0.6,54.31,M,39.75,M,,*46
[2026-08-27 14:01:56] [Akizuki ] $GPGGA,050156.000,3500.0000,N,13900.0000,E,2,10,1.00,64.2,M,39.5,M,,*5A
[2026-08-27 14:01:56] [M5GPS1.1] $GNGSA,A,3,05,10,12,15,18,20,23,24,25,,,,1.1,0.6,0.9,1*36
[2026-08-27 14:01:56] [M5GPS1.1] $GNGSA,A,3,71,72,87,,,,,,,,,,1.1,0.6,0.9,2*31
[2026-08-27 14:01:56] [M5GPS1.1] $GNGSA,A,3,05,15,34,36,,,,,,,,,1.1,0.6,0.9,3*3F
[2026-08-27 14:01:56] [M5GPS1.1] $GNGSA,A,3,03,04,06,07,09,10,12,19,20,22,36,,1.1,0.6,0.9,4*39
[2026-08-27 14:01:56] [M5GPS1.1] $GNGSA,A,3,02,03,07,,,,,,,,,,1.1,0.6,0.9,5*3C
[2026-08-27 14:01:56] [Akizuki ] $GPGSA,A,3,18,23,10,12,25,24,15,195,194,05,,,1.34,1.00,0.89*0F
[2026-08-27 14:01:56] [M5GPS1.1] $GPGSV,3,1,12,05,11,149,19,10,32,318,37,12,35,154,28,13,,,27,1*52
[2026-08-27 14:01:56] [M5GPS1.1] $GPGSV,3,2,12,15,51,081,17,18,21,225,38,20,22,089,20,23,65,301,40,1*68
[2026-08-27 14:01:56] [M5GPS1.1] $GPGSV,3,3,12,24,68,026,30,25,14,186,29,42,47,201,30,43,49,179,30,1*6D
[2026-08-27 14:01:56] [M5GPS1.1] $GLGSV,1,1,04,71,58,016,20,72,22,318,29,73,71,090,,87,15,283,27,1*7A
[2026-08-27 14:01:56] [M5GPS1.1] $GAGSV,2,1,05,05,57,319,38,15,12,321,32,16,,,31,34,37,272,41,7*40
[2026-08-27 14:01:56] [M5GPS1.1] $GAGSV,2,2,05,36,28,210,22,7*4A
[2026-08-27 14:01:56] [M5GPS1.1] $BDGSV,4,1,13,01,49,179,19,02,18,253,,03,41,226,36,04,46,145,34,1*72
[2026-08-27 14:01:56] [M5GPS1.1] $BDGSV,4,2,13,06,85,328,40,07,51,228,34,09,58,324,39,10,41,223,40,1*73
[2026-08-27 14:01:56] [M5GPS1.1] $BDGSV,4,3,13,12,45,108,28,19,69,076,24,20,25,114,24,22,44,320,37,1*73
[2026-08-27 14:01:56] [M5GPS1.1] $BDGSV,4,4,13,36,59,185,24,1*44
[2026-08-27 14:01:56] [M5GPS1.1] $GQGSV,1,1,03,02,18,164,26,03,32,195,37,07,47,201,12,1*55
[2026-08-27 14:01:56] [Akizuki ] $GPGSV,4,1,14,24,68,026,40,23,65,301,29,15,51,081,23,12,35,154,32*76
[2026-08-27 14:01:56] [Akizuki ] $GPGSV,4,2,14,10,32,318,45,195,32,195,36,20,22,089,17,18,21,225,36*4A
[2026-08-27 14:01:56] [Akizuki ] $GPGSV,4,3,14,194,18,164,24,25,14,186,25,05,12,149,14,22,08,037,*42
[2026-08-27 14:01:56] [Akizuki ] $GPGSV,4,4,14,32,06,289,22,44,04,260,*78
[2026-08-27 14:01:56] [M5GPS1.1] $GNGLL,3500.00000,N,13900.00000,E,050156.00,A,A*7D
[2026-08-27 14:01:56] [Akizuki ] $GPGLL,3500.0000,N,13900.0000,E,050156.000,A,D*56
[2026-08-27 14:01:56] [M5GPS1.1] $GNGST,050156.00,0.90,,,,0.68,0.75,0.72,0.08,0.11*68
[2026-08-27 14:01:56] [M5GPS1.1] $GNZDA,050156.00,27,08,2026,00,00*74
[2026-08-27 14:01:56] [Akizuki ] $GPZDA,050156.000,27,08,2026,,*5A
[2026-08-27 14:01:56] [M5GPS1.1] $GNDHV,050156.00,0.01,-0.004,0.007,0.006,0.00,,0.00,,,M*02
[2026-08-27 14:01:56] [M5GPS1.1] $GPTXT,01,01,02,MS=7,9,01CA4A10,33,14,002C0B6F,33,4,004001C0*23
[2026-08-27 14:01:56] [M5GPS1.1] $GPTXT,01,01,01,ANTENNA OPEN*25
[2026-08-27 14:01:56] [M5GPS1.1] $GPTXT,01,01,02,RF=0,0,0,0,A,0,,,,B,0,,,,C,0,,,,,0,6F,00,0*48
実際は衛星を捕捉してから20分間ぐらいのログを取得し、それをAIに分析してもらいました。
5. 2つのGPSモジュールの特徴・相違点
2つのモジュールのNMEAには、明確な世代差が表れています。
-
対応している衛星系統の数
GPSモジュール 出力したGSV文 M5-GPSユニット $GPGSV(GPS),$BDGSV(BeiDou),$GLGSV(GLONASS),$GAGSV(Galileo),$GQGSV(QZSS)秋月モジュール $GPGSVのみ秋月モジュールはGPS(+QZSSが混在)のみの単一系統ですが、M5-GPSユニットは5系統同時受信しています。これが後述するHDOPの差に直結しています。
-
NMEAプロトコルのバージョンが違う
GPSモジュール GSA文末尾のsystemIdフィールド(NMEA4.1拡張) M5-GPSユニット $GNGSA,A,3,02,03,07,,,,,,,,,,1.5,0.7,1.3,5*32←末尾に "5"(系統ID)がある秋月モジュール $GPGSA,A,3,18,23,10,12,24,,,,,,,,1.77,1.49,0.95*0F←末尾は精度指標だけ秋月モジュールにはこの拡張フィールドが無く、NMEA4.1以前の古い形式であることが分かります。
-
精度(小数点桁数)が違う
GPSモジュール 時刻 経度緯度 M5-GPSユニット 045801.00 (10ms単位) 3500.00000 (5桁) 秋月モジュール 045801.091 (1ms単位) 3500.0000 (4桁) 緯度経度・高度はM5-GPSユニットの方が1桁多く出力しています(内部演算精度が高いことを示唆)。一方で、時刻の小数点桁数だけは秋月モジュールの方が細かい。
-
精度指標(HDOP)と使用衛星数に大差
GPSモジュール 使用衛星数 HDOP M5-GPSユニット 26〜33機(5系統合計) 0.6〜0.7(非常に高精度) 秋月モジュール 5〜10機(GPS単独+QZSS) 1.0〜1.5(標準的) これは今回の比較の中で最も実用上の差が大きい点です。衛星数が3〜5倍多い分、位置の幾何学的な精度(HDOP)も大きく改善しており、実際の測位誤差もM5-GPSユニットの方が小さいと推測されます。
(今回テストで捕捉した衛星数であって、秋月モジュールが衛星10機しか捕捉できない、ということではありません) -
M5-GPSユニットだけに存在する追加センテンス
$GNDHV(速度・進行方向の詳細)、$GNGST(擬似距離誤差の統計情報)は秋月モジュールには無く、M5-GPSユニットだけが出力しています。より新しいファームウェアの拡張機能です。
6. まとめ
M5Stack製GPSユニットは、次のいずれの項目でも、旧世代の秋月モジュールを明確に上回っています。「新しい方が精度が高いだろう」という予想は、この比較で裏付けられたと言えるでしょう。
- 対応衛星系統数(5対1)
- NMEAバージョン(4.1拡張フィールドの有無)
- 出力桁数の精度(1桁高い)
- 実際のHDOP・使用衛星数
終わりに
M5Stack製GPSユニットは、M5専用モジュールではありません。
普通にUARTインタフェースでつなぐだけで、相手CPU/SoC は 何でもよいです。
今後は、M5Stack製 GPSユニット v1.1 をメインで使用しようと思います。
-
M5Stack製GPSユニット v1.1 起動時センテンス
$GPTXT,01,01,02,MA=CASGN*24 $GPTXT,01,01,02,HW=ATGM336H,0006020308818*1C $GPTXT,01,01,02,IC=AT6668-6N-74-00000A30,FJA4A4J-31-5AL231050*10 $GPTXT,01,01,02,SW=URANUS6,V6.3.2.0*1F $GPTXT,01,01,02,TB=2025-05-16,10:00:42*4A $GPTXT,01,01,02,BS=BOOT8A,V8.0.3.0*51 $GPTXT,01,01,02,MO=GBREQ*31 $GPTXT,01,01,02,SM=00080CA9,GPS,BD2,GLN,GAL,QZS*66 $GPTXT,01,01,02,SR=1,0000,F3,02,1,00,732,0,0*30BD3 を受信するためには、次の
GNSStoolKit3で設定が必要なようです。
("$CCSIR,4,1*4D"かも?)
-
GNSStoolKit3(Windows EXE)
GNSS(Global Navigation Satellite System / 全球測位衛星システム)
- GPS:アメリカ
- BeiDou(BD2/BD3):中国(北斗衛星導航系統)
- GLONASS:ロシア
- GALILEO:欧州連合
- NavIC:インド
- QZSS:日本(準天頂衛星システム:みちびき)
以上