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

LED と警告:しきい値で光らせる・スマホに通知する

計測値だけでなく「行動を促す」レイヤーを足す。LED の色変化、ブザー、LINE Messaging API での通知、IFTTT 連携。中高生のものづくりが「実用品」になる EP。

#LED#通知#LINE#IFTTT#アラート
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

計測したデータを「行動」につなげる のが本 EP。LED で光らせる、ブザーで知らせる、LINE で通知する。これで自由研究が 「観測する」から「実用する」 に進化します。

1. LED で色を変える (M5Stack 画面)

土壌水分に応じて画面色を変える
Python
from m5stack import lcdimport unit, time
earth = unit.get(unit.EARTH, unit.PORTB)
def get_color(pct):    if pct < 30: return 0xFF0000  # 赤: 水やり必要    elif pct < 50: return 0xFFAA00  # オレンジ: 注意    elif pct < 70: return 0x00FF00  # 緑: 良好    else: return 0x0088FF  # 青: 水分多め
while True:    voltage = earth.voltage    pct = max(0, min(100, (voltage - 0.20) / (1.65 - 0.20) * 100))    color = get_color(pct)    lcd.fillScreen(color)    lcd.print(f'{pct:.0f}%', 100, 100, 0xFFFFFF, transparent=True)    time.sleep(10)

2. ブザーで音を鳴らす

M5Stack: 警告音
Python
from m5stack import speakerspeaker.volume(3)  # 0-10speaker.tone(440, 500)  # 440Hz の A4 を 500ms

3. LINE 通知 (Messaging API)

  1. 1LINE Developers (https://developers.line.biz/) でログイン
  2. 2Provider 作成 → Messaging API channel 作成
  3. 3Channel access token を取得 (long-lived)
  4. 4自分の LINE ID を取得 (LINE 公式アカウント追加 → Friends から確認)
  5. 5下記コードでメッセージ送信
M5Stack → LINE Messaging API
Python
import urequests, ujson
ACCESS_TOKEN = 'YOUR_LINE_TOKEN'USER_ID = 'YOUR_LINE_USER_ID'
def send_line(text):    url = 'https://api.line.me/v2/bot/message/push'    headers = {        'Content-Type': 'application/json',        'Authorization': f'Bearer {ACCESS_TOKEN}',    }    payload = {        'to': USER_ID,        'messages': [{'type': 'text', 'text': text}],    }    try:        r = urequests.post(url, data=ujson.dumps(payload), headers=headers)        r.close()    except Exception as e:        print(f'Send failed: {e}')
# 使い方if pct < 30:    send_line(f'🌱 鉢植えの水分が {pct:.0f}% です。水をやってください。')

4. ヒステリシス (チャタリング防止)

再通知を抑える
Python
state_alerted = False  # 一度通知したか
while True:    pct = read_soil_moisture()
    if not state_alerted and pct < 30:        send_line('🌱 水やりタイム!')        state_alerted = True    elif state_alerted and pct > 50:        send_line('💧 水やり完了を確認しました')        state_alerted = False  # 50% に戻ったら次回通知可能に
    time.sleep(600)

5. IFTTT を使うと簡単

コード書きたくない場合は IFTTT (https://ifttt.com) が楽。「Webhook 受け取る → LINE / メール / Slack に送る」を 5 分でセットアップできる。M5Stack 側は Webhook URL に GET / POST するだけ。

6. 通知設計のコツ

原則理由
緊急時のみ通知頻繁すぎると無視される
夜間サイレント家族の睡眠を妨げない
ヒステリシス必須ON/OFF を繰り返してチャタリングしない
通知の本文に値を入れる「30% です」と数字付きで具体的に
画像 / グラフは別チャンネルLINE は文字、画像は ThingSpeak の URL を貼る

7. 次の話

EP.12 では本シリーズの集大成として、自由研究の発表方法 を扱います。仮説の立て方・データの見せ方・結論の書き方・「言えること / 言えないこと」の区別など、探究学習の本質的な部分です。

シェア

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

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

シリーズの外も探す:

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

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

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