Arduino MKR GSM 1400でSMS経由の即時GPS追跡
部品と用品
| Arduino MKR GSM 1400 | ×1 |
このプロジェクトについて
注意: このチュートリアルは古い可能性があります。最新版はこちらを参照してください。
Arduino MKR GSM 1400のセルラー網ベース位置特定機能をデモします。SMSで特定の文字 (デフォルト「L」) を受信すると、現在地の緯度・経度を含むGoogle Mapsリンクを返信します。
必要なもの
- Arduino MKR GSM 1400 (スケッチ実行・GSM接続・位置特定機能)
- アンテナ・LiPoバッテリー (電波確保・ピーク電流対応・携帯電源)
- スマートフォン (SMS送信用)
- データ通信対応SIMカード (PIN、APN、認証情報必要)
ハードウェアセットアップ
アンテナ接続、SIM挿入、LiPoバッテリーをJSTコネクタに接続するだけ。バッテリーは任意だが、電波弱い場所でのピーク電流対策に推奨。
仕組み
MKRGSMライブラリでSMS管理とセルラー位置特定を実装。SMS受信時、内容に「L」(ASCII 76) が含まれる場合のみ位置特定・返信を実行。パスワード機能で不正アクセス防止。
MKR GSM 1400にはGPS受信機がないが、u-bloxモジュールが基地局データベースを持ち、セルIDから座標を推定。都市部では高精度、郊外では基地局カバレッジが広いため粗い精度。
Google Maps URL形式: https://www.google.com/maps/place/<LAT>,<LONG>。表示位置は基地局の物理位置で、デバイスはその半径内に存在。
スケッチ詳細
ライブラリと初期化
#include <MKRGSM.h>
#include "ArduinoLowPower.h"
char PINNUMBER [] = SECRET_PINNUMBER;
char GPRS_APN[] = SECRET_GPRS_APN;
char GPRS_LOGIN [] = SECRET_GPRS_LOGIN;
char GPRS_PASSWORD[] = SECRET_GPRS_PASSWORD;
GPRS gprs;
GSM gsmAccess;
GSM_SMS sms;
GSMLocation location;
String GSMlatitude = "0.000000";
String GSMlongitude = "0.000000";
機密情報は arduino_secrets.h またはWeb EditorのSecretsタブで管理。
位置取得関数
void measureLocation() {
unsigned long timeout = millis();
while (millis() - timeout < 45000) {
if (location.available() && location.accuracy() < 300 && location.accuracy() != 0) {
GSMlatitude = String(location.latitude(), 6);
GSMlongitude = String(location.longitude(), 6);
break;
}
}
}
45秒以内に精度300m未満の測位が得られたらグローバル変数更新。得られなければ前回値を維持。
ネットワーク接続関数
void connectNetwork() {
bool status = false;
gprs.setTimeout(100000);
gsmAccess.setTimeout(100000);
while (status == false) {
if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
status = true;
} else {
delay(1000);
}
}
}
ATコマンドタイムアウトを長めに設定し、UARTフリーズから復旧可能に。
セットアップとメインループ
void setup() {
connectNetwork();
location.begin();
}
void loop() {
int c;
String response, messager = "";
measureLocation();
unsigned long timeout = millis();
while (millis() - timeout < 5000) {
if (sms.available()) {
char senderNumber[20] = {"0"};
sms.remoteNumber(senderNumber, 20);
c = sms.read();
if (c != 76) { sms.flush(); break; } // 'L'以外は無視
String txtMsg = "https://www.google.com/maps/place/" + GSMlatitude + "," + GSMlongitude;
sms.beginSMS(senderNumber);
sms.print(txtMsg);
sms.endSMS();
break;
}
}
gsmAccess.shutdown(); // GSMモジュール電源オフ
LowPower.sleep(60000); // 60秒ディープスリープ
connectNetwork(); // 再接続
}
使い方
- ハードウェア接続、認証情報をスケッチに反映、ボードに書き込み
- GSMネットワーク接続確立まで約30秒待機
- MKR GSMのSIM番号宛に「L」とだけ書いたSMSを送信
- 位置特定処理が走り、Google Mapsリンク付きSMSが返信される
製造プロセス
- CMMSへのQRコード導入:ステップバイステップガイド
- 中古重機の価値最大化:売却・再活用の戦略的アプローチ
- わずかに大きな設計がイノベーションを加速しリスクを減らす理由
- 気象観測ステーションをCWOPと統合:実践ガイド
- PSoC 6 Pioneer BoardとIoT Add-On Shieldを極める:開発者向けガイド
- 3Dプリントパーツを彫刻フィラーで素早くラベル付け:実証済みの簡単手法
- テックマン・ロボットのウェビナー:高度コボットとビジョンシステムで生産自動化を実現
- PCB製造コストを削減する7つの実証済み戦略
- 農場運営をプロアクティブメンテナンスで強化する
- IoT投資のROIを最大化する:実践ガイド
- カーボンファイバー製ラゲッジセット - 現代トラベラーの究極のアップグレード