ESP32 / M5Stack / M5Stack Core2 と GPS

M5Stack Core2 と GPSユニット

$Date: 2024/08/12 06:09:50 $
$Revision: 1.1 $

M5Stack用のGPS

M5Stackで利用できるGPSは、モジュール型とGrove接続型(M5STACK-GPS-UNIT)の2つがあります。

M5Stack Core2にはGPSモジュールが物理的に利用できない

M5Stackにはどちらも利用できますが、M5Stack Core2の場合は、モジュール型が物理的に利用できませんので、GPSユニット が唯一の選択肢になります(他の製品があるかも...未調査)。

M5Stack用GPSモジュール V2が便利&見た目もいいのですが、M5Stack Core2の場合、モジュールの一部(ネジの部分)が物理的に干渉して利用できません。

モジュール側のネジをなんとかすれば、M5StackCore2でも利用できそうな気はするのですが...(未検証)

Grove接続のGPSユニット

M5Stack用のGPSには、モジュールの他に Grove接続のGPSユニットがありますので、そちらで試してみました。 M5StackCore2と一体化できませんので不格好にはなりますが、GPSモジュールより安価です(中身は、中華クオリティーで、私が入手した物はアンテナ部分とか歪んで取り付けられてました)。

表面
表面 1385x923
裏面
裏面 1385x923
内部表面
内部表面 6000x4000
アルナマック保持用?のバッテリーも内蔵している
内部裏面
内部裏面 1385x923
M5Stack Core2に接続した状態
M5Stack Core2に接続した状態 1385x923
GPSがロック前の写真です(笑)
M5Stack Core2に接続した状態
M5Stack Core2に接続した状態 1385x923
GPSロック

M5Stack, M5Stack Core2のGrove端子は I2C用?

M5Stack, M5Stack Core2本体のGrove端子はI2C用になっているようです(端子が赤色になっています)。 それに対し、GPSモジュールはUARTです(端子はUARTを意味する青色)。 本来であれば、UARTが接続できるようにモジュール(M5Stack PLUSエンコーダーモジュール)が必要になるらしいのですが、これはCore2には刺さらない気がする....

しかし、ESP32はピンアサインを一定範囲で柔軟に変更できるので、まぁ、赤端子をUART用に変更すればなんとかなるだろう。。との目論見で試してみました。

コード(スケッチ)の変更が必要

しかし、モジュールとは違い、Grove型接続GPSユニットの利用には、サンプルコードの変更が必要です。 一般的に出回っているGPS関係のサンプルコードはGPSモジュール用にかかれているもので、そのままではGrove接続のGPSユニットでは動作しません。

Arduino IDEにM5Stack関係のライブラリーを追加したきに加えられるサンプルコードですが、そのままでは動きません。 スケッチ例,M5Core2, Unit, GPS_AT6558, FullExampleのコード中、setup関数内のコードを下記のように変更すれば大丈夫です。

クリップボードにコピーしました
void setup()
{
  M5.begin();
  ss.begin(GPSBaud);
}
クリップボードにコピーしました
void setup()
{
  M5.begin();
  ss.begin(GPSBaud, SERIAL_8N1, 33, 32 ); // for M5Stack Core2
}

変数ssはHardwareSerialで定義しておくことが必要です。

要は、モジュール型とGrove接続では、利用しているポート(ピン)が違うということです。

これは、極々、基本的なことなのですが、これに気づくのにしばらく時間がかかりました(涙&笑) 最初、1個購入して動作しないので「不良品かぁ?」と思って、2個目を購入。それでも動かないので、ん....とおもって調べたらこういうことでした。お勉強代は 1573円でした。

M5StackでもGPSユニットを使いたい

M5Stackには純正GPSモジュールがありますが、見た目の一体感と安心感が得られる分、こちらは 5000円強。 一方、見た目気にしなければGPSユニットは2000円弱。 となれば、安価なGPSユニットを使いたくなります。 本来であれば、UARTが接続できるようにモジュール(M5Stack PLUSエンコーダーモジュール)が必要ですが、これを揃えるなら.....スイッチサイエンスでは既に販売終了(本家サイトでは$10程度)...

M5Stackの場合は、22, 21 でうまくいきます。

クリップボードにコピーしました
static const uint32_t GPSBaud = 9600;
ss.begin( GPSBaud, SERIAL_8N1, 22, 21 );

実際問題としては、いろいろと他にもおまじないが必要になると思います。 21,22は他の用途でも利用していますので、他の部分で制限が生じます。

あるいは、https://www.arduinolibraries.info/libraries/esp-software-serial の EspSoftwareSerialライブラリーを利用して、

クリップボードにコピーしました
static const uint32_t GPSBaud = 9600;

SoftwareSerial ss;
ss.begin( GPSBaud, SWSERIAL_8N1, 22, 21, false  );

とします。どちらかといえば、こちらの方が安心かも...

at Your Own Riskでお願いします。

印刷日: 2024-12-27 11:24:00
User:
URL: https://ketaitracker.info/blog/index.php?page=m5stackcore2-gps