M5StickC Plus2の後継品であるM5 StickS3が2026年1月に発売されました。
M5 StickS3 公式Docs (https://docs.m5stack.com/ja/core/StickS3)
以前、M5StickC Plus2とUnit GPS v1.1というGPSモジュールを使って、GPSを捕捉するプログラムを書いたので、それを最新のM5 StickS3向けに書き直しました。
といっても、TXとRXのピン番号を変更するだけで、そっくりそのまま動きましたのでメモ。
Unit GPS v1.1について
使用するGPSユニットは、同じM5 Stack社シリーズから出ている「Unit GPS v1.1」になります。
GROVEケーブルでM5 StickS3と繋げることができます。
Unit GPS v1.1 公式Docs(https://docs.m5stack.com/en/unit/Unit-GPS%20v1.1)
裏面のGROVEソケットの部分を見ると、M5 StickS3とUnit GPS v1.1をGROVEケーブルで繋いだ場合、ピンの割り当ては以下のようになることが分かります。
| M5 StickS3 | Unit GPS v1.1 |
|---|---|
| G | GND |
| 5V | 5V |
| RXD | G9 |
| TXD | G10 |
Unit GPS v1.1からの信号はG9ピン、Unit GPS v1.1への信号はG10ピンで送受信されるので、このピン番号を指定してGPSシリアル通信を開始します。
以下がコードの全体です。
#include <M5Unified.h>
#include <TinyGPSPlus.h>
TinyGPSPlus gps;
HardwareSerial GPSserial(2);
void setup() {
//GPSserial.begin(115200, SERIAL_8N1, 33, 32); // M5 StickC Plus2の場合
GPSserial.begin(115200, SERIAL_8N1, 10, 9); // M5 StickS3
delay(500);
M5.begin();
Serial.begin(9600);
Serial.println("GPS Start");
}
void loop() {
// GPSデータをTinyGPSPlusで解析
while (GPSserial.available()) {
gps.encode(GPSserial.read());
}
// 現在位置が有効な場合
if (gps.location.isValid()) {
double lat = gps.location.lat();
double lng = gps.location.lng();
Serial.print("lat:");
Serial.print(lat);
Serial.print(",");
Serial.print("lng:");
Serial.println(lng);
}
}
今回は、TinyGPSPlusというライブラリを使いました。
ボーレート9600bpsでシリアル通信を、115200bpsでGPSシリアル通信を行っています。
そして、以下の部分でG10ピンをTXに、G9ピンをRXに指定してGPSシリアル通信を開始しています。
// G10ピンをTXに、G9ピンをRXに指定
GPSserial.begin(115200, SERIAL_8N1, 10, 9);
このコードを実行し、GPSユニットの青いLEDが点滅を開始したら、シリアルモニターに以下のような緯度・経度が出力されます。
lat: 35.71,lng:139.70
lat: 35.71,lng:139.70
lat: 35.71,lng:139.70
...
余談:M5 StickC Plus2のGROVEポート
先代のM5 StickC Plus2のGROVEピンの割り当ては以下です。
| M5 StickC Plus3 | Unit GPS v1.1 |
|---|---|
| G | GND |
| 5V | 5V |
| RXD | G32 |
| TXD | G33 |
なので、上記のコードをM5 StickC Plus2で動かす場合は、G33ピンをTXに、G32ピンをRXに指定してあげれば同様に動きます。
// G33ピンをTXに、G32ピンをRXに指定
GPSserial.begin(115200, SERIAL_8N1, 33, 32);
ピン番号を変えるだけでM5 StickC Plus2からM5 StickS3に移植できるので便利ですね。

