皆さんこんにちは、D2-PLANの宗一郎です。
今回ご紹介するのはRaspberry Pi Zero WHを用いた温度と湿度の取得です。
これからIoTをかじろう、ラズパイ買ってみようと考えている方、
また既にラズパイを買ってみたという方には為になれば幸いと思います。
『使いこなせラズパイ企画!』
この企画は誰だって買えるRaspberry Piを使用したIoT化を目指し初歩的な電子工作から高度なIoTにもチャレンジしていく企画です。特に田舎、地方に特化したIoT活用方法を考えながら進め少しでも現場で使えるIoT化ができればと思っています。私自身ラズパイは初心者なのでブログを通して成長して行ければと思います。
本題
『Raspberry Pi Zero WHで温度と湿度を取得』
必要なもの
パソコン
→私はMacなので紹介はMacの場合でします。
Raspberry Pi Zero WH
→スイッチサイエンスさんで購入できます。
micro USB ケーブル type-B
→今やどこでもあると思います。
OTGケーブル(USBに変換します)
→下記アマゾン等で購入できます。
MiniHDMI-HDMI変換ケーブル(ディスプレイを接続します)
→下記アマゾン等で購入できます。
ジャンパワイヤー3本
→下記アマゾン等で購入できます。
ブレッドボード
→下記アマゾン等で購入できます。
温湿度センサー
→下記アマゾン等で購入できます。
抵抗10kΩ 1本(4.7kΩでも可)
→秋月電子さん等で購入できます。
microSD
→今やどこでも売ってます。16GBであれば十分です。
キーボード(USB端子)
→なんでもOK。
ディスプレイ
→HDMIが接続できればなんでもOK。私はTVでしました。
必要なものは以上です。ハンダ小手を使ったような難しい電子工作はしません。ジャンパワイヤーとブレッドボードを使用することで簡単に配線ができます。
配線方法
まずは配線をしていきます。配線図は下図になります。
特に難しい配線はないので、間違えないように接続すればOKです。
接続を間違えて電源を入れてしまうと最悪の場合、ショートし壊れてしまう場合があるので配線の場所だけは要注意です。
簡単に使っているGPIOだけ確認です。
まず上の図の右側赤色のラインは電源です。3.3Vの電気を送ります。そして、黄色の配線はセンサの情報を受け取る部分です。今回は23pinを使っています。センサとの電源の通り道に抵抗をかましています。抵抗なしで温度センサに電流を流すと過剰で焼け切れる可能性があるためです。そして最後に電源をGNDに戻します。
配線ができたら次にプログラムを準備します。
必要パッケージのインストール
配線ができたら起動します。USBデバイス等の接続を確実に行なって電源を接続してください。ラズパイが立ち上がったらまず、必要パッケージのインストールを行います。まず初めに、パッケージアップデートと、Python開発ツールをインストールします。
※前回事前に設定しましたSSHを利用しMacのターミナルを使用して作業をします。
$ sudo apt update
$ sudo apt install build-essential python-dev
次に温湿度センサーのライブラリをダウンロードしましょう。
$ git clone https://github.com/adafruit/Adafruit_Python_DHT.git
Adafruit_Python_DHTディレクトリに移動して以下のコマンドでインストールを実行します。
$ cd Adafruit_Python_DHT/
$ sudo python setup.py install
問題なくインストールが完了すると最後に下記が表示されます。
Installed /usr/local/lib/python2.7/dist-packages/Adafruit_DHT-1.4.0-py2.7-linux-armv6l.egg
Processing dependencies for Adafruit-DHT==1.4.0
Finished processing dependencies for Adafruit-DHT==1.4.0
これで準備は完了です。次にプログラムを準備して取得してみます。
温湿度取得プログラムの準備と実行
実はプログラムですが、先ほどインストールしたライブラリの中にサンプルで取得プログラムが入っています。今回はそちらの中身を少し確認しつつ実行してみることにします。
サンプルプログラムが入っているのはここです。
$ cd /home/pi/Adafruit_Python_DHT/examples
移動したら下記のファイルを開いてみます。
テキストファイルを開く場合は nano というコマンドを使います。
$ nano simpletest.py
開くとなんやかしら文字がバーっと出てきました。
import Adafruit_DHT
# Sensor should be set to Adafruit_DHT.DHT11,
# Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
sensor = Adafruit_DHT.DHT22
# Example using a Beaglebone Black with DHT sensor
# connected to pin P8_11.
pin = 'P8_11'
# Example using a Raspberry Pi with DHT sensor
# connected to GPIO23.
#pin = 23
# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))
else:
このプログラムのほんとにざっくりと説明すると、指定のGPIOについているセンサより信号を取得しそれに処理を加えることで温度と湿度を算出する。
といった内容になります。
実は今回一部変更をする必要があります。分かりますでしょうか。
そうです、pinの指定が'P8_11'になっています。
pin = 'P8_11'
今回は23番を使用しているので、上記コードをコメントアウトして、下記コードを生き返らせます。
pin = 23
そしてcontrol+Oで書き込みを行い、control+Xで閉じます。
それではプログラムの実行をしてみます。
$ python simpletest.py
どうでしょうか。
私は取得ができました。
Temp=28.0*C Humidity=69.5%
温度が28度で湿度が69.5%ですね。
温度は他の温度計と比較しましたがかなり近い値でした。
目標達成です。
今回は既存のサンプルプログラムを使用して簡単な取得を行いましたが、これを応用していくことで様々な数値取得とデータ蓄積が可能になるんでしょうね。様々な期待が膨らみます。もっと早くこういったことを経験したかったです。
次回は今回取得できた、温度と湿度を定期的にLINEに通知する仕組みを構築してみましょう。もちろん私も初めてです。できないことができる様になることってすごく気持ちがいいですね。人として未来を作っていくにはずっと必要なことだと感じます!
ありがとうございました。
※走り書きで文章を書いておりますので、間違った内容や不備がある場合があります。お気づきになられましたら是非ご連絡頂けますと幸いです。
instagram 私のインスタ → @soichiro_koyanagi
instagram D2-PLAN → @d2_plan
Comments