【Arduino/Python#8】室内の温湿度計測&PCリアルタイム表示
今回は室内の温度・湿度をDHT11を用いて計測し,シリアル通信を用いてPCに取り込み,Pythonでデータを表示させるということをする。
1. 必要素子
- ブレッドボード
- 抵抗(10kΩ)
- 温湿度センサ(DHT11)
- ジャンパー線 4本
ここで,今回購入したStater KitにはDHT11が基板にはんだ付けされていた。
以下にDHT11単体で使用する場合と基板に接続されている場合の比較を示す。
これを参考に自身の持つDHT11に応じて配線を変更してほしい。
<DHT11端子の説明>
- VDD :電源接続(図(b)Bに接続)
- DATA :データの読み取り(図(b)Aに接続)
- NC :何も接続しない or 電源/グランドに直接接続(図(b)Bに接続)
- GND :グランド(図(b)Cに接続)
2. 配線図
3. スケッチ/Pythonコード
●スケッチ(Arduino側)
#include "DHT.h" //ライブラリ読み込み const int DHTPIN=7; //7番pinをDHTpinに設定 #define DHTTYPE DHT11 // DHTの種類をDHT 11に設定 DHT dht(DHTPIN, DHTTYPE);//DHT11に関する情報を入力 void setup() { Serial.begin(9600); //9600bpsでシリアルポートを開く dht.begin(); //DHT11による計測開始 } void loop() { delay(6000); //6秒ごとに計測 float h = dht.readHumidity(); // 湿度を測定 float t = dht.readTemperature(); // 温度を摂氏で測定 // 読み込み失敗かどうか判断 if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } Serial.println(t); //改行しながら温度を出力 Serial.println(h); //改行しながら湿度を出力 }
"DHT.h"ライブラリのインストールについては以下を参照。
opuktr.hatenablog.com
●Python側
# -*- coding: utf-8 -*- import numpy as np import serial import datetime def queue(src, data): #「要素番号が若い=古いデータ」となるよう格納する関数 dst = np.roll(src, -1) #配列の要素を回転[backward] dst[-1] = data #配列の最後にデータを格納 return dst # 1次元配列の生成 temps = [0]*100 #温度の配列 humids = [0]*100 #湿度の配列 i = 0 #カウント用変数 ser = serial.Serial("COM3") # Arduinoが接続されているCOMポートを指定 while(i != 100):#10分間(6秒×100回)のデータを表示 #情報の取得 temp = float(ser.readline().rstrip().decode(encoding='utf-8')) #温度に関して humid = float(ser.readline().rstrip().decode(encoding='utf-8')) #湿度に関して now = datetime.datetime.today() #現在時刻に関して #表示 print('--------------------------------') print(now.strftime("%Y/%m/%d %H:%M:%S")) print("温度:{:.2f}℃".format(temp)) print("湿度:{:.2f}%".format(humid)) # キュー操作により温湿度データの格納 temps = queue(temps, temp) humids = queue(humids, humid) i+=1 ser.close() #ポートを閉じる print("End")
ここでは,Pyserialというモジュールが必要だ。なければ,"No module named serial"というエラーを吐く。
すなわち,コマンドプロンプトを開いて以下の様にする必要がある。
pip install pyserial
<注意事項>
- 「serial」ではなくて,「Pyserial」が必要。
すなわち,以下のコマンドは間違い。
pip install serial #Pyserialをインストールするものではない!!
「serial」をインストールしてしまったら,pipのインストール先(私の場合,C:\ProgramData\Anaconda3\Lib\site-packages)で「serial」というファイルが作成される。
「pyserial」をインストールしても,同様にpipのインストール先で「serial」というファイルが作成される。
即ち,同じファイルの中で2つが競合して上手いこと行かないことがあるので,以下のように2つともアンインストールし直して「Pyserial」だけをインストールし直すのが良い。
pip uninstall serial pip uninstall pyserial pip install pyserial
そして,Pythonを一度閉じて再度開いた方がいいかもね。
- 自分で書いたPythonのコードの名前を「serial.py」にしない。
これも同様で,モジュールが上手くインポートできずに,'module' object has no attribute 'Serial'となる恐れがある。
- Pythonを実行する際にはシリアルモニタ/プロッタを閉じておく。
開いたままだと、実行時にアクセス拒否される。よって、モニタで温湿度を確認しながらPythonで表示させることはできない。