Vochtigheid, temperatuur en druk zijn drie basisparameters om elk weerstation te bouwen en om de omgevingsomstandigheden te meten. We hebben eerder een mini-weerstation gebouwd met Arduino en deze keer breiden we het weerstation uit met Raspberry Pi. Dit op IoT gebaseerde project heeft tot doel de huidige vochtigheids-, temperatuur- en drukparameters op het LCD-scherm en op de internetserver weer te geven met behulp van Raspberry Pi, waardoor het een Raspberry Pi-weerstation is. U kunt deze opstelling overal installeren en kunt de weersomstandigheden van die plaats overal ter wereld via internet volgen, het toont niet alleen de huidige gegevens, maar kan ook de waarden uit het verleden weergeven in de vorm van grafieken.
We hebben de DHT11-vochtigheids- en temperatuursensor gebruikt voor het meten van de temperatuur en de BM180-druksensormodule voor het meten van luchtdruk. Deze Celsius-schaal Thermometer en percentageschaal Vochtigheidsmeter geeft de omgevingstemperatuur en vochtigheid weer via een LCD-scherm en de barometrische druk wordt weergegeven in millibar of hPa (hectopascal). Al deze gegevens worden naar de ThingSpeak- server gestuurd voor live monitoring van overal ter wereld via internet. Controleer de demonstratievideo en het Python-programma aan het einde van deze tutorial.
Working and ThingSpeak Setup:
Dit op IoT gebaseerde project heeft vier secties. Ten eerste detecteert de DHT11-sensor de vochtigheids- en temperatuurgegevens en meet de BM180-sensor de atmosferische druk. Ten tweede leest Raspberry Pi de output van de DHT11-sensormodule met behulp van het enkeldraadsprotocol en de BM180-druksensoroutput met behulp van het I2C-protocol en extraheert beide sensorwaarden in een geschikt percentage (vochtigheid), Celsius-schaal (temperatuur), hectoPascal of millibar (druk). Ten derde worden deze waarden naar de ThingSpeak-server gestuurd met behulp van de ingebouwde Wi-Fi van Raspberry Pi 3. En tot slot analyseert ThingSpeak de gegevens en toont deze in een grafiekvorm. Een LCD wordt ook gebruikt om deze waarden lokaal weer te geven.
ThingSpeak biedt een zeer goede tool voor op IoT gebaseerde projecten. Door de ThingSpeak-website te gebruiken, kunnen we onze gegevens volgen en ons systeem beheren via internet, met behulp van de kanalen en webpagina's die door ThingSpeak worden geleverd. ThingSpeak 'Verzamelt' de data van de sensoren, 'analyseert en visualiseert' de data en 'handelt' door een reactie op gang te brengen. We hebben eerder in detail uitgelegd over het verzenden van gegevens naar ThingSpeak, je kunt daar kijken. Hier leggen we kort uit om ThingSpeak te gebruiken voor dit Raspberry Pi-weerstation.
Eerst moet u een account aanmaken op de ThingSpeak-website en daarin een 'Nieuw kanaal' maken. In een nieuw kanaal moet u enkele velden definiëren voor de gegevens die u wilt bewaken, zoals in dit project zullen we drie velden maken voor gegevens over vochtigheid, temperatuur en druk.
Klik nu op het tabblad 'API-sleutels' en sla de API-sleutels voor schrijven en lezen op, hier gebruiken we alleen de schrijfsleutel. U moet deze sleutel kopiëren in de variabele 'sleutel' in de code.
Klik daarna op 'Data Import / Export' en kopieer de Update Channel Feed GET Request URL, die is:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Nu hebben we deze 'Feed Get Request URL' nodig in onze Python-code om "api.thingspeak.com" te openen en vervolgens gegevens te verzenden met behulp van dit Feed Request als queryreeks. En voordat u gegevens verzendt, moet de gebruiker de temperatuur-, vochtigheids- en drukgegevens invoeren in deze query String met behulp van variabelen in het programma, bekijk de code aan het einde van dit artikel.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (druk)
De werking van DHT11 is gebaseerd op enkeldraads seriële communicatie voor het ophalen van gegevens van DHT11. Hier hebben we de AdaFruit DHT11-bibliotheek gebruikt om DHT11 te koppelen aan Raspberry Pi. Raspberry Pi verzamelt hier de vochtigheids- en temperatuurgegevens van DHT11 en atmosferische druk van de BMP180-sensor en stuurt deze vervolgens naar 16x2 LCD- en ThingSpeak-server. ThingSpeak geeft de gegevens weer in de vorm van een grafiek, zoals hieronder:
U kunt hier meer leren over de DHT11-sensor en de interface met Arduino.
Schakelschema:
Raspberry Pi-configuratie en Python-programma:
We gebruiken hier Python-taal voor het programma. Voordat de gebruiker kan coderen, moet hij de Raspberry Pi configureren. Je kunt onze eerdere tutorials bekijken voor Aan de slag met Raspberry Pi en Raspbian Jessie OS installeren en configureren in Pi.
Allereerst moeten we Adafruit Python DHT Sensor Library-bestanden installeren om dit project op Raspberry Pi uit te voeren. Om dit te doen, moeten we de gegeven opdrachten volgen:
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 installeren
Hierna moet de gebruiker Raspberry Pi I2C inschakelen door naar RPi Software Configuration Too te gaan:
sudo raspi-config
Ga dan naar 'Advance Options', selecteer 'I2C' en 'Enable' it.
Het programmeergedeelte van dit project speelt een zeer belangrijke rol bij het uitvoeren van alle bewerkingen. Allereerst nemen we alle vereiste bibliotheken op, initialiseren we variabelen en definiëren we pinnen voor LCD en DHT11.
import sys importeer RPi.GPIO als GPIO import os import Adafruit_DHT importeer urllib2 importeer smbus importtijd uit ctypes import c_short #Register Address regCall = 0xAA……………..
In def main (): functie wordt onderstaande code gebruikt om de gegevens naar de server te sturen en deze continu op het LCD weer te geven in de while- lus.
def main (): print 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% key print "Wait…." while True: (humi, temp) = readDHT () (druk) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%' + "% sC% s"% (temp, pressure)) finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (druk) print finalURL s = urllib2.urlopen (finalURL); print humi + "" + temp + "" + druk s.close () time.sleep (10)
Voor LCD wordt def lcd_init () functie gebruikt om LCD te initialiseren in vier bit modus, def lcdcmd (ch) functie wordt gebruikt voor het verzenden van commando's naar LCD, def lcddata (ch) functie wordt gebruikt voor het verzenden van data naar LCD en def lcdstring (Str ) functie wordt gebruikt om datastring naar LCD te sturen. U kunt al deze functies controleren in Code achteraf.
Gegeven def readDHT () -functie wordt gebruikt voor het lezen van de DHT11-sensor:
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
def readBmp180- functie wordt gebruikt voor het aflezen van de druk van de BM180-sensor. BM180 sensor kan ook temperatuur geven maar hier hebben we deze alleen gebruikt voor het berekenen van de druk.
def readBmp180 (addr = deviceAdd): value = bus.read_i2c_block_data (addr, regCall, 22) # Lees kalibratiegegevens # Converteer bytegegevens naar woordwaarden AC1 = convert1 (waarde, 0) AC2 = convert1 (waarde, 2) AC3 = convert1 (waarde, 4) AC4 = convert2 (waarde, 6)……………………..
Dit is dus het basisweerstation van de Raspberry Pi, je kunt het verder uitbreiden om verschillende weersgerelateerde parameters te meten, zoals windsnelheid, bodemtemperatuur, verlichtingssterkte (lux), regenval, luchtkwaliteit etc.