計測したデータを「行動」につなげる のが本 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 を 500ms3. LINE 通知 (Messaging API)
- 1LINE Developers (https://developers.line.biz/) でログイン
- 2Provider 作成 → Messaging API channel 作成
- 3Channel access token を取得 (long-lived)
- 4自分の LINE ID を取得 (LINE 公式アカウント追加 → Friends から確認)
- 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 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。