カメラ
常用カメラ
NIKON COOLPIX AW130
FDR-X3000R (SONY)
DJI Action 2
小物
どこでもセンサ Planex WS-USB01-THP
ESP32
M5Stack
PC
EIZO
FreeBSD
FreeBSD on Raspberry Pi2
Arduino
VMware
HAM
M5Stackで利用できるGPSは、モジュール型とGrove接続型(M5STACK-GPS-UNIT)の2つがあります。
M5Stackにはどちらも利用できますが、M5Stack Core2の場合は、モジュール型が物理的に利用できませんので、GPSユニット が唯一の選択肢になります(他の製品があるかも...未調査)。
M5Stack用GPSモジュール V2が便利&見た目もいいのですが、M5Stack Core2の場合、モジュールの一部(ネジの部分)が物理的に干渉して利用できません。
モジュール側のネジをなんとかすれば、M5StackCore2でも利用できそうな気はするのですが...(未検証)
M5Stack用のGPSには、モジュールの他に Grove接続のGPSユニットがありますので、そちらで試してみました。 M5StackCore2と一体化できませんので不格好にはなりますが、GPSモジュールより安価です(中身は、中華クオリティーで、私が入手した物はアンテナ部分とか歪んで取り付けられてました)。
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モジュールがありますが、見た目の一体感と安心感が得られる分、こちらは 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でお願いします。