LoginSignup
92
21

何処かに置き忘れたバッグを見つけ出したい女

Last updated at Posted at 2023-12-11

忘れ物はございませんか?

私は先日、バッグを置き忘れました。。

行ったところを手当たり次第探しに行き、自動券売機の横に置き去りにされたバッグを見つけました。
中身を確認したところ盗まれた形跡はなく、日本が優しい国で本当に本当によかった:smile:
けれどまたこんなことが起こったら精神が削られます。。
いくら優しい国でも、こんなことは二度あってたまるか!
そこで今回は、ATOM LiteとGPSを利用してバッグの場所を特定します。

システム概要

image.png

GPSモジュールで位置情報を取得し、IoTデーター可視化サービスAmbientに送信してバッグの位置を地図上にプロットしていきます:relaxed:

用意するものは以下です。

  • ATOM Lite
  • M5Stack用GPSユニット
  • USB-Cケーブル

ATOM Liteの環境構築

Arduino IDE のインストール

Arduino IDE のインストールを行います:relaxed:
詳細は省きます。

基本設定

Arduino IDE のメニューバーから [ファイル] -> [基本設定] の順に選択をします。

image.png

「追加のボードマネージャのURL」には以下のURLをコピーして入力欄に貼り付け、「OK」ボタンを押します。
https://espressif.github.io/arduino-esp32/package_esp32_index.json

「ボードマネージャ」から以下を検索し、インストールを行います。
image.png

・Arduino AVR Boards
・esp32 by Espressif Systems

「ライブラリマネージャー」から以下を検索し、インストールを行います。
image.png

・Ambient ESP32 ESP8266 lib
・FastLED
・M5Atom
・TinyGPSPlus

すべてのインストールが完了したら、以下のように[ツール] -> [esp32] -> [M5Stack-ATOM] の順に選択し、設定します。
image.png

Arduino IDEがライブラリをインストールすると、Arduinoのスケッチが保存されているディレクトリに「libraries」というフォルダが作成されます。
「libraries」フォルダが作成がされている同ディレクトリに、「GPSLogger」というフォルダを作成し、ソースを書いていきます:santa_tone1:

Ambientの登録や設定の記載は省きます:cloud_rain:

GPSLogger.ino

全体

#include <M5Atom.h>
#include <WiFi.h>
#include <TinyGPS++.h>
#include <Ambient.h>

unsigned int channelId = xxxxx;
const char* writeKey = "xxxxxxxxxx";

const char* ssid = "xxxxxxxxxx";
const char* password = "xxxxxxxx";

static const int RXPin = 32, TXPin = 26;
TinyGPSPlus gps;
WiFiClient client;
Ambient ambient;

void setup() {
  M5.begin(true, false, false); // UART, I2C, LED
  Serial.println("Start");

  WiFi.begin(ssid, password); // Wi-Fi APに接続
  while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
    delay(1000);
    Serial.print(".");
  }

  Serial.print("\nWiFi connected\nIP address: ");
  Serial.println(WiFi.localIP());

  Serial2.begin(9600, SERIAL_8N1, RXPin, TXPin);
  ambient.begin(channelId, writeKey, &client);
}

void loop() {
  if (M5.Btn.wasPressed()) {
    if (gps.location.isValid()) {
        sendInfo2Ambient();
    }
  }
  while (Serial2.available()) {
    if (gps.encode(Serial2.read())) {
      break;
    }
  }
  M5.update();
  delay(50);
}

void sendInfo2Ambient() {
   char buf[16];
  
    dtostrf(gps.altitude.meters(), 4, 2, buf);
    Serial.println(buf);
    ambient.set(1, buf);
    dtostrf(gps.location.lat(), 12, 8, buf);
    Serial.println(buf);
    ambient.set(9, buf);
    dtostrf(gps.location.lng(), 12, 8, buf);
    Serial.println(buf);
    ambient.set(10, buf);

    ambient.send();
}

詳細

  • ライブラリ
#include <M5Atom.h>
#include <WiFi.h>
#include <TinyGPS++.h>
#include <Ambient.h>

・M5Atom.h:M5Atom用のライブラリ
・WiFi.h:Wi-Fiモジュールの制御を行うためのライブラリ
・TinyGPS++.h:GPSデータの処理を行うTinyGPS++ライブラリ
・Ambient.h:Ambientへのデータ送信を行うためのライブラリ

  • Ambientの設定
unsigned int channelId = xxxxx;
const char* writeKey = "xxxxxxxxxx";

・channelId:Ambientで作成したチャンネル
・writeKey:Ambientで作成したライトキー

  • Wi-Fiの設定
const char* ssid = "xxxxxxxxxx";
const char* password = "xxxxxxxx";

・ssid:Wi-FiネットワークのSSID
・password:Wi-Fiネットワークのパスワード

  • GPSデータ処理のための設定
static const int RXPin = 32, TXPin = 26;

・RXPin = 32, TXPin = 26:GPSモジュールとの通信に使用されるシリアルピンの設定

  • setup
M5.begin(true, false, false); // UART, I2C, LED

・UART(true):UARTは、デバイス間で直列通信を可能にする通信機能。有効にする。
・I2C(false):I2Cは、複数のデバイスが同じ通信バスを共有してデータをやり取りするための仕組み。I2C通信は利用していないため、無効にする。
・LED(false):M5AtomやM5Stackには搭載されたLEDがあるが、利用していないため無効にする。

  • loop
M5.Btn.wasPressed()

・ボタンが押されたかをチェックを行う。

Serial2.available()

・GPSモジュールからのデータを受信する。

  • sendInfo2Ambient
    ・位置データが得られた場合に、高度、緯度、経度をAmbientに送信:sunny:

ATOM LiteとPCをUSB-Cケーブルで繋ぎ、Arduino IDEの書き込みボタンを押して、書き込みます:writing_hand_tone1:

発見!

場所ばれするのでマスクをかけます:sweat:
危ない:sweat:

image.png

これでバッグの場所が特定できます:relaxed:

ちょっとGPSのお話

測位衛星は6種あります。
・GPS(米国)
・GLONASS(ロシア)
・BeiDou(中国)
・Galileo(欧州)
・NAVIC(インド)
・QZSS(日本)

みちびきのサイトから各衛星の打ち上げ履歴を見てみると衝撃の事実:sunny:
image.png
image.png

日本が打ち上げ済みの衛星5機でインドが9機!日本よりインドの方が衛星飛ばしている!!!!
インド凄いですね:relaxed:

最後に

よく考えたら、知らない人が自分の家にGPS仕込みのバッグを持っていったとして、場所を特定できたとしても凄く怖いですね:disappointed_relieved:
自分で知らない人の家に尋ねることもできなそうですし、警察に言ったとして信じてもらえるか不明ですね:disappointed_relieved:

92
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
92
21