気象・土壌水分データ測定
プロジェクトの目的
ラズベリーパイで気象データと土壌水分データを定期的に測定し、クラウド上(Ambient)にデータを蓄積していきます。
気象センサーと土壌水分センサーをブレッドボード上に実装します
ラズパイマガジン 2020年4月号 P29、P35 参照この際、ラズパイの設定でSPI,I2C等のインターフェイスが有効になっていることを確認します
常駐プログラムを起動します
ラズパイマガジン2020年4月号P13 参照
$ sudo systemctl start pigpiod$ sudo systemctl enable pigpiod
Ambientでチャンネルを作成し、以下の情報を取得します。
- チャネル名
- チャネルID
- リードキー
- ライトキー
Ambientのライブラリのインストール
$sudo apt-get install git$sudo pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git
必要なPythonのライブラリとプログラムファイルをラズパイにコピーします
- bme280.py
- mcp3002.py
- weather_wet_temp_ambient.py → チャンネルIDとライトキーを書き換えます
土壌水分計の代わりに、照度計を使う場合には以下のプログラムを使います。こちらもチャンネルIDとライトキーは書き換えます
※これらのプログラムは、ラズパイマガジンに掲載されれていたサンプルプログラムを元にしています
Python3でweather_wet_temp_ambient.py(もしくはillumi_weather_ambient.py)を実行します
追記1:DS18B20温度センサーの使い方
1) 3. を参考に結線し、温度が計測できていることを確認する
2) 6. を参考に W1ThermSensor をインストールする
$ sudo apt-get install python3-w1thermsensor
3) 1. を参考にpythonプログラムを書く
# -*- coding: utf-8 -*-
from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor()
celsius = sensor.get_temperature()
print("ただいまの温度は {0:.2f}℃です。".format(celsius))
→これを組み込んだプログラムが weather_wet_temp_ambient3.py と illumi_weather_temp_ambient2.py
追記2:crontabでpigpioを使う際にはSPIとI2Cをクローズしないと、ハンドル数が足らなくなる(最大32)
mcp3002(ADコンバーター)はSPI経由で接続している。
BME280はI2Cで接続している。
追記3:照度測定に関する関連情報
ラズパイマガジン2020年4月P29
接続されているI2Cデバイスのアドレス確認
$ i2cdetect -y 1
(参考)
ambientライブラリーでデーターを送受信する時は、次のように例外を受けることができます。
import ambient
import requests
try:
ret = am.send(data)
print('sent to Ambient (ret = %d)' % ret.status_code)
except requests.exceptions.RequestException as e:
print('request failed: ', e)
注)Ambientでは最短の送信間隔が5秒なので、5秒以上間隔をあけてデーターを送信する必要がある。(詳細)
Pythonプログラムを一時停止する方法
import time
time.sleep(秒数)
追記5:PythonでLINEにメッセージ
LINE Notifyの使い方!Webからの通知をトークルームで受け取る方法!
⇒ 土壌水分量が一定以下の場合に、Line Notifyにメッセージを送信するようにプログラムを変更
※ 上記の点を反映した最新のプログラムが、weather5_line.py。これをcrontabで10分ごとに実行。(2020年12月)