湿度、温度、圧力は、気象観測所を構築し、環境条件を測定するための3つの基本的なパラメータです。以前はArduinoを使用してミニウェザーステーションを構築しましたが、今回はRaspberryPiを使用してウェザーステーションを拡張します。このIoTベースのプロジェクトは、Raspberry Piを使用して、LCDとインターネットサーバーに現在の湿度、温度、圧力のパラメーターを表示することを目的としています。これにより、RaspberryPiウェザーステーションになります。このセットアップはどこにでもインストールでき、インターネットを介して世界中のどこからでもその場所の気象条件を監視できます。現在のデータを表示するだけでなく、過去の値をグラフの形式で表示することもできます。
我々が使用しているDHT11湿度・温度センサを温度と感知するBM180圧力センサモジュールを大気圧を測定します。この摂氏スケールの温度計とパーセンテージスケールの湿度計は、LCDディスプレイを介して周囲の温度と湿度を表示し、気圧はミリバールまたはhPa(ヘクトパスカル)で表示されます。このすべてのデータは、インターネットを介して世界中のどこからでもライブ監視のためにThingSpeakサーバーに送信されます。このチュートリアルの最後にあるデモビデオとPythonプログラムを確認してください。
作業とThingSpeakのセットアップ:
このIoTベースのプロジェクトには4つのセクションがあります。まず、DHT11センサーが湿度と温度のデータを検知し、BM180センサーが大気圧を測定します。次に、Raspberry Piはシングルワイヤープロトコルを使用してDHT11センサーモジュールの出力を読み取り、I2Cプロトコルを使用してBM180圧力センサーの出力を読み取り、両方のセンサー値をパーセンテージ(湿度)、摂氏スケール(温度)、ヘクトパスカル、またはミリバール(圧力)で適切な数値に抽出します。第三に、これらの値は、Raspberry Pi3の組み込みWi-Fiを使用してThingSpeakサーバーに送信されます。そして最後に、 ThingSpeak はデータを分析し、グラフ形式で表示します。 LCDは、これらの値をローカルに表示するためにも使用されます。
ThingSpeak は、IoTベースのプロジェクトに非常に優れたツールを提供します。ThingSpeak Webサイトを使用することにより、ThingSpeakが提供するチャネルとWebページを使用して、インターネット経由でデータを監視し、システムを制御できます。ThingSpeak 「を収集」 センサからのデータ、 「分析および視覚化」 データと 「行為」 反応を誘発することによって。ThingSpeakへのデータ送信については以前に詳しく説明しましたが、そこで確認できます。ここでは、このRaspberry PiWeatherステーションにThingSpeakを使用する方法について簡単に説明します。
まず、ThingSpeak Webサイトでアカウントを作成し、その中に「新しいチャネル」を作成する必要があります。新しいチャネルでは、監視するデータのいくつかのフィールドを定義する必要があります。このプロジェクトでは、湿度、温度、および圧力のデータ用に3つのフィールドを作成します。
次に、[APIキー]タブをクリックして 、書き込みAPIキーと読み取りAPIキーを保存します。ここでは、書き込みキーのみを使用しています。このキーをコードの「key」変数にコピーする必要があります。
その後、[データのインポート/エクスポート]をクリックし、チャネルフィードの更新GETリクエストURLを コピーします。これは次のとおりです。
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
ここで、「api.thingspeak.com」を開き、このフィードリクエストをクエリ文字列として使用してデータを送信するために、Pythonコードにこの「フィード取得リクエストURL」が必要です。また、データを送信する前に、ユーザーはプログラムの変数を使用してこのクエリ文字列に温度、湿度、圧力のデータを入力する必要があります。この記事の最後にあるコードを確認してください。
URL = 'https://api.thingspeak.com/update?api_key =%s'%key finalURL = URL + "&field1 =%s&field2 =%s"%(humi、temp)+ "&field3 =%s"%(圧力)
DHT11の動作は、DHT11からデータをフェッチするための単線シリアル通信に基づいています。ここでは、DHT11とRaspberryPiのインターフェイスにAdaFruitDHT11ライブラリを使用しました。ここでRaspberryPiは、DHT11から湿度と温度のデータを収集し、BMP180センサーから大気圧を収集して、16x2LCDとThingSpeakサーバーに送信します。ThingSpeakは、以下のようにデータをグラフ形式で表示します。
DHT11センサーとArduinoとのインターフェースについて 詳しくは、 こちらをご覧ください。
回路図:
Raspberry Piの構成とPythonプログラム:
ここでは、プログラムにPython言語を使用 しています。コーディングする前に、ユーザーはRaspberryPiを構成する必要があります。Raspberry Piの使用開始、およびPiでのRaspbian JessieOSのインストールと構成に関する以前のチュートリアルを確認できます。
まず最初に、このプロジェクトをRaspberry Piで実行するには、Adafruit PythonDHTセンサーライブラリファイルをインストールする必要があります。これを行うには、指定されたコマンドに従う必要があります。
sudo apt-get install git-core sudo apt-get update git clone https://github.com/adafruit/Adafruit_Python_DHT.git cd Adafruit_Python_DHT sudo apt-get install build-essential python-dev sudo python setup.py install
この後、ユーザーはRPiソフトウェア構成に移動してRaspberry PiI2Cを有効にする必要があります。
sudo raspi-config
次に、「詳細オプション」に移動し、「I2C」を選択して「有効」にします。
このプロジェクトのプログラミング部分は、すべての操作を実行するために非常に重要な役割を果たします。まず、必要なすべてのライブラリを含め、変数を開始し、LCDとDHT11のピンを定義します。
import sys import RPi.GPIO as GPIO import os import Adafruit_DHT import urllib2 import smbus import time from ctypes import c_short #Register Address regCall = 0xAA………………
で DEFメイン(): 関数、コードの下にサーバにデータを送信するために使用され、連続的に、LCD上に表示 しながら ループ。
def main():print'System Ready… 'URL =' https://api.thingspeak.com/update?api_key =%s '%key print "Wait…." while True:(humi、temp )= readDHT()(pressure)= readBmp180()lcdcmd(0x01)lcdstring( "Humi#Temp#P(hPa)")lcdstring(humi + '%' + "%sC%s"%(temp、pressure))finalURL = URL + "&field1 =%s&field2 =%s"%(humi、temp)+ "&field3 =%s"%(pressure)print finalURL s = urllib2.urlopen(finalURL); print humi + "" + temp + "" + pressure s.close()time.sleep(10)
LCDの場合、 def lcd_init() 関数を使用してLCDを4ビットモードで初期化し、 def lcdcmd(ch) 関数を使用してコマンドをLCDに送信し、 def lcddata(ch) 関数を使用してデータをLCDに送信し、 def lcdstring(Str )関数は、データ文字列をLCDに送信するために使用されます。これらの機能はすべて、後で指定するコードで確認できます。
与えられた defreadDHT() 関数は、DHT11センサーの読み取りに使用されます。
def readDHT():humi、temp = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11、DHTpin)return(str(int(humi))、str(int(temp)))
def readBmp180 関数は、BM180センサーから圧力を読み取るために使用されます。BM180センサーも温度を与えることができますが、ここでは圧力の計算にのみ使用しています。
def readBmp180(addr = deviceAdd):value = bus.read_i2c_block_data(addr、regCall、22)#キャリブレーションデータの読み取り#バイトデータをワード値に変換AC1 = convert1(value、0)AC2 = convert1(value、2)AC3 = convert1 (値、4)AC4 = convert2(値、6)…………………….。
これが基本的なRaspberryPi Weather Stationです。さらに拡張して、風速、土壌温度、照度(lux)、降雨量、大気質などのさまざまな気象関連パラメータを測定できます。