知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

ATOM GPS Kit (M8030-KT)でお手軽Bluetooth GPSレシーバーを作った

ちょっと久しぶりにGPS絡みのことがやりたくて、M5Stackのオフィシャルページで物色していたら、すんごいモノを見つけてしまったんです。

 

じゃじゃーん!

f:id:IntellectualCuriosity:20200701005156p:plain

ATOM GPS Kit (M8030-KT)

 

これ、ATOM Liteにu-blox社のM8エンジンを搭載したモジュールとMicro SDカードスロットが付いた筐体をセットにした製品で、なんとお値段が21.5ドル(2,316円ぐらい)なんです!

 

GNSSチップのM8030-KTは、以前、秋月電子で購入した次の製品と一緒で、大きなアンテナや長いケーブルが付いているとは言え、マイコンなしで2,480円するのでATOM GPS Kitはとってもお得です!

GPS/GLONASS受信機(Galileo/BeiDou可)u‐blox M8搭載 みちびき3機受信対応

GPS/GLONASS受信機(Galileo/BeiDou可)u-blox M8搭載 みちびき3機受信対応

 

ただ、どちらの製品もデフォルト状態ではGPSGLONASS(ロシアの衛星)しか受信できません。

みきびきやGalileo(ヨーロッパの衛星)、BeiDou(中国の衛星)を受信させるにはu-blox社が提供しているu-centerというWindowsアプリで設定を変更する必要があります。

 

ATOM GPS KitはGROVEコネクタしか出ていないので、M8030-KTの設定を変更するには、ATOM GPS Kitをバラしてモジュールを取り出す必要がありました。

 

で、ATOM GPS Kitに入っていたモジュールがこれ「Beitian BN-200」です。

f:id:IntellectualCuriosity:20200701013228j:plain

安価な中国製のモジュールのようで、AliExpressで11ドルくらいで売られているのを発見しました。

 

そのページにSHコネクタのピンアサインが書かれていたので、千石電商ジャンパーピン付きのケーブルを買って、手持ちのUSBシリアル変換モジュールに繋いで設定を変更しました。

 

接続はこんな感じになります。

f:id:IntellectualCuriosity:20200701015026j:plain

GPSモジュールとUSB変換モジュールのTxD(送信)とRxD(受信)はてれこに接続するので、気を付けてくださいね。

 

u-centerでの設定変更

設定変更は「Configuration view」で行います。

 

GNSS (GNSS Config)

M8030-KTはGLONASSGalileo/BeiDouのどちらかしか選べない仕様になっているので、衛星数が圧倒的に多いGalileo/BeiDouを使う設定に変更します。

この画面ではQZSS(みちびき)もEnableになっていますが、他の設定を変更しないとNMEAで情報を得られないので、実質的にデフォルトではみちびきが使えない状態になっています。

設定を変更したら、ウィンドウ下部の「Send」ボタンを押さないと変更が反映されないので忘れずに押してください。

デフォルト

f:id:IntellectualCuriosity:20200701020738p:plain

変更後

f:id:IntellectualCuriosity:20200701020939p:plain

 

NMEA (NMEA Protocol)

みちびきの衛星番号は193,194,195,199と3桁なんですが、デフォルトではNMEAフォーマットが3桁の衛星番号に対応していません。

GalileoとBeiDouも3桁のため、3桁に対応するように変更します。

また、199番は当初の4機計画から7機計画に変更になった後に決められた番号のため、今売られている殆どのモジュールは対応していないというなんとも悲しい状況となっています。

デフォルト

f:id:IntellectualCuriosity:20200701022255p:plain
変更後

f:id:IntellectualCuriosity:20200701022458p:plain

 

PRT (Ports)

受信する衛星数を増やすと9600bpsでは通信速度が追い付かないことがあるので、通信速度を19200に上げます。

モジュールのSHコネクタはUART1に繋がっているので、Targetは「1 - UART1」です。

デフォルト

f:id:IntellectualCuriosity:20200701031052p:plain

変更後

f:id:IntellectualCuriosity:20200701031258p:plain

 

CFG (Configuration)

このままではモジュールの電源を切ってしまうと設定がデフォルトに戻ってしまうので、不揮発メモリに現在の設定を保存します。

次の画面のようにして「Send」ボタンを押してください。

f:id:IntellectualCuriosity:20200701031936p:plain

 

プログラム

Arduino IDEの設定

環境設定

追加のボードマネージャーのURLに次のURLを追加します。

https://dl.espressif.com/dl/package_esp32_index.json

 

ボードマネージャ

「esp32」をインストールします。

f:id:IntellectualCuriosity:20200701034206p:plain

ボードは「M5Stick-C」を選びます。

 

ライブラリマネージャ

「M5Atom」をインストールします。

f:id:IntellectualCuriosity:20200701034412p:plain

M5Aton.hの中でFastLED.hをインクルードしてるため、「FastLED」をインストールします。

f:id:IntellectualCuriosity:20200701033800p:plain

 

スケッチ

スケッチはATOM GPS Kitのサンプルコードを参考にして、GPSモジュールから受け取ったデータをそのままBluetoothへ転送するように改良しました。

非常に短いプログラムです。

#include <M5Atom.h>
#include <BluetoothSerial.h>

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  M5.begin(true,false,true); 
  uint64_t chipid = ESP.getEfuseMac();
  char chipname[256];
  sprintf(chipname, "SerialBT_%04X", (uint16_t)(chipid >> 32));
  Serial.printf("Bluetooth: %s\n", chipname);   

  Serial1.begin(19200,SERIAL_8N1,22,-1);
  SerialBT.begin(chipname);
}

void loop() {
  if (Serial1.available()) {
    char c = Serial1.read();
    Serial.write(c);
    SerialBT.write(c);
  }
}

 

動作確認

動作確認はAndroidスマホで「Drogger GPS for DG-PRO1(RW)」というアプリを使って行いました。

まずはスマホBluetoothのペアリングを行います。

「SerailBT_XXXX」というデバイス名です。

 

ペアリングが終わったらDrogger GPSを実行して「Select Device」でペアリングしたデバイスを選びます。

Androidは外部GPSを使う際、「開発者向けオプション」を有効にして「疑似ロケーションアプリを選択」で使用するアプリを選ぶ必要があるので注意してください。

「Start」ボタンを押すと次のような感じで情報が表示されます。

f:id:IntellectualCuriosity:20200701041338p:plain

G193とG195が「みちびき」です。

ExxがGalileoでBxxxがBeiDouです。

時間が経つともっと多くの衛星を表示するようになります。

 

おわり