(2020-09-20 初稿 - 2021-05-14 転記・修正)
はじめに
対応するシールド(センサー)の多さに惹かれて、Arduinoを購入した。
このページでは、AM2302(DHT22)をArduinoにつないで温湿度を計測する方法と、計測した温湿度をPCやRaspberry Pi等のPython3で受信する方法について記述する。
AM2302(DHT22)の接続
DHT22単体で、Analog Inに接続する例はたくさんあるが、筆者の買ったものは既にデジタル変換する基盤がついたもので、意外と情報が少なかった。
筆者の購入したAM2302は、以下のとおり。
以下のページを参考に接続した。多謝。
下の写真のとおり、(+)をarduinoの5.5Vの端子に、(ー)をGND端子に、真ん中のDATA端子は、ANALOG INの2番に接続する。
温湿度の測定
温度と湿度の測定のプログラム(以下、スケッチ)作成のために、上記サイトからAM2302 LibraryとSketch Fileをダウンロードする。
ライブラリの追加
まずは、ダウンロードしたLibraryを追加する。
Arduinoの「スケッチ」メニューの「ライブラリを使用」、「Add Library」とクリックし、先程ダウンロードしたライブラリを選択する。
実行後、「ライブラリを使用」を選択したときに、追加したライブラリが選べれば成功。
スケッチファイルの追加
次に、ダウンロードしたSketch Fileを展開して、sketchbookディレクトリに移動する。
ファイルメニューの「開く」で、AM2302_Sketch.ino ファイルが選択可能になる。
ファイルを開いたら、「レ点」でコンパイルし、右矢印(⇒)の記号でArduinoにスケッチを送る。
スケッチを送ったら、右上の虫眼鏡のマークの「シリアルモニタ」を開き、スケッチが正常に動いていることを確認する。
なお、シリアルモニタは、「Ctrl + Shift + M」でも開ける。
AM2302 Humidity - Temperature Sensor RH Temp (C) Temp (F) Heat Index (C) Heat Index (F) 61.60 % 26.50 *C 79.70 *F 27.57 *C 81.62 *F 62.10 % 26.50 *C 79.70 *F 27.60 *C 81.67 *F
pythonでデータを取得する
シリアルモニタには、時々刻々と湿度や温度が表示されるが、記録やtwitter等で活用できないので、pythonでデータを取得する簡単なスクリプトを作成する。
まずは、python(ここでは、python3)にserialのパッケージをインストールする。
この操作は、Debian、Raspberry Piともに同じである。
sudo apt install python3-serial
作成したスクリプトは、以下のとおり。
#!/usr/bin/env python3 #coding: UTF-8 # [2020-09-19] ver0.01 started by H. Yamada import serial data = '' ser = serial.Serial('/dev/ttyACM0', 9600) #ボーレートはArduino側と合わせる data = ser.readline() # 行単位で読込み ser.close() item = data.decode().split() #byte型をstringに変更して、空白で分割 print(item[0], item[1], item[2], item[3])
以上で、データと単位が別々に取得できたので、データごとにfloatに加工等して、Google DriveやTwitterで活用できるようになった。
おわりに
Arduinoを用いて、簡単に温湿度を測る方法について解説した。
また、なにか気がついたことがあれば追記する。