気象・土壌水分データ測定

プロジェクトの目的

ラズベリーパイで気象データと土壌水分データを定期的に測定し、クラウド上(Ambient)にデータを蓄積していきます。


  • 気象センサーと土壌水分センサーをブレッドボード上に実装します


ラズパイマガジン 2020年4月号 P29、P35 参照この際、ラズパイの設定でSPI,I2C等のインターフェイスが有効になっていることを確認します
  • 常駐プログラムを起動します


ラズパイマガジン2020年4月号P13 参照
$ sudo systemctl start pigpiod$ sudo systemctl enable pigpiod
  • Ambientでチャンネルを作成し、以下の情報を取得します。

  • チャネル名
  • チャネルID
  • リードキー
  • ライトキー

  • Ambientのライブラリのインストール

エレキジャックIoT 2号 P55参照
$sudo apt-get install git$sudo pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git

土壌水分計の代わりに、照度計を使う場合には以下のプログラムを使います。こちらもチャンネルIDとライトキーは書き換えます
※これらのプログラムは、ラズパイマガジンに掲載されれていたサンプルプログラムを元にしています
  • Python3でweather_wet_temp_ambient.py(もしくはillumi_weather_ambient.py)を実行します


  • 追記1:DS18B20温度センサーの使い方

  1. Raspberry Pi Zero WHで温度センサーDS18B20を使う

  2. Raspberry Piに接続されたDS18B20で取得した温度をAmbientにアップロードするスクリプト

  3. Raspberry Piで手作り温度計!

  4. ラズパイ・ゼロ(Raspberry pi Zero)でIoT (16) ディジタル温度センサ1 1-Wire DS18B20

  5. Raspberry Piに1-wireの温度センサーを接続して室内の温度を定点観測してみました

  6. w1thermsensor · PyPI


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で接続している。

pigpio公式ページ


  • 追記3:照度測定に関する関連情報

農家のIOTデバイス IKAKASHI

照度センサーモジュール(秋月電子)

結線方法

ラズパイマガジン2020年4月P29

TSL2571とTSL2561

I2Cの使い方の基礎

接続されているI2Cデバイスのアドレス確認

$ i2cdetect -y 1

複数のI2Cセンサーを接続する方法

(参考)

照度と明るさの目安

野菜別(農作物)光飽和点と光補償点のまとめ


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にメッセージ

PythonでLINEにメッセージを送る

LINE Notifyの使い方!Webからの通知をトークルームで受け取る方法!

⇒ 土壌水分量が一定以下の場合に、Line Notifyにメッセージを送信するようにプログラムを変更


※ 上記の点を反映した最新のプログラムが、weather5_line.py。これをcrontabで10分ごとに実行。(2020年12月)