ちょっと久しぶりにGPS絡みのことがやりたくて、M5Stackのオフィシャルページで物色していたら、すんごいモノを見つけてしまったんです。
じゃじゃーん!
これ、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社が提供しているu-centerというWindowsアプリで設定を変更する必要があります。
ATOM GPS KitはGROVEコネクタしか出ていないので、M8030-KTの設定を変更するには、ATOM GPS Kitをバラしてモジュールを取り出す必要がありました。
で、ATOM GPS Kitに入っていたモジュールがこれ「Beitian BN-200」です。
安価な中国製のモジュールのようで、AliExpressで11ドルくらいで売られているのを発見しました。
そのページにSHコネクタのピンアサインが書かれていたので、千石電商でジャンパーピン付きのケーブルを買って、手持ちのUSBシリアル変換モジュールに繋いで設定を変更しました。
接続はこんな感じになります。
GPSモジュールとUSB変換モジュールのTxD(送信)とRxD(受信)はてれこに接続するので、気を付けてくださいね。
u-centerでの設定変更
設定変更は「Configuration view」で行います。
M8030-KTはGLONASSとGalileo/BeiDouのどちらかしか選べない仕様になっているので、衛星数が圧倒的に多いGalileo/BeiDouを使う設定に変更します。
この画面ではQZSS(みちびき)もEnableになっていますが、他の設定を変更しないとNMEAで情報を得られないので、実質的にデフォルトではみちびきが使えない状態になっています。
設定を変更したら、ウィンドウ下部の「Send」ボタンを押さないと変更が反映されないので忘れずに押してください。
デフォルト
変更後
NMEA (NMEA Protocol)
みちびきの衛星番号は193,194,195,199と3桁なんですが、デフォルトではNMEAフォーマットが3桁の衛星番号に対応していません。
GalileoとBeiDouも3桁のため、3桁に対応するように変更します。
また、199番は当初の4機計画から7機計画に変更になった後に決められた番号のため、今売られている殆どのモジュールは対応していないというなんとも悲しい状況となっています。
デフォルト
変更後
PRT (Ports)
受信する衛星数を増やすと9600bpsでは通信速度が追い付かないことがあるので、通信速度を19200に上げます。
モジュールのSHコネクタはUART1に繋がっているので、Targetは「1 - UART1」です。
デフォルト
変更後
CFG (Configuration)
このままではモジュールの電源を切ってしまうと設定がデフォルトに戻ってしまうので、不揮発メモリに現在の設定を保存します。
次の画面のようにして「Send」ボタンを押してください。
プログラム
環境設定
追加のボードマネージャーのURLに次のURLを追加します。
https://dl.espressif.com/dl/package_esp32_index.json
ボードマネージャ
「esp32」をインストールします。
ボードは「M5Stick-C」を選びます。
ライブラリマネージャ
「M5Atom」をインストールします。
M5Aton.hの中でFastLED.hをインクルードしてるため、「FastLED」をインストールします。
スケッチ
スケッチは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)」というアプリを使って行いました。
「SerailBT_XXXX」というデバイス名です。
ペアリングが終わったらDrogger GPSを実行して「Select Device」でペアリングしたデバイスを選びます。
※Androidは外部GPSを使う際、「開発者向けオプション」を有効にして「疑似ロケーションアプリを選択」で使用するアプリを選ぶ必要があるので注意してください。
「Start」ボタンを押すと次のような感じで情報が表示されます。
G193とG195が「みちびき」です。
ExxがGalileoでBxxxがBeiDouです。
時間が経つともっと多くの衛星を表示するようになります。
おわり