1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1. 最近購入したM5Stack製のGPSモジュール

  • GPSユニット v1.1

    比較的新しいチップAT6668を使用
    複数の衛星(GPS、BD2、BD3、GLONASS、GALILEO、QZSS)を受信可能
    UARTインタフェース 115200bps

2. 自分の記事に何度も登場してきたGPSモジュール


上記2つのGPSを同時に接続し、生NMEAをシリアルに出力して違いを見てみます(今回は、M5StickC-Plus2(ESP32-PICO-V3-02)を使用。Raspberry Pi Pico(RP2040)でもよい)。

3. 比較コード

【接続構成】M5StickC-Plus2 の Grove端子に M5 GPS v1.1、拡張ピン(25, 26)に 秋月モジュール を接続しました。

arduino
// 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には、明確な世代差が表れています。

  1. 対応している衛星系統の数

    GPSモジュール 出力したGSV文
    M5-GPSユニット $GPGSV(GPS), $BDGSV(BeiDou), $GLGSV(GLONASS), $GAGSV(Galileo), $GQGSV(QZSS)
    秋月モジュール $GPGSVのみ

    秋月モジュールはGPS(+QZSSが混在)のみの単一系統ですが、M5-GPSユニットは5系統同時受信しています。これが後述するHDOPの差に直結しています。


  2. 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以前の古い形式であることが分かります。


  3. 精度(小数点桁数)が違う

    GPSモジュール 時刻 経度緯度
    M5-GPSユニット 045801.00 (10ms単位) 3500.00000 (5桁)
    秋月モジュール 045801.091 (1ms単位) 3500.0000 (4桁)

    緯度経度・高度はM5-GPSユニットの方が1桁多く出力しています(内部演算精度が高いことを示唆)。一方で、時刻の小数点桁数だけは秋月モジュールの方が細かい。


  4. 精度指標(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機しか捕捉できない、ということではありません)


  5. 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*30
    

    BD3 を受信するためには、次のGNSStoolKit3で設定が必要なようです。
    "$CCSIR,4,1*4D"かも?)


  • GNSStoolKit3(Windows EXE)

    https://github.com/zxcwhale/GnssToolKit3-binaries/releases


GNSS(Global Navigation Satellite System / 全球測位衛星システム)

  • GPS:アメリカ
  • BeiDou(BD2/BD3):中国(北斗衛星導航系統)
  • GLONASS:ロシア
  • GALILEO:欧州連合
  • NavIC:インド
  • QZSS:日本(準天頂衛星システム:みちびき)




以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?