「RTK受信機 ZED-F9P on M5Stackの試作(その1)」で作製したRTK受信機の改良を行いました。

改良した点は次のとおりです。

1.ZED-F9PとのUART通信のバスラインを3Gモデム等と競合しないようにした。
2.ZED-F9PとI2Cで通信できるようにした。
3.Bluetoothで測位データを送信できるようにした。
4.M5Stack 3Gモジュールを使えるようにした。

1.UART通信のバスラインの変更

ZED-F9PとのUART通信はGPIO16、GPIO17のバスラインを使っていましたが、この2本のラインは3Gモデム等でも使われていて、競合します。それで、GPIO26(RX)、GPIO13(TX)を使うようにしました。基板は再作製せず、パターンカットとジャンパ線で修正しました。

ソフトの変更では、ZED-F9Pとの通信をSerial2からSerial1に変更し、初期化の際のピン番号に新たな番号を指定しました。
Serial1.begin(38400, SERIAL_8N1, 26, 13);

2.I2Cを使った通信

ZED-F9Pとの通信はUARTだけでなく、I2Cを使っても可能です。
通常はUARTの方が問題が少ないのでUARTを使うのですが、2台のZED-F9Pを装着したい場合があります。
2台のアンテナを数10cm離して設置し、その位置関係から移動体の向いている方向などが測定できます。

その場合、UARTではポートが足りないので、I2Cを使う事になります。
基板では配線済なので、ソフトの実装だけで済みました。

ソフトの実装では、当初正常に位置が更新されなかったのですが、
myGPS.setAutoPVT( true, true, 0 );
を追加したところ、正常に更新されるようになりました。

3.Bluetoothによる位置送信

センチメータ精度の位置データの用途として、農業でのトラクタの制御があります。
その制御プログラムに 「AgriBus-NAVI」があります。

このプログラムはAndroidのスマホやタブレットで利用できますが、位置データを送る方法としてBluetoothを使うのが一番手軽です。
そのため、Bluetoothで位置データを送信できるようにしました。

AgriBus-NAVIが動いているタブレットとペアリングが終わり、Fixされた位置データが送信されると、AgriBus-NAVIの画面の右上が緑でFIXと表示されます。

Bluetoothによる位置送信

4.M5Stack 3Gモジュールの利用

補正データをインターネットから取得する方法として、「RTK受信機 ZED-F9P on M5Stackの試作(その1)」ではWifiでモバイルルータに接続して行いました。

もう一つの方法として、スイッチサイエンスから発売されている 「M5Stack用 3G 拡張ボード」を利用する方法があります。
このモジュールを使えば受信機としてコンパクトに一まとめにでき、また、Wifiを使わない分、消費電流も少なくなると考えられます。

ソフトの実装では、M5Stack 3Gのセットアップ方法に従えば通信はできるようになりますが、NTRIPでデータを取得する部分では少し変更が必要です。
Wifiの場合はNTRIPクライアントの実装に関しては GLAY-AK2/NTRIP-client-for-Arduinoがそのまま利用できますが、3Gモデムで使う場合、この実装ではWifiClientを継承しているので、そのままでは使えません。

ソースを見たところ、Wifiに特化したコードはありませんので、Clientクラスのポインタを渡すようにして、Wifiでもモデムでも、Clientを継承していれば何でも使えるようにしました。

次の画像はM5Stack 3Gモジュール(黒い部分)をZED-F9Pモジュールの上に重ねたところです。

モジュール外観

次の画像はM5Stack 3Gモジュールを装着した受信機にモバイルバッテリを繋いだところです。

モジュール外観

この構成での消費電流は400mA程度で、画像のモバイルバッテリは2,900mAhなので5時間程度は使えそうです。

M5Stack 3Gを使うとコンパクトになり良いのですが、Wifi+MT100に比べると次の問題があります。

1.NTRIPデータの取得スピードが遅い。

Wifi+Mt100の場合は30kbps程度で約4KBの補正データが1秒に1回取得できます。
M5Stack 3Gではスピードがほぼ半分の15kbps程度で、補正データは2秒に1回のペースとなります。

2.NTRIPデータが途中で取れなくなる頻度がWifi+MT100に比べ多い。

中断しても数分すると復旧する。
M5Stack 3GのSIMはSORACOMのもので通信速度は512kbpsなので、何故15kbps程度になるのか不明です。
SORACOMを使うのは初めてなので、設定に問題があるのかも知れません。中断される頻度が多いのもこの通信速度の問題と関連している可能性があります。この通信速度に関しては現在SORACOMに問い合わせ中です。

(2020.6.16追記)

15kbps程度しか出ない問題ですが、3GモジュールとM5Stackとの間のUARTのボーレートを115200bpsから460800bpsに上げたところ、25kbps程度まで出るようになりました。
NTRIPデータが途中で取れなくなる頻度の問題はNTRIPキャスタとしてrtk2go.comを使っていた事が原因であるかも知れません。

5.ソースコード

参考のため以下にソースコードを掲載します。
制御プログラム

NTRIPClient.h

NTRIPClient.cpp

「RTK受信機 ZED-F9P on M5Stackの試作(その3)」