Fugtighed, temperatur og tryk er tre grundlæggende parametre til at opbygge en hvilken som helst vejrstation og til at måle miljøforhold. Vi har tidligere bygget en mini Weather Station ved hjælp af Arduino, og denne gang udvider vi vejrstationen med Raspberry Pi. Dette IoT-baserede projekt sigter mod at vise de aktuelle parametre for fugtighed, temperatur og tryk på LCD'et på Internetserveren ved hjælp af Raspberry Pi, hvilket gør det til en Raspberry Pi Weather Station. Du kan installere denne opsætning overalt og kan overvåge vejrforholdene på det sted fra hvor som helst i verden over internettet, det viser ikke kun de aktuelle data, men kan også vise de tidligere værdier i form af grafer.
Vi har brugt DHT11 fugtigheds- og temperaturføler til registrering af temperaturen og BM180 tryksensormodul til måling af barometertryk. Dette Celsius-skala termometer og procentvise skala Fugtighedsmåler viser den omgivende temperatur og fugtighed gennem et LCD-display, og barometertrykket vises i millibar eller hPa (hektopascal). Alle disse data sendes til ThingSpeak- serveren til liveovervågning fra hvor som helst i verden over internettet. Kontroller Demonstration Video and Python Program, der er givet i slutningen af denne tutorial.
Arbejds- og ThingSpeak-opsætning:
Dette IoT-baserede projekt har fire sektioner. For det første registrerer DHT11-sensoren fugtigheds- og temperaturdata, og BM180-sensoren måler det atmosfæriske tryk. For det andet læser Raspberry Pi DHT11-sensormodulets output ved hjælp af single wire-protokol og BM180-trykfølerens output ved hjælp af I2C-protokol og ekstraherer begge sensorværdier til et passende antal i procent (fugtighed), Celsius-skala (temperatur), hectoPascal eller millibar (tryk). For det tredje sendes disse værdier til ThingSpeak-serveren ved hjælp af indbygget Wi-Fi af Raspberry Pi 3. Og endelig analyserer ThingSpeak dataene og viser dem i en grafform. En LCD bruges også til at vise disse værdier lokalt.
ThingSpeak giver et meget godt værktøj til IoT-baserede projekter. Ved at bruge ThingSpeak-webstedet kan vi overvåge vores data og kontrollere vores system over Internettet ved hjælp af de kanaler og websider, der leveres af ThingSpeak. ThingSpeak 'Samler' dataene fra sensorerne, 'Analyser og visualiser' dataene og 'Handler' ved at udløse en reaktion. Vi har tidligere forklaret om at sende data til ThingSpeak i detaljer, du kan tjekke der. Her forklarer vi kort at bruge ThingSpeak til denne Raspberry Pi Vejrstation.
Først skal du oprette en konto på ThingSpeak-webstedet og oprette en 'Ny kanal' i den. I en ny kanal skal du definere nogle felter til de data, du vil overvåge, som i dette projekt opretter vi tre felter til fugtigheds-, temperatur- og trykdata.
Klik nu på 'API-nøgler' -fanen, og gem skriv- og læs API-nøglerne, her bruger vi kun skrivnøglen. Du skal kopiere denne nøgle i 'nøgle' variabel i koden.
Herefter skal du klikke på 'Dataimport / eksport' og kopiere URL'en til GET-anmodning om opdatering af kanalfeed, som er:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Nu har vi brug for denne 'Feed Get Request URL' i vores Python-kode for at åbne "api.thingspeak.com" og derefter sende data ved hjælp af denne Feed Request som forespørgselsstreng. Og inden der sendes data, skal brugeren indtaste temperatur-, fugtigheds- og trykdataene i denne forespørgsel Streng ved hjælp af variabler i programmet, skal du kontrollere koden i slutningen af denne artikel.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (tryk)
Arbejdet med DHT11 er baseret på single wire seriel kommunikation til at hente data fra DHT11. Her har vi brugt AdaFruit DHT11-biblioteket til interface DHT11 med Raspberry Pi. Raspberry Pi her indsamler fugtigheds- og temperaturdata fra DHT11 og atmosfærisk tryk fra BMP180-sensoren og sender dem derefter til 16x2 LCD og ThingSpeak-serveren. ThingSpeak viser dataene i form af graf som nedenfor:
Du kan lære mere om DHT11-sensor og dens grænseflade med Arduino her.
Kredsløbsdiagram:
Raspberry Pi-konfiguration og Python-program:
Vi bruger Python-sprog her til programmet. Før kodning skal brugeren konfigurere Raspberry Pi. Du kan tjekke vores tidligere vejledninger til Kom godt i gang med Raspberry Pi og installation og konfiguration af Raspbian Jessie OS i Pi.
Først og fremmest skal vi installere Adafruit Python DHT Sensor Library-filer for at køre dette projekt på Raspberry Pi. For at gøre dette skal vi følge de givne kommandoer:
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
Herefter skal brugeren aktivere Raspberry Pi I2C ved at gå ind i RPi-softwarekonfiguration også:
sudo raspi-config
Gå derefter til 'Advance Options', vælg 'I2C' og 'Aktiver' det.
Programmering af en del af dette projekt spiller en meget vigtig rolle for at udføre alle operationer. Først og fremmest inkluderer vi alle nødvendige biblioteker, initiaze-variabler og definerer ben til LCD og 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……………..
I def main (): -funktion bruges nedenstående kode til at sende data til serveren og vise dem over LCD'et, kontinuerligt i mens loop.
def main (): udskriv 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% nøgle udskriver "Vent…." mens True: (humi, temp) = readDHT () (tryk) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%' + "% sC% s"% (temp, tryk)) finalURL = URL + "& felt1 =% s & felt2 =% s"% (humi, temp) + "& felt3 =% s"% (tryk) print finalURL s = urllib2.urlopen (finalURL); udskriv humi + "" + temp + "" + tryk s.close () time.sleep (10)
For LCD bruges def lcd_init () -funktion til at initialisere LCD i fire-bit-tilstand, def lcdcmd (ch) -funktion bruges til at sende kommando til LCD, def lcddata (ch) -funktion bruges til at sende data til LCD og def lcdstring (Str ) -funktion bruges til at sende datastreng til LCD. Du kan kontrollere alle disse funktioner i kode, der er angivet bagefter.
Givet def readDHT () funktion bruges til at læse DHT11 sensor:
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
def readBmp180 funktion bruges til at læse tryk fra BM180 sensoren. BM180-sensoren kan også give temperatur, men her har vi kun brugt den til beregning af tryk.
def readBmp180 (addr = deviceAdd): værdi = bus.read_i2c_block_data (addr, regCall, 22) # Læs kalibreringsdata # Konverter byte data til ordværdier AC1 = convert1 (værdi, 0) AC2 = convert1 (værdi, 2) AC3 = convert1 (værdi, 4) AC4 = convert2 (værdi, 6)……………………..
Så dette er den grundlæggende Raspberry Pi Vejrstation, du kan udvide den yderligere til at måle forskellige vejrrelaterede parametre som vindhastighed, jordtemperatur, belysningsstyrke (lux), nedbør, luftkvalitet osv.