ふくふくHukuhuku LLC
EP.10Sensor Log対象: 中2以上 10分公開: 更新:

クラウドに送る:Google Sheets / ThingSpeak でリアルタイム可視化

M5Stack で WiFi 接続して、計測値を Google Sheets や ThingSpeak に送信。スマホからもグラフが見られるリモート監視が中高生でも作れる。

#クラウド#WiFi#Google Sheets#ThingSpeak#IoT
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

家にいなくてもスマホからグラフが見られる。これが IoT (Internet of Things) の基本。M5Stack に WiFi が内蔵されているので、3-5 行のコードでクラウド送信が始められます。

1. ThingSpeak のセットアップ

  1. 1https://thingspeak.com/ で無料アカウント作成
  2. 2「Channels → New Channel」で新しいチャンネル作成 (Field 1 = 温度、Field 2 = 湿度 等)
  3. 3「API Keys」タブから Write API Key をコピー
  4. 4M5Stack のコードに WiFi の SSID/Password と API Key を書く

2. M5Stack → ThingSpeak のコード

M5Stack: 5 分ごとに ThingSpeak へ送信
Python
import network, urequests, timeimport unit
WIFI_SSID = 'YOUR_SSID'WIFI_PASS = 'YOUR_PASSWORD'API_KEY = 'YOUR_THINGSPEAK_WRITE_KEY'
# WiFi 接続wifi = network.WLAN(network.STA_IF)wifi.active(True)wifi.connect(WIFI_SSID, WIFI_PASS)while not wifi.isconnected():    time.sleep(0.5)print('WiFi connected:', wifi.ifconfig()[0])
env3 = unit.get(unit.ENV3, unit.PORTA)
while True:    t = env3.temperature    h = env3.humidity    p = env3.pressure / 100  # hPa    url = f'https://api.thingspeak.com/update?api_key={API_KEY}&field1={t}&field2={h}&field3={p}'    try:        r = urequests.get(url, timeout=10)        print(f'Sent: {t}, {h}, {p} → entry_id {r.text}')        r.close()    except Exception as e:        print(f'Error: {e}')    time.sleep(300)  # 5 分間隔

3. Google Sheets に送る (Apps Script Webhook)

  1. 1新しい Google Sheets を作成
  2. 2「拡張機能 → Apps Script」
  3. 3POST リクエストを受け取る関数を書く (下記コード)
  4. 4「デプロイ → ウェブアプリ」で公開、URL をコピー
  5. 5M5Stack のコードに URL を埋め込む
Apps Script (Google Sheets 側)
JavaScript
function doPost(e) {  const sheet = SpreadsheetApp.getActiveSheet();  const data = JSON.parse(e.postData.contents);  sheet.appendRow([    new Date(),    data.temp,    data.humidity,    data.pressure,  ]);  return ContentService.createTextOutput('OK');}
M5Stack 側: Google Sheets に POST
Python
import urequests, ujson
WEBHOOK_URL = 'https://script.google.com/macros/s/.../exec'
payload = {'temp': t, 'humidity': h, 'pressure': p}try:    r = urequests.post(        WEBHOOK_URL,        data=ujson.dumps(payload),        headers={'Content-Type': 'application/json'},    )    r.close()except Exception as e:    print(f'Failed: {e}')

4. ThingSpeak のグラフ

ThingSpeak は Field ごとにグラフが自動生成 され、URL を共有すれば誰でも見られます。スマホでも開けるので、外出先から「家の植物の土壌水分」をリモート監視できる仕組みが完成です。

5. データ送信の落とし穴

  • WiFi が切れた: ローカル SD に必ず保存
  • API レート制限: 無料枠は 15 秒間隔まで。守らないとブロックされる
  • API キー漏えい: GitHub に commit しない、SNS で公開しない
  • サーバ側のメンテナンス: クラウド側のダウンタイムも想定

6. 次の話

EP.11 では しきい値で LED を光らせる・通知する 機能を扱います。「土壌水分が下がったら LED 点灯」「CO2 が高くなったら LINE 通知」など、計測 → 行動の自動化編です。

よくある質問

ThingSpeak と Google Sheets はどっちがいい?
**ThingSpeak** は IoT 専用クラウド (MathWorks 提供)、無料枠で 8 チャンネル・15 秒間隔まで送れる、グラフ表示が標準で綺麗。**Google Sheets** は普段使い慣れているので親しみやすく、Apps Script で自由にカスタムできる。**自由研究なら ThingSpeak が楽**、応用したいなら Google Sheets。
WiFi のパスワードをコードに書いて大丈夫?
**家庭の自由研究レベルなら OK**。ただし GitHub などに公開するときは絶対に書かない (`secrets.py` 等の別ファイルに分けて `.gitignore`)。本シリーズは練習なのでコードに直書きしますが、慣れたら分離する習慣を。
API キーが漏れたらどうなる?
**ThingSpeak** の API キーが漏れると、他人が偽データを送り込めます。対策は「Console から API キーを再生成」。**Google Sheets** の Webhook URL も同様。**コードを SNS で公開する前に必ずキーをマスクすること**。
送信間隔が長いとリアルタイムじゃない?
ThingSpeak の無料枠は 15 秒間隔まで。1 分〜 5 分間隔がおすすめ (バッテリーも持つ)。「リアルタイム」と「バッテリー寿命」「データ転送量」のバランスを取る。
通信エラーが起きたらどうする?
**ローカル SD への保存を必ず併用**。クラウド送信に失敗してもデータは SD に残る、という二重化が基本。ネットワークが復旧したら、未送信分をまとめて送り直す処理を書くのが理想ですが、自由研究レベルでは「SD カードがマスタ、クラウドはミラー」の割り切りで OK。
シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp