M5Stack/ATOMとGPSユニットを使って位置情報をクラウドに保存する / M5シリーズUIFlowからKintoneに直接データをアップロードする

木曜日 , 20, 1月 2022 2 Comments

M5Stack/ATOMシリーズとGPSユニットを組み合わせてGPSトラッキングをする仕組みができないか調査をしている中で、計測した位置情報をサイボウズ社のkintoneに直接アップロードするところまでできたのでソースコードを公開します。

ATOM Matrix + GPS Unit

通信ユニットとIoT回線を使いスタンドアロンでも動きGPSロガーを「M5Stack+GPSユニット+通信ユニット+IoT回線でGPSロガーを作る
で公開しました。

使い方

  • kintone上にアプリ(データベース)を作成し、外部からアクセスするためのAPIトークンを発行、および適切なアクセス権限を設定します。
    サンプルプログラムでは、「gps」というアプリを作成し、「gpstime」「latitude」「longitude」というフィールドを文字列(1行)で定義しています。

    2022-01-20 (6)

    ※APIからアップロードする際に使用するのは、kintone上の「フィールド名」(設定画面一番上の項目)ではなく「フィールドコード」(設定画面一番下の項目)である点に注意が必要です。
    今回、ここに気づくまでが一番時間がかかりました。

2022-01-20 (5)

  • kintoneのURL、APIトークン、アプリIDをソースコードの冒頭にある変数に設定します。
  • M5Burnerなどを使ってM5Stack/ATOM.シリーズのデバイスに転送します。
  • 電源を投入すると計測したデータがkintone上にアップロードされ下図のように記録されます。
    (GPSユニットから取得した生データは100倍の数値が記録されているようです)

2022-01-20 (4)

ソースコード

2022-01-20 (3)

大きな画像を表示( http://www.ria-lab.com/omiyage/gps_cybozu_20220120.png )

from m5stack import *
from m5ui import *
from uiflow import *
import wifiCfg
import time
import ntptime
import urequests
import json

import unit

gps0 = unit.get(unit.GPS, unit.PORTA)

API_URL = 'https://<YOUR_SUBDOMAIN>.cybozu.com/k/v1/record.json'
API_TOKEN = '<YOUR_TOKEN>'
APP_ID = '<YOUR_APP_ID>'
time = None
longitude = None
latitude = None
data = None

# Wi-Fi接続
wifiCfg.autoConnect(lcdShow=True)
wifiCfg.reconnect()

# Wi-Fi接続に成功するまで待機
while not (wifiCfg.wlan_sta.isconnected()):
  wait_ms(500)
  print('retry')

# NTPで時刻合わせ/タイムゾーン設定
ntp = ntptime.client(host='ntp.nict.jp', timezone=9)
gps0.set_time_zone(9)

# メインループ
while True:
  # GPSモジュールからデータを取得
  time = gps0.gps_time
  longitude = gps0.longitude
  latitude = gps0.latitude
  # 取得したデータをKintone向けの形式に整える
  data = {'app':APP_ID,'record':({'gpstime':({'value':str(time)}),'latitude':({'value':str(latitude)}),'longitude':({'value':str(longitude)})})}
  try:
    # APIトークンとJSONデータを送信
    req = urequests.request(method='POST', url=API_URL,json=json.dumps(data), headers={'X-Cybozu-API-Token':API_TOKEN,'Content-Type':'application/json'})
  except:
    print(str('error'))
  wait(10)
  wait_ms(2)
2 thoughts on “ : M5Stack/ATOMとGPSユニットを使って位置情報をクラウドに保存する / M5シリーズUIFlowからKintoneに直接データをアップロードする”
  • Please give us your valuable comment

    メールアドレスが公開されることはありません。

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください