1月13日にアマゾンへ注文したGPSモジュール(NEO-6M GPS)756円が昨日届いた。
予定は2月6日だけど少し遅れて12日。ま、そんなもんでしょう。
発送は台湾の真向かいにある「福建省 泉州市 石獅市」から。(Ren Heさん)
基盤は静電防止袋そのままプチプチ袋へ
(少し値上がってるね)
【製品仕様】
・ボーレートのデフォルト値:バッテリーなしで9600bps(これは航空便には安全ではありません)バッテリーモデルはMS621FEです 溶接する必要があります。
・アンテナとEEPROMを内蔵したUblox / u-blox NEO-6M GPSモジュールこのモジュールはAPM2およびAPM2.5と互換性があり、 EPROMはすべての設定データを保存できます。
電圧:3.3V、5V
ボーレート:9600
サイズ:約36mm * 24mm
インターフェース:RS232 TTL
データバックアップ付き
LED信号灯付き
アンテナは右端スナップみたいな所へはめ込む。
blox NEO-6M-0-001 が型番かな。
LEDが1個付いてる。
左下には小型ボタン電池が固定されている。リチウムバックアップボタン電池 [MS621FE]
測ると電圧は0.02Vしか無い。
左上のICは「4A2D」電源用IC
右下のICは「24C32 XJS1532」32kbitのEEPROM
電源は Vらしい。
後はシリアル通信用の信号線を繋ぐだけのようだ。
PPSは1秒毎の信号がパルスで与えられる(はず)
amazonには回路図が載っている。
信号線は3.3Vレベル
消費電力は実測で3.3Vx46mA=151.8mWと。
Q&Aで細かなパラメータをファームに書き込む手順が載っていた。
---------------
まずはUSBシリアル接続
半田コテを握ってピンを水平に付ける。2箇所ほど浮いてしまって水平って結構難しい。
で、接続。赤LEDがは点灯したが、Win10が変換ケーブルのドライバが無いと騒ぐ。
昔の記事を探す。ありましたが色々と問題があるようで・・・
パッチをDLして動かす。
展開中同じ場所でエラーとなる。止むを得ずに無視する。
デスクトップにアイコンが出来たのでこれを起動してインストーラを起動
Donate(寄付)しないのでSkip押下
パソコンをリブートする。ダメダメ
怪しい中華シリアル変換に付き合うのも馬鹿らしい。
しょうがないのでArduinoにGPSを繋げてUNO経由でGPSからのデータを取得することに。
サンプルはこちら様から頂戴しました。(ソフトウエアシリアルを使ってGPSからデータを取得)
ところがぁっ!!純正UNOがCOM認識されない。
しょうがないので先日までEEPROMで使っていたUNOに基盤変更(泣き泣き配線を引っこ抜いて)
今度はちゃんとCOM8で接続
文字化けなどしていたが少しつつくと届き始めました。
Teratermでもすんなりと。
今回は読み込みだけなのでGPSのRXも繋いでいるが、Arduinoから送信すると電圧が5Vになるので
3.3Vで動いているGPSが壊れる可能性があるらしい。
次回からは念のため接続しないようにしましょう。
まだGPS衛星を補足していないので暫くモバ電で屋外放置
衛星補足すれば赤色点滅に変わるそう。
暫くしたら点滅表示に変わっていた。
取り外して室内のPCにつなぎ直し、かなり家が建て込んでいる窓際に置いたが、ちゃんとデータを受信し続けた。
実際のところこの窓の向こう側には高さ10m以上の隣家が2mの盛土の上に建っていて、家と家の隙間は4m程度しかない。
それでも受信できるとは素晴らしい!
今日はここまでです。
下記ソースはこちら様のままです。
ありがとうございます。
#include ”SoftwareSerial.h”
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
=======注文前に調べていた情報メモ========
【GPSモジュールから事項を得てLCD表示】
https://www.hiramine.com/physicalcomputing/arduino/gps_latlong.html
https://smtengkapi.com/engineer-arduino-gps
https://smtengkapi.com/arduino-gps2
【NMEAをGoogleMAP形式に変化ううするツール「轍-wadachi」】
http://mikioblog.dolphinsystem.jp/2020/11/gps-7.html
もう1個の変換ツール
https://forest.watch.impress.co.jp/article/2008/10/24/pot2kml.html
【ArduinoでGPSデーターを扱うライブラリ】ambient
https://pages.switch-science.com/letsiot/location/
先程のデータは生のNMEA-0183フォーマットデータでした。 Arduinoにはこのデータをプログラムで扱いやすいデータに変換する「 TinyGPS++」というライブラリがあります。
インストールはソフトシリアルと同様でTinyGPS++のサイトに行き、 ダウンロードアイコンの先の最新ZIPファイルをダウンロードし、Arduino IDEで「.ZIP形式のライブラリをインストール…」 でZIPファイルをインストールします。
シリアルから読んだGPSデーターを1文字づつライブラリに渡すと、それを解析し、GPSオブジェクトに追加、更新します。 解析中はfalseが返り、1行処理して解析が成功するとtrueが返されます。 シリアルからGPSデータを読んでGPSオブジェクトにする部分は次のようなプログラムになります。
while (ss.available() > 0) {
if (gps.encode(ss.read())) {
break;
}
}
【GPSモジュールで生データ例】9桁の文字列(最終文字A、C型がターゲット)
1行まるごとで80文字、最小にして35字程度
$GPGGA,094012.000,3421.1155,N,13402.7798,E,1,5,2.53,-34.1,M,31.6,M,,*4D
$ GNRMC,094022.000,A,3421.1107,N,13402.7726,E,0.45,231.16,240715,,,A*7D
【GPSのNMEAフォーマット解説】
NMEA 0183
https://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html