Fuktighet, temperatur och tryck är tre grundläggande parametrar för att bygga vilken väderstation som helst och för att mäta miljöförhållanden. Vi har tidigare byggt en mini-väderstation med Arduino och den här gången utökar vi väderstationen med Raspberry Pi. Detta IoT-baserade projekt syftar till att visa de aktuella fuktighets-, temperatur- och tryckparametrarna på LCD-skärmen samt på Internet-servern med Raspberry Pi, vilket gör den till en Raspberry Pi Weather Station. Du kan installera den här inställningen var som helst och kan övervaka väderförhållandena på den platsen var som helst i världen över internet, den visar inte bara aktuell data utan kan också visa tidigare värden i form av grafer.
Vi har använt DHT11 fukt- och temperatursensor för att känna av temperaturen och BM180 trycksensormodul för mätning av barometertryck. Denna termometer i Celsius-skala och procentuell luftfuktighetsmätare visar omgivningstemperaturen och luftfuktigheten genom en LCD-display och barometertrycket visas i millibar eller hPa (hektopascal). All denna information skickas till ThingSpeak- servern för liveövervakning var som helst i världen över internet. Kontrollera demonstrationsvideo- och Python-programmet, som ges i slutet av denna handledning.
Arbete och ThingSpeak-inställning:
Detta IoT-baserade projekt har fyra sektioner. För det första känner DHT11-sensorn luftfuktighets- och temperaturdata och BM180-sensorn mäter atmosfärstrycket. För det andra läser Raspberry Pi DHT11-sensormodulens utgång genom att använda entrådsprotokoll och BM180-tryckgivarens utgång med hjälp av I2C-protokollet och extraherar båda sensorvärdena till ett lämpligt antal i procent (fuktighet), Celsius-skala (temperatur), hectoPascal eller millibar (tryck). För det tredje skickas dessa värden till ThingSpeak-servern med hjälp av inbyggt Wi-Fi i Raspberry Pi 3. Och slutligen analyserar ThingSpeak data och visar dem i en grafform. En LCD används också för att visa dessa värden lokalt.
ThingSpeak ger ett mycket bra verktyg för IoT-baserade projekt. Genom att använda ThingSpeak-webbplatsen kan vi övervaka vår data och styra vårt system via Internet med hjälp av kanaler och webbsidor som tillhandahålls av ThingSpeak. ThingSpeak 'samlar' data från sensorerna, 'analyserar och visualiserar' data och 'agerar' genom att utlösa en reaktion. Vi har tidigare förklarat om att skicka data till ThingSpeak i detalj, du kan kolla där. Här förklarar vi kort att använda ThingSpeak för denna Raspberry Pi-väderstation.
Först måste du skapa ett konto på ThingSpeak-webbplatsen och skapa en "ny kanal" i den. I en ny kanal måste du definiera några fält för de data du vill övervaka, som i det här projektet skapar vi tre fält för luftfuktighets-, temperatur- och tryckdata.
Klicka nu på fliken "API-nycklar" och spara API-nycklarna för skriv och läs, här använder vi bara skrivnyckeln. Du måste kopiera den här nyckeln i "nyckel" -variabeln i koden.
Efter det klickar du på 'Dataimport / export' och kopierar URL för uppdatering av kanalflöde GET Request, som är:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Nu behöver vi denna "Feed Get Request URL" i vår Python-kod för att öppna "api.thingspeak.com" och sedan skicka data med denna Feed Request som frågesträng. Och innan data skickas måste användaren ange temperatur-, luftfuktighets- och tryckdata i denna fråga Sträng med hjälp av variabler i programmet, kolla in koden i slutet av den här artikeln.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (tryck)
Arbetet med DHT11 baseras på seriell kommunikation med en tråd för att hämta data från DHT11. Här har vi använt AdaFruit DHT11-biblioteket för gränssnitt mellan DHT11 och Raspberry Pi. Raspberry Pi samlar här in luftfuktighets- och temperaturdata från DHT11 och atmosfärstryck från BMP180-sensorn och skickar den sedan till 16x2 LCD och ThingSpeak-servern. ThingSpeak visar data i form av diagram enligt nedan:
Du kan lära dig mer om DHT11-sensorn och dess gränssnitt med Arduino här.
Kretsschema:
Raspberry Pi Configuration and Python Program:
Vi använder Pythonspråk här för programmet. Innan kodning måste användaren konfigurera Raspberry Pi. Du kan kolla våra tidigare handledning för Komma igång med Raspberry Pi och Installera & Konfigurera Raspbian Jessie OS i Pi.
Först och främst behöver vi installera Adafruit Python DHT Sensor Library-filer för att köra detta projekt på Raspberry Pi. För att göra detta måste vi följa givna kommandon:
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
Efter detta måste användaren aktivera Raspberry Pi I2C genom att gå in i RPi Software Configuration Too:
sudo raspi-config
Gå sedan till "Advance Options", välj "I2C" och "Aktivera" den.
Programmeringsdelen av detta projekt spelar en mycket viktig roll för att utföra alla operationer. Först och främst inkluderar vi alla nödvändiga bibliotek, initieringsvariabler och definierar stift för LCD och DHT11.
import sys import RPi.GPIO som GPIO import os import Adafruit_DHT import urllib2 import smbus importtid från ctypes import c_short #Register Address regCall = 0xAA……………..
I def main (): Funktionen är under kod som används för att skicka data till servern och visa den över LCD, kontinuerligt i medan slinga.
def main (): skriv ut 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% key key print "Wait…." while True: (humi, temp) = readDHT () (tryck) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%' + "% sC% s"% (temp, tryck)) finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (tryck) print finalURL s = urllib2.urlopen (finalURL); skriv ut humi + "" + temp + "" + tryck s.close () time.sleep (10)
För LCD används def lcd_init () -funktion för att initiera LCD i fyrbitsläge , def lcdcmd (ch) -funktion används för att skicka kommando till LCD, def lcddata (ch) -funktion används för att skicka data till LCD och def lcdstring (Str ) -funktionen används för att skicka datasträng till LCD. Du kan kontrollera alla dessa funktioner i koden som ges efteråt.
Angiven def readDHT () -funktion används för att läsa DHT11-sensor:
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
def readBmp180- funktionen används för att läsa av tryck från BM180-sensorn. BM180-sensorn kan också ge temperatur men här har vi bara använt den för att beräkna tryck.
def readBmp180 (addr = deviceAdd): värde = bus.read_i2c_block_data (addr, regCall, 22) # Läs kalibreringsdata # Konvertera byte data till ordvärden AC1 = convert1 (värde, 0) AC2 = convert1 (värde, 2) AC3 = convert1 (värde, 4) AC4 = convert2 (värde, 6)……………………..
Så detta är den grundläggande Raspberry Pi-väderstationen, du kan utöka den ytterligare för att mäta olika väderrelaterade parametrar som vindhastighet, marktemperatur, ljusstyrka (lux), nederbörd, luftkvalitet etc.