方向性について湿度で通知するシステムで確定
LINEnotifyを使用する
コードに関しては夏休みに作成したものを基準に調整を重ねる
import spidev
import RPi.GPIO as GPIO
from time import sleep
import requests
# LINE Notifyのアクセストークン
line_notify_api = "<https://notify-api.line.me/api/notify>"
line_notify_token = "rYAHE3W3NuhWd8uV49jPO5NqtJT27RGechcKb2XPQML"
# Vrefは参照電圧、センサーの最大電圧に合わせる
Vref = 3.3
# GPIOピンの設定
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT) # GPIO 17番ピンを出力モードに設定
GPIO.output(17, GPIO.HIGH) # GPIO 17番ピンをHIGHに設定(ON)
# SPI通信の設定
spi = spidev.SpiDev()
spi.open(0, 0) # ポート0, CS0
spi.max_speed_hz = 1000000 # 1MHz
# 土壌湿度のしきい値(適切に調整する)
moisture_threshold = 1.5 # 電圧が1.5V以下で乾燥とみなす
# 初期状態の設定
previous_state = None
def send_line_notify(message):
"""LINE Notifyで通知を送る関数"""
payload = {"message": message}
headers = {"Authorization": f"Bearer {line_notify_token}"}
try:
response = requests.post(line_notify_api, headers=headers, data=payload)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"LINE Notifyエラー: {e}")
try:
while True:
# SPI通信でADCからデータを取得
adc = spi.xfer2([0x06, 0x00, 0x00])
data = ((adc[1] & 0x0f) << 8) | adc[2]
voltage = Vref * data / 4096 # 電圧値に変換
print(f"{voltage:.2f}V")
# 土壌湿度がしきい値を下回っているかチェック
if voltage < moisture_threshold:
current_state = "LOW"
else:
current_state = "NORMAL"
# 状態が変わったら通知を送る
if current_state != previous_state:
if current_state == "LOW":
print("土壌が乾燥しています。水やりが必要です。")
send_line_notify("土壌が乾燥しています。水やりが必要です。")
GPIO.output(17, GPIO.LOW) # LEDを点灯させる(乾燥時)
else:
print("土壌湿度は正常です。")
send_line_notify("土壌湿度は正常です。")
GPIO.output(17, GPIO.HIGH) # LEDを消灯(湿度正常時)
previous_state = current_state
sleep(10) # 10秒ごとにセンサーの値を確認
except KeyboardInterrupt:
pass
finally:
spi.close()
GPIO.cleanup()
今回使用する土壌湿度センサが湿度が高いほどセンサーの出力電圧が下がる仕様のためchatGPTの力も借りながら多少調整する。
# 土壌湿度がしきい値を上回っているかチェック
if voltage > moisture_threshold:
current_state = "LOW" # 電圧が高い=乾燥している
else:
current_state = "NORMAL" # 電圧が低い=湿っている
発表ブースの原案を考える
基本は発表会2の通り
サボテンを直接持っていくというのも難しいため、人の目を引くような体験できる何かを考える





