ラズパイ4で各センサーを試してAWS Iotにpublishしてみた

 前回の続きで、今度はKEYESTUDIOスターターキットに含まれていた各センサーを試してみます。
 まず、温度湿度センサーですが、キット付属のセンサーはDHT11というモノ、サイトのコードはパット見pythonに変換するのが面倒なので、下記を参考にしました。
[blogcard url=”https://github.com/szazo/DHT11_Python”]
 簡単に温度と湿度の値が取れましたが、たまにゼロのケースがあるようなので、正しく計測するにはちょっと考慮が必要ですね。

 次は土壌水分センサーです。キットのサイトを参考に、I2Cを有効にし、Cのソースをそのままpythonに置き換えてすぐに値が取れるようになりました。

import wiringpi

Address = 0x48
BASE = 64
A0 = BASE + 0
A1 = BASE + 1
A2 = BASE + 2
A3 = BASE + 3

wiringpi.wiringPiSetup()
wiringpi.pcf8591Setup(BASE, Address)
while True:
    value = wiringpi.analogRead(A1)
    print("A1:" + str(value))
    wiringpi.delay(500)

 キット付属の照度センサーとかも指定するpinを変えるだけで取れました。ただ、照度センサーの場合はキット付属の3種の抵抗から1つを使用するのですが、3種の違いが見た目で解らず、配線が厄介です。
 
 使えそうなセンサーの値が取れるようになったので、これらを定期的にAWS Iotにpublishする事で最適な水やりタイミングを分析出来るようにしてみました。データはCSV形式でこんな感じです。

2020-04-19 00:05:11.97121800,19.3,49.0,134,254

 データは、日時、温度、湿度、土壌水位、照度をAWS Athenaのクエリーで取れるようにしておきます。

 Athenaでは、日時をtimestamp型にする場合、ミリ秒を8桁にしないとデータとして認識しないようなので、無理やりゼロを付けてます。ただ、AthenaではタイムゾーンをJSTとして扱うのが面倒な感じなので、無理にtimestamp型にしなくてもよかったかも?

なお、AWS IOTからS3バケットへの格納するキーは、

${clientid()}/${parse_time("yyyyMM", timestamp(), "Asia/Tokyo")}/${parse_time("dd", timestamp(), "Asia/Tokyo")}/${timestamp()}.csv

のように年月と日付をディレクトリにして、あとでログ管理をしやすくしておきます。ま、この程度ならS3もAthenaも当面コストほとんどゼロでいけるでしょう。

 これで各センサーの値によって水やりを制御する形が大体出来てきました。が、最後に肝心な水やり制御方法をどうするかについては、まだ検討中です。。