2021年3月22日月曜日

Raspberry Pi Zero WHを使って、格安で温湿度データロガーを作る。(1/2)【準備編】

以前、Raspberry Pi 4 Model Bを使って温湿度データロガー作ったのですが、今回はより安価なRaspberry Pi Zero WHを使って作ってみます。

特に、複数ヶ所で測定を行う場合、1つあたりの費用はできる限り安くしたいですからね。

Raspberry Pi Zero WHは、無線LANとBluetoothが搭載されたZero Wに、あらかじめピンヘッダが付いたモデルになります。

ということで、まずは作り方メモ【準備編】です。



***

▼ 必要となる機器類


実際に購入したものは、その時の金額を記載しています。電源アダプターについてはAndroidスマホのものを流用したので参考金額です。Raspberry Pi Zero WH本体とケースはスイッチサイエンス、その他はAmazonにて購入しました。

【必須】
・Raspberry Pi Zero WH ¥1,848
・microSDカード(16GB~32GB程度) ¥880
・電源アダプター(USB Micro-B) ¥1,000程度
・温湿度センサー(DHT22/AM2302) ¥999

【必要があれば】
・ケース ¥660

おそらくあった方がいいです。これはRaspberry Pi Zero公式ケースの価格です。

【最初だけ必要】
・モニター ¥7,276
・HDMIケーブル(HDMI A オス - miniHDMI C オス) ¥782
・キーボード、マウス(USB接続できるもの) ¥999 + ¥907 
・USBハブ(USB Micro-B オス - USB A メス) ¥520

【必須】でおよそ¥5,000、ケースを含めても¥6,000はかからずに作れる感じですね。

microSDカードは、スピードクラスがClass10/U1のものを選べば、とりあえずは問題ないようです。あとは、基本的に消耗品として壊れる前提でシステムを組むことが重要そうです。

別途、(当然ですが)パソコンと、OSを作るためにmicroSDカードのリーダーが必要になります。


▼ Raspberry Pi Zero WHの下準備


① Raspberry Pi OSのセットアップ
② IPアドレスの固定
③ VNC、SSHを有効化
④ PythonのデフォルトをPython3に変更

やり方は、検索すればたくさん出てきますので省略。

②③は、作業時に、いちいちモニターとキーボード、マウスをつなぐのが大変なので、リモートアクセスで作業できるようにしています。(追加:IPアドレスの固定は、他のネットワークに接続する場合などは邪魔になるので必要に応じて。)

-----
追記(2021-5-3)

現時点でRaspberry Pi OSを、Language=「ja(japanese)」、Country=「JP(Japan)」でセットアップすると初期状態で日本語表示はされるのですが、入力には別途パッケージのインストールが必要なようです(「fcitx-mozc」、「ibus-mozc」 等)。
-----


▼ Raspberry Pi Zero WHとDHT22の接続


DHT22側:Raspberry Pi側(ピン番号)
DAT:GPIO4(7)
VCC:5V(2)
GND:GND(6)

接続は適宜。今回はGPIO4を使いました。電源電圧については、3.3Vと5Vのどちらでも大丈夫みたいです。


▼ 温度・湿度データの取得


Githubから温湿度センサーの値を取得するライブラリのインストールを行います。

Raspberry Pi 4では使えたライブラリが、Zeroではなぜか使えなかったので、別のライブラリを使いました。このエラーにより丸一日停滞(笑)。(追記 2022-1-24:逆にRaspberry Pi 4ではこちらのライブラリが使えない?みたいです。)
$ sudo git clone --recursive https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT
$ sudo python setup.py install

作業フォルダの作成。
$ cd
$ mkdir Python
$ cd Python
$ mkdir DHT22

温度、湿度の値を取得するためのPythonコードを作成。「DHT22」フォルダに保存。 ファイル名は「te_hu.py」。
#!/usr/bin/env python3

import Adafruit_DHT

sensor = Adafruit_DHT.DHT22

pin = 4

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

if humidity is not None and temperature is not None:
    print('{0:0.1f}'.format(temperature))
    print('{0:0.1f}'.format(humidity))
else:
    print('Failed to get reading. Try again!')

実行。
$ python te_hu.py
25.1
55.5

……ということで、無事に温度と湿度の値を取得できました。上が温度、下が湿度ですね。


次回は、スプレッドシートへの記録を行います。



・関連投稿


Raspberry Piで温度と湿度を計測する。(DHT22 AM2302使用)

Raspberry Piで温度と湿度を定期的に取得してスプレッドシートに記録する。


Twitter(@nkkmd)日々更新中です。