Vlaga, temperatura in tlak so trije osnovni parametri za gradnjo katere koli vremenske postaje in za merjenje okoljskih razmer. Pred tem smo z uporabo Arduina zgradili mini vremensko postajo, tokrat pa z Raspberry Pi razširjamo vremensko postajo. Cilj tega IoT projekta je prikazati trenutne parametre vlažnosti, temperature in tlaka na LCD-ju, pa tudi na internetnem strežniku z uporabo Raspberry Pi, zaradi česar je vremenska postaja Raspberry Pi. To nastavitev lahko namestite kjer koli in lahko preko interneta spremljate vremenske razmere v tem kraju od koder koli na svetu, ne samo, da bodo prikazani trenutni podatki, temveč bodo lahko prikazane tudi pretekle vrednosti v obliki grafov.
Za zaznavanje temperature smo uporabili senzor vlažnosti in temperature DHT11 in modul senzorja tlaka BM180 za merjenje zračnega tlaka. Ta merilnik termometra in odstotne skale merilnik vlažnosti na stopnji Celzija na LCD-prikazovalniku prikazuje temperaturo in vlažnost okolice, zračni tlak pa je prikazan v milibarjih ali hPa (hektopaskalnih). Vsi ti podatki se pošljejo strežniku ThingSpeak za živo spremljanje prek interneta od koder koli na svetu. Preverite Demonstracijski video in program Python, podan na koncu te vadnice.
Nastavitev dela in stvari:
Ta projekt, ki temelji na IoT, ima štiri odseke. Najprej senzor DHT11 zazna podatke o vlažnosti in temperaturi, senzor BM180 pa izmeri atmosferski tlak. Drugič, Raspberry Pi bere izhod senzorskega modula DHT11 z uporabo enožičnega protokola in izhod senzorja tlaka BM180 s protokolom I2C ter ekstrahira vrednosti obeh senzorjev v primerno število v odstotkih (vlažnost), stopinja Celzija (temperatura), hektoPaskal ali milibar (tlak). Tretjič, te vrednosti se pošljejo strežniku ThingSpeak z uporabo vgrajenega Wi-Fi v Raspberry Pi 3. In na koncu ThingSpeak analizira podatke in jih prikaže v obliki grafa. LCD se uporablja tudi za prikaz teh vrednosti lokalno.
ThingSpeak ponuja zelo dobro orodje za projekte, ki temeljijo na IoT. Z uporabo spletnega mesta ThingSpeak lahko nadziramo svoje podatke in nadzorujemo svoj sistem prek interneta z uporabo kanalov in spletnih strani, ki jih ponuja ThingSpeak. ThingSpeak "zbira" podatke s senzorjev, "analizira in vizualizira" podatke in "deluje" tako, da sproži reakcijo. Prej smo podrobno razložili pošiljanje podatkov v ThingSpeak, tam lahko preverite. Tu na kratko razlagamo uporabo ThingSpeak za to vremensko postajo Raspberry Pi.
Najprej morate ustvariti račun na spletnem mestu ThingSpeak in v njem ustvariti 'Nov kanal'. V novem kanalu morate določiti nekaj polj za podatke, ki jih želite spremljati, kot v tem projektu bomo ustvarili tri polja za podatke o vlažnosti, temperaturi in tlaku.
Zdaj kliknite zavihek "API ključi" in shranite ključe API Write and Read API, tukaj uporabljamo samo tipko Write. Ta ključ morate kopirati v spremenljivko 'key' v kodi.
Po njem kliknite »Uvoz / izvoz podatkov« in kopirajte URL za posodobitev vira kanala GET Request, ki je:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Zdaj potrebujemo ta 'URL za pridobitev zahteve za vir' v naši kodi Python, da odpremo "api.thingspeak.com" in nato podatke pošljemo z uporabo te zahteve za vir kot niz poizvedbe. Preden uporabnik pošlje podatke, mora v ta poizvedbeni niz vnesti podatke o temperaturi, vlažnosti in tlaku z uporabo spremenljivk v programu, preverite kodo na koncu tega članka.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (pritisk)
Delovanje DHT11 temelji na enožični serijski komunikaciji za pridobivanje podatkov iz DHT11. Tu smo uporabili knjižnico AdaFruit DHT11 za povezovanje DHT11 z Raspberry Pi. Raspberry Pi tukaj zbira podatke o vlažnosti in temperaturi iz DHT11 in atmosferskega tlaka s senzorja BMP180 ter jih nato pošlje na LCD 16x2 in strežnik ThingSpeak. ThingSpeak prikazuje podatke v obliki grafa, kot je prikazano spodaj:
Več o senzorju DHT11 in njegovem povezovanju z Arduinom lahko izveste tukaj.
Shema vezja:
Konfiguracija Raspberry Pi in program Python:
Tukaj za program uporabljamo jezik Python. Pred kodiranjem mora uporabnik konfigurirati Raspberry Pi. Preverite naše prejšnje vadnice za Začetek uporabe Raspberry Pi ter Namestitev in konfiguriranje OS Raspbian Jessie v Pi.
Najprej moramo namestiti datoteke knjižnice senzorjev Adafruit Python DHT za zagon tega projekta na Raspberry Pi. Za to moramo slediti danim ukazom:
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-bistven python-dev sudo python setup.py namestitev
Po tem mora uporabnik omogočiti Raspberry Pi I2C, tako da vstopi tudi v konfiguracijo programske opreme RPi:
sudo raspi-config
Nato pojdite na "Advance Options", izberite "I2C" in "Enable".
Programski del tega projekta ima zelo pomembno vlogo za izvajanje vseh operacij. Najprej vključimo vse potrebne knjižnice, inicializiramo spremenljivke in določimo nožice za LCD in 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……………..
V def glavni (): funkcija, ki je pod oznako za pošiljanje podatkov na strežnik in prikaz preko LCD, nenehno v medtem ko zanke.
def main (): print 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% key print "Počakaj….", medtem ko je True: (humi, temp) = readDHT () (tlak) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%' + "% sC% s"% (temp, pressure)) finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (pritisk) print finalURL s = urllib2.urlopen (finalURL); natisni humi + "" + temp + "" + pritisk s.close () time.sleep (10)
Za LCD se funkcija def lcd_init () uporablja za inicializacijo LCD-ja v štiri bitnem načinu, funkcija def lcdcmd (ch) se uporablja za pošiljanje ukaza na LCD, funkcija def lcddata (ch) pa za pošiljanje podatkov na LCD in def lcdstring (Str ) se uporablja za pošiljanje podatkovnega niza na LCD. Vse te funkcije lahko preverite v kodo, ki ste jo dobili pozneje.
Dana funkcija def readDHT () se uporablja za branje senzorja DHT11:
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
funkcija def readBmp180 se uporablja za branje tlaka s senzorja BM180. Senzor BM180 lahko daje tudi temperaturo, vendar smo ga tukaj uporabili samo za izračun tlaka.
def readBmp180 (addr = deviceAdd): value = bus.read_i2c_block_data (addr, regCall, 22) # Branje kalibracijskih podatkov # Pretvorba bajtnih podatkov v besedne vrednosti AC1 = convert1 (vrednost, 0) AC2 = convert1 (vrednost, 2) AC3 = convert1 (vrednost, 4) AC4 = pretvori2 (vrednost, 6)……………………..
To je torej osnovna vremenska postaja Raspberry Pi, jo lahko še razširite za merjenje različnih vremenskih parametrov, kot so hitrost vetra, temperatura tal, osvetljenost (lux), količina padavin, kakovost zraka itd.