よく迷子になるから人工衛星"みちびき"を使って現在地を簡単に取得してみた②


はじめに

みなさんこんにちは
RHEMS技研の荒木です

今回は実際にGY-NEO6MVで位置情報を取得し、みちのりをマップにプロットして迷子になっちゃっても大丈夫なようにしました

①はコチラ

使用した機器・サービス

おおよそはこんな感じです

Ambientとは

Ambientは簡単に説明するとIoTのめんどくさい部分を全部簡単化してくれるサービスです
Ambientにデータを送るだけでグラフ化してくれたり、保存してくれます
なので、めっちゃ便利になるということです

また、Arduinoにライブラリもあるのでコードもとても簡単なのです
初心者でもラクラクIoTに触れることができるようになるサービスとなっています

今回はAmbientにとてもお世話になります

くわしく

GY-NEO6MVで位置情報を取得→ESP-WROOM-02を使って送信→Ambientが処理→Web上で現在地を確認→やったー

全然詳しくなってないですがこんなかんじですすめていきます

まずコードはこんな感じです

#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <Ambient.h>
// WiFiアクセスポイントの定数
#define WIFI_SSID     "SSID"
#define WIFI_PASSWD   "PASSWORD"

//ambientの定数
unsigned int channelId = ①;
const char* writekey = "②";

SoftwareSerial mySerial(4, 5); //RX=pin4, TX=pin5
TinyGPSPlus gps; 
WiFiClient client;
Ambient ambient;


// 起動時に一度だけ呼ばれるセットアップ関数
void setup(void) {
//シリアルコンソールの準備
  Serial.begin(115200);
  while (!Serial) {
    ;
  }
  Serial.begin(9600);
  while (!Serial) {
    ;
  }

  // WiFi接続設定を行う
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWD);

  // WiFi接続を開始する
  while ( WiFi.status() != WL_CONNECTED ) {
    delay(500);
  }
  Serial.println(WiFi.localIP());
  ambient.begin(channelId, writekey, &client);

}

//変数の準備
double ido, keido;
int zikan,hun;

// メインループ
void loop() {

  while (mySerial.available()) {
    gps.encode(mySerial.read());
  }
  if (gps.location.isUpdated()) {

    Serial.print("緯度 :"); Serial.println(gps.location.lat(), 6);
    Serial.print("経度 :"); Serial.println(gps.location.lng(), 6);
    Serial.print("時間 :"); Serial.println(gps.time.hour() + 9);
    Serial.print("分 :"); Serial.println(gps.time.minute());
    Serial.println(" ");

//諸情報を代入
    zikan = gps.time.hour() + 9;
    hun = gps.time.minute();
    ido = gps.location.lat(), 8;
    keido = gps.location.lng(), 8;

//送るデータを準備(set)したあと送信(send)
    ambient.set(1, zikan);
    ambient.set(2, hun);
    ambient.set(9, ido);
    ambient.set(10, keido);
    ambient.send();
  }
}

Ambientにデータを送るためにライブラリを導入しています
使い方は、

  1. ①、②をambientのmyチャンネルからコピペしてくる
  2. setup内でambient.begin(channelId, writekey, &client)で送る準備をする
  3. loop内でambient.set()で第一引数に1~8の数字、第二引数に送りたいデータをいれる
  4. ambient.send()でsetしてきたデータを送る

またAmbientの使用上、9に緯度、10に経度を送ることで自動でマップにプロットされるようになっています
たったこれだけなので簡単ですね!

次は回路部分です

GY-NEO6MVに電源を供給するのにESP-WROOM-02だけだと全然足りてなかった(未検証)ような気がしたのでArduinoから5Vを供給しています
なのでもっともっと小型化は可能になっています
回路部分もこれだけで簡単なものになっているのでIoT初心者でもとっかかりやすいと思います

おわりに

さていかがでいたでしょうか
とても簡単に現在地を確認できるようになりました
次回は実際に使ってみて本当に現在地が取得できて使用感はいかほどなのかを記事にしたいと思います

ではよきIoTにライフを!