ふくふくHukuhuku Inc.
EP.10Sensor Log対象: 中2以上 10分公開: 2026-05-10

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

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

#クラウド#WiFi#Google Sheets#ThingSpeak#IoT
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

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

1. ThingSpeak のセットアップ

  1. 1https://thingspeak.com/ で無料アカウント作成
  2. 2Channels → New Channel」で新しいチャンネル作成 (Field 1 = 温度、Field 2 = 湿度 等)
  3. 3API 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 通知」など、計測 → 行動の自動化編です。

シェア

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

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

シリーズの外も探す:

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

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

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