Wilgotność, temperatura i ciśnienie to trzy podstawowe parametry do budowy dowolnej stacji pogodowej i pomiaru warunków środowiskowych. Wcześniej zbudowaliśmy mini Stację Pogodową wykorzystując Arduino i tym razem rozbudowujemy stację pogodową o Raspberry Pi. Ten projekt oparty na IoT ma na celu pokazanie aktualnych parametrów wilgotności, temperatury i ciśnienia na wyświetlaczu LCD, a także na serwerze internetowym za pomocą Raspberry Pi, co czyni go stacją pogodową Raspberry Pi. Możesz zainstalować tę konfigurację w dowolnym miejscu i możesz monitorować warunki pogodowe tego miejsca z dowolnego miejsca na świecie przez Internet, nie tylko pokaże bieżące dane, ale może również pokazać poprzednie wartości w postaci wykresów.
Zastosowaliśmy czujnik wilgotności i temperatury DHT11 do pomiaru temperatury oraz moduł czujnika ciśnienia BM180 do pomiaru ciśnienia barometrycznego. Ten termometr w skali Celsjusza i skala procentowa Miernik wilgotności wyświetla temperaturę i wilgotność otoczenia na wyświetlaczu LCD, a ciśnienie barometryczne jest wyświetlane w milibarach lub hPa (hektopaskalach). Wszystkie te dane są przesyłane do serwera ThingSpeak w celu monitorowania na żywo z dowolnego miejsca na świecie przez Internet. Sprawdź film demonstracyjny i program w języku Python podane na końcu tego samouczka.
Konfiguracja robocza i ThingSpeak:
Ten projekt oparty na IoT ma cztery sekcje. Po pierwsze, czujnik DHT11 wykrywa dane dotyczące wilgotności i temperatury, a czujnik BM180 mierzy ciśnienie atmosferyczne. Po drugie, Raspberry Pi odczytuje wyjście modułu czujnika DHT11 za pomocą protokołu pojedynczego przewodu i wyjście czujnika ciśnienia BM180 za pomocą protokołu I2C i wyodrębnia wartości obu czujników do odpowiedniej liczby w procentach (wilgotność), skali Celsjusza (temperatura), hektopaskalach lub milibarach (ciśnienie). Po trzecie, wartości te są wysyłane do serwera ThingSpeak za pomocą wbudowanego Wi-Fi Raspberry Pi 3. I wreszcie ThingSpeak analizuje dane i przedstawia je w formie wykresu. Wyświetlacz LCD służy również do lokalnego wyświetlania tych wartości.
ThingSpeak zapewnia bardzo dobre narzędzie do projektów opartych na IoT. Korzystając ze strony internetowej ThingSpeak, możemy monitorować nasze dane i kontrolować nasz system przez Internet, korzystając z kanałów i stron internetowych udostępnianych przez ThingSpeak. ThingSpeak „zbiera” dane z czujników, „analizuje i wizualizuje” dane i „działa”, wywołując reakcję. Wcześniej szczegółowo wyjaśniliśmy przesyłanie danych do ThingSpeak, możesz tam sprawdzić. Tutaj krótko wyjaśniamy, jak używać ThingSpeak dla tej stacji pogodowej Raspberry Pi.
Najpierw musisz założyć konto na stronie ThingSpeak i utworzyć w niej „Nowy kanał”. W nowym kanale musisz zdefiniować kilka pól dla danych, które chcesz monitorować, tak jak w tym projekcie utworzymy trzy pola dla danych wilgotności, temperatury i ciśnienia.
Teraz kliknij zakładkę „Klucze API” i zapisz klucze API zapisu i odczytu, tutaj używamy tylko klucza zapisu. Musisz skopiować ten klucz do zmiennej „klucz” w Kodzie.
Następnie kliknij `` Import / eksport danych '' i skopiuj adres URL żądania aktualizacji kanału kanału GET, który jest:
api.thingspeak.com/update?api_key=30BCDSRQ52AOI3UA&field1=0
Teraz potrzebujemy tego „Feed Get Request URL” w naszym kodzie Pythona, aby otworzyć „api.thingspeak.com”, a następnie wysłać dane, używając tego żądania jako ciągu zapytania. Przed wysłaniem danych użytkownik musi wprowadzić dane dotyczące temperatury, wilgotności i ciśnienia w tym zapytaniu. Ciąg znaków używając zmiennych w programie, sprawdź w kodzie na końcu tego artykułu.
URL = 'https://api.thingspeak.com/update?api_key=%s'% key finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (ciśnienie)
Działanie DHT11 opiera się na jednoprzewodowej komunikacji szeregowej do pobierania danych z DHT11. Tutaj użyliśmy biblioteki AdaFruit DHT11 do połączenia DHT11 z Raspberry Pi. Raspberry Pi zbiera tutaj dane dotyczące wilgotności i temperatury z DHT11 i ciśnienia atmosferycznego z czujnika BMP180, a następnie wysyła je do wyświetlacza LCD 16x2 i serwera ThingSpeak. ThingSpeak wyświetla dane w formie wykresu, jak poniżej:
Możesz dowiedzieć się więcej o czujniku DHT11 i jego połączeniu z Arduino tutaj.
Schemat obwodu:
Konfiguracja Raspberry Pi i program w Pythonie:
W programie używamy języka Python. Przed kodowaniem użytkownik musi skonfigurować Raspberry Pi. Możesz sprawdzić nasze poprzednie samouczki dotyczące rozpoczęcia pracy z Raspberry Pi oraz instalowania i konfigurowania systemu operacyjnego Raspbian Jessie w Pi.
Przede wszystkim musimy zainstalować pliki Adafruit Python DHT Sensor Library, aby uruchomić ten projekt na Raspberry Pi. Aby to zrobić, musimy wykonać podane polecenia:
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
Następnie użytkownik musi włączyć Raspberry Pi I2C, przechodząc do konfiguracji oprogramowania RPi:
sudo raspi-config
Następnie przejdź do „Opcje zaawansowane”, wybierz „I2C” i „Włącz”.
Część programowa tego projektu odgrywa bardzo ważną rolę przy wykonywaniu wszystkich operacji. Przede wszystkim dołączamy wszystkie wymagane biblioteki, zmienne inicjalizacyjne oraz definiujemy piny dla LCD i DHT11.
import sys import RPi.GPIO as GPIO import os import Adafruit_DHT import urllib2 import smbus czas importu z ctypes import c_short #Register Address regCall = 0xAA……………..
W def main (): funkcja, poniżej kod jest wykorzystywany do wysyłania danych do serwera i wyświetla go na ekranie LCD, w sposób ciągły podczas pętli.
def main (): print 'System Ready…' URL = 'https://api.thingspeak.com/update?api_key=%s'% key print "Wait…." while True: (humi, temp) = readDHT () (ciśnienie) = readBmp180 () lcdcmd (0x01) lcdstring ("Humi # Temp # P (hPa)") lcdstring (humi + '%' + "% sC% s"% (temp, ciśnienie)) finalURL = URL + "& field1 =% s & field2 =% s"% (humi, temp) + "& field3 =% s"% (ciśnienie) print finalURL s = urllib2.urlopen (finalURL); print humi + "" + temp + "" + ciśnienie s.close () time.sleep (10)
W przypadku LCD, funkcja def lcd_init () służy do inicjalizacji LCD w trybie czterobitowym, funkcja def lcdcmd (ch) służy do wysyłania poleceń do LCD, funkcja def lcddata (ch) służy do wysyłania danych do LCD, a def lcdstring (Str. ) służy do wysyłania ciągu danych do LCD. Wszystkie te funkcje możesz sprawdzić w podanym później kodzie.
Podana funkcja def readDHT () służy do odczytu czujnika DHT11:
def readDHT (): humi, temp = Adafruit_DHT.read_retry (Adafruit_DHT.DHT11, DHTpin) return (str (int (humi)), str (int (temp)))
Funkcja def readBmp180 służy do odczytu ciśnienia z czujnika BM180. Czujnik BM180 może również podać temperaturę, ale tutaj użyliśmy go tylko do obliczenia ciśnienia.
def readBmp180 (addr = deviceAdd): value = bus.read_i2c_block_data (addr, regCall, 22) # Odczyt danych kalibracyjnych # Konwersja danych bajtowych na wartości słów AC1 = convert1 (value, 0) AC2 = convert1 (value, 2) AC3 = convert1 (wartość, 4) AC4 = Convert2 (wartość, 6)……………………..
Jest to więc podstawowa stacja pogodowa Raspberry Pi, którą można dodatkowo rozszerzyć, aby mierzyć różne parametry pogodowe, takie jak prędkość wiatru, temperatura gleby, natężenie oświetlenia (luksy), opady, jakość powietrza itp.