LilyGo-T-SIM7080Gを購入した。
ESP32とSIM7080Gがセットになっている。
これで、Wifiのない環境でもIoTを導入できるはず。
電子工作も組込開発も経験ゼロのど素人だが、
2023年、我々にはGoogleとChatGPTそしてDEEPLがある!
5年前にLoRaでIoTを導入しようとしたが挫折してしまった。
やる気さえあれば知識はいらない時代になったのだ(と思いたい)。
SIM7080GはLTEとGPSが使える。
LilyGo-T-SIM7080Gはソーラーパネルで充電できるようだ。
カメラを差し込む端子もついている。
ドキュメントはGitHubにメーカーが置いてくれている。
しかも安い!!送料込みで5000円以下!!もちろん、みんな大好き技適マーク付き。
さて手始めに、GPSで座標を取得してみたが、
AT+CGNSINF
AT+CGNSINF
+CGNSINF: 1,,,0.000000,0.000000,-18.000,,,1,,0.1,0.1,0.1,,,,9999000.0,6000.0
OK
AT+CGNSINF
AT+CGNSINF
+CGNSINF: 1,,,0.000000,0.000000,-18.000,,,1,,0.1,0.1,0.1,,,,9999000.0,6000.0
OK
と表示される。
動いてるっぽいけど、屋内だと座標を取得できないらしい。屋外に移動しても、
AT+CGNSINF のみ表示されるだけ。
一度室内に戻って、リセットしてGPSアンテナを差し直したら動いた。
OK
AT+CGNSINF
AT+CGNSINF
+CGNSINF:
(数字がいっぱい)
OK
lat:(数字がいっぱい) lon:(数字がいっぱい)
speed:9.94 altitude:-2835.54
year:2023 montoh:7 day:20 hour:14 minutes:23 second:30
うーん、よくわからん。まずは、座標をGoogleMAPで表示するとかを作らないといけないなぁ。
+CGNSINF: ってなんですか?
CHATGPTの回答
「+CGNSINF
は、SIM7080GモジュールからのGPS情報を取得するためのATコマンドです。このコマンドを使用すると、現在の位置情報やその他のGPS関連の情報を取得できます。
具体的には、以下のような情報を含んでいます:
+CGNSINF: <gnss run status>,<fix status>,<UTC date & time>,<latitude>,<longitude>,<altitude>,<speed>,<course>,<fix mode>,<HDOP>,<PDOP>,<VDOP>,<GPS satellites in view>,<GNSS satellites used>,<GLONASS satellites used>,<BEIDOU satellites used>,<GNSS satellites in view info>,<GNSS satellites used info>,<GLONASS satellites used info>,<BEIDOU satellites used info>
-
<gnss run status>
: GNSSモジュールの実行状態(0: 非動作、1: 動作中) -
<fix status>
: 位置情報の取得状態(0: 位置情報なし、1: 位置情報あり) -
<UTC date & time>
: 協定世界時(UTC)での日付と時刻 -
<latitude>
: 緯度 -
<longitude>
: 経度 -
<altitude>
: 高度 -
<speed>
: 速度 -
<course>
: 方位角 -
<fix mode>
: 位置情報の取得モード(0: 2D Fix、1: 3D Fix) -
<HDOP>
: 水平精度指標 (HDOP: Horizontal Dilution of Precision) -
<PDOP>
: 位置精度指標 (PDOP: Position Dilution of Precision) -
<VDOP>
: 垂直精度指標 (VDOP: Vertical Dilution of Precision) -
<GPS satellites in view>
: 可視衛星数(GPS) -
<GNSS satellites used>
: 使用衛星数(全GNSS) -
<GLONASS satellites used>
: 使用衛星数(GLONASS) -
<BEIDOU satellites used>
: 使用衛星数(BEIDOU) -
<GNSS satellites in view info>
: 可視衛星情報(全GNSS) -
<GNSS satellites used info>
: 使用衛星情報(全GNSS) -
<GLONASS satellites used info>
: 使用衛星情報(GLONASS) -
<BEIDOU satellites used info>
: 使用衛星情報(BEIDOU)
したがって、+CGNSINF
コマンドの応答を解析することで、現在の位置情報やその他のGPS関連の情報を取得することができます。」
なるほど、、、
実際に測った場所から3.5kmくらい誤差がある。
そして、俺は今、altitude:-2835.54
-2835mの地下世界におるんやな。
追記)
やっぱ屋外の開けたところじゃないとGPS信号を取得しないみたい。開けたところならちゃんと取得できた。かなり正確。
逆にiPhoneとか屋内でも位置座標でるからすごいよな。
GPSにも種類があるみたいで、ChatGPT曰く
『上記のコードのコメントセクションでは、GNSSの動作モードを設定するためのATコマンドが説明されています。GNSSの各システム(GPS、GLONASS、BEIDOU、GALILEO、QZSS)のNMEAデータの出力を制御するために使用されます。
各モードの設定は次のようになります:
-
gps mode
: GPSの動作モードを設定します。1を指定するとGPSのNMEAデータの出力が開始されます。 -
glo mode
: GLONASSの動作モードを設定します。0を指定するとGLONASSのNMEAデータの出力が停止されます。 -
bd mode
: BEIDOUの動作モードを設定します。0を指定するとBEIDOUのNMEAデータの出力が停止されます。 -
gal mode
: GALILEOの動作モードを設定します。0を指定するとGALILEOのNMEAデータの出力が停止されます。 -
qzss mode
: QZSSの動作モードを設定します。0を指定するとQZSSのNMEAデータの出力が停止されます。
上記のコードでは、GNSSの動作モードを設定するためのATコマンドがコメントアウトされているため、GNSSモードの設定が行われません。必要に応じて、GNSSシステム(例えば、GPS、BEIDOU、QZSS)のNMEAデータ出力を開始するために、適切なATコマンドを使用して設定を行ってください。』だそうだ。
つまり、日本仕様だと
// GNSS Work Mode Set GPS+QZSS
modem.sendAT("+CGNSMOD=1,0,0,0,1");
modem.waitResponse();
/*
GNSS Command,For more parameters, see 212 page.
range: 1000-60000 ms
minInterval is the minimum time interval in milliseconds that must elapse between position reports. default value is 1000.
range: 0-1000
Minimum distance in meters that must be traversed between position reports. Setting this interval to 0 will be a pure time-based tracking/batching.
:
0 Accuracy is not specified, use default.
1 Low Accuracy for location is acceptable.
2 Medium Accuracy for location is acceptable.
3 Only High Accuracy for location is acceptable.
*/
// minInterval = 1000, minDistance = 0, accuracy = 0
modem.sendAT("+SGNSCMD=2,1000,0,0");
modem.waitResponse();
が良いらしい。ただし、
『上記のコードでは、GNSSの動作モードをGPSとQZSSに設定しています。また、最小インターバルを1000ミリ秒(1秒)に設定し、最小距離を0メートルに設定しています。これにより、位置情報のレポート間の最小時間間隔と最小距離が設定されます。
これらの設定を適用すると、日本の地域で正確なGPS情報を取得できるようになります。ただし、環境によってはGPS信号の受信が妨げられる場合があります(例:建物の内部や深い谷間など)。屋外の開けた場所でテストすることをおすすめします。』
ま、とにかく開けたところでね〜ってことだ。