Spisu treści:

Stacja pogodowa IoT z RPi i ESP8266: 10 kroków
Stacja pogodowa IoT z RPi i ESP8266: 10 kroków

Wideo: Stacja pogodowa IoT z RPi i ESP8266: 10 kroków

Wideo: Stacja pogodowa IoT z RPi i ESP8266: 10 kroków
Wideo: Mądry dom za grosze #6 - Inteligentna stacja pogodowa działająca po wifi | DIY 2024, Listopad
Anonim
Stacja pogodowa IoT z RPi i ESP8266
Stacja pogodowa IoT z RPi i ESP8266

W poprzednich samouczkach bawiliśmy się NodeMCU, czujnikami i uczyliśmy się przechwytywania i rejestrowania danych na ThingSpeak (platformie Internetu rzeczy (IoT), która umożliwia zbieranie i przechowywanie danych z czujników w chmurze oraz tworzenie aplikacji IoT):

ŁATWOŚĆ IOT: ZDALNE PRZECHWYTYWANIE DANYCH POGODOWYCH: UV I POWIETRZA TEMPERATURY I WILGOTNOŚCI

W tym nowym samouczku dowiemy się, jak zrobić to samo, ale w tym czasie, używając Raspberry Pi do przechwytywania danych z kilku różnych czujników, a także odkrywania różnych sposobów komunikacji między urządzeniami a siecią:

Czujniki i typ komikacji:

  • DHT22 (Temperatura i Wilgotność) ==> Komunikacja cyfrowa
  • BMP180 (temperatura i ciśnienie) ==> Protokół I2C
  • DS18B20 (temperatura) ==> protokół 1-Wire

Schemat blokowy pokazuje, co otrzymamy na końcu z tym projektem:

Obraz
Obraz

Krok 1: BoM - zestawienie materiałów

  1. Raspberry Pi V3 - 32,00 USD
  2. Czujnik temperatury i wilgotności względnej DHT22 - 9,95 USD
  3. Rezystor 4K7 ohm
  4. Wodoodporny czujnik temperatury DS18B20 - 5,95 USD
  5. Rezystor 4K7 ohm
  6. Czujnik ciśnienia barometrycznego, temperatury i wysokości BMP180 – 6,99 USD

Krok 2: Instalacja czujnika temperatury i wilgotności

Instalowanie czujnika temperatury i wilgotności
Instalowanie czujnika temperatury i wilgotności

Pierwszym zainstalowanym czujnikiem będzie DHT22 do rejestrowania danych dotyczących temperatury powietrza i wilgotności względnej. Strona ADAFRUIT zawiera świetne informacje na temat tych czujników. Poniżej kilka informacji stamtąd pobranych:

Przegląd

Niedrogie czujniki temperatury i wilgotności DHT są bardzo proste i powolne, ale świetnie nadają się dla hobbystów, którzy chcą wykonać podstawowe rejestrowanie danych. Czujniki DHT składają się z dwóch części: pojemnościowego czujnika wilgotności i termistora. Wewnątrz znajduje się również bardzo podstawowy układ scalony, który dokonuje konwersji analogowo-cyfrowej i wypluwa sygnał cyfrowy z temperaturą i wilgotnością. Sygnał cyfrowy jest dość łatwy do odczytania za pomocą dowolnego mikrokontrolera.

DHT22 Główne cechy:

  • Niska cena
  • Zasilanie od 3 do 5 V i we/wy
  • Maksymalne natężenie prądu 2,5mA podczas konwersji (podczas żądania danych)
  • Dobry dla odczytów wilgotności 0-100% z dokładnością 2-5%
  • Dobry dla odczytów temperatury od -40 do 125 ° C ± 0,5 ° C dokładność
  • Częstotliwość próbkowania nie większa niż 0,5 Hz (raz na 2 sekundy)
  • Rozmiar korpusu 15,1 mm x 25 mm x 7,7 mm
  • 4 piny z odstępem 0,1"

Gdy zwykle będziesz używać czujnika na odległościach mniejszych niż 20 m, rezystor 4K7 omów powinien być podłączony między pinami Data i VCC. Pin danych wyjściowych DHT22 zostanie podłączony do Raspberry GPIO 16. Sprawdź powyższy schemat elektryczny, podłączając czujnik do pinów RPi jak poniżej:

  1. Pin 1 - Vcc ==> 3,3 V
  2. Pin 2 - Dane ==> GPIO 16
  3. Pin 3 - brak połączenia
  4. Pin 4 - Gnd ==> Gnd

Nie zapomnij zainstalować rezystora 4K7 ohm między Vcc a pinami danych

Po podłączeniu czujnika musimy również zainstalować jego bibliotekę na naszym RPi.

Instalowanie biblioteki DHT:

Na swoim Raspberry, zaczynając od /home, przejdź do /Documents

CD Dokumenty

Utwórz katalog, aby zainstalować bibliotekę i przejdź do niego:

mkdir DHT22_Sensor

cd DHT22_Sensor

W przeglądarce przejdź do Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Pobierz bibliotekę, klikając łącze pobierania zip po prawej stronie i rozpakuj archiwum w ostatnio utworzonym folderze Raspberry Pi. Następnie przejdź do katalogu biblioteki (podfolder tworzony automatycznie po rozpakowaniu pliku) i wykonaj polecenie:

sudo python3 setup.py zainstalować

Otwórz program testowy (DHT22_test.py) z mojego GITHUB

importuj Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 wilgotność, temperatura = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin) jeśli wilgotność nie jest Brak i temperatura nie jest Brak: print('Temp={0:0.1f}*C Wilgotność={1:0.1 f}%'.format(temperatura, wilgotność)) else: print('Nie udało się odczytać. Spróbuj ponownie!')

Uruchom program poleceniem:

python3 DHT22_test.py

Poniższy ekran drukowania terminala pokazuje wynik.

Obraz
Obraz

Krok 3: Instalacja DS18B20 - czujnik temperatury

Instalowanie DS18B20 - Czujnik temperatury
Instalowanie DS18B20 - Czujnik temperatury
Instalowanie DS18B20 - Czujnik temperatury
Instalowanie DS18B20 - Czujnik temperatury

Przegląd czujnika:

W tym samouczku użyjemy wodoodpornej wersji czujnika DS18B20. Jest bardzo przydatny do zdalnej temperatury w wilgotnych warunkach, na przykład na wilgotnej glebie. Czujnik jest izolowany i może wykonywać pomiary do 125oC (Adafrut nie zaleca używania go powyżej 100oC ze względu na płaszcz kabla z PVC).

DS18B20 to czujnik cyfrowy, dzięki czemu można go używać nawet na duże odległości! Te 1-przewodowe cyfrowe czujniki temperatury są dość precyzyjne (±0,5°C w dużym zakresie) i mogą zapewnić do 12 bitów precyzji z wbudowanego konwertera cyfrowo-analogowego. Działają świetnie z NodeMCU za pomocą jednego cyfrowego pinu, a nawet można podłączyć wiele pinów do tego samego pinu, każdy ma unikalny 64-bitowy identyfikator wypalony w fabryce, aby je odróżnić.

Czujnik pracuje od 3,0 do 5,0V, co oznacza, że może być zasilany bezpośrednio z 3,3V z jednego z pinów Raspberry (1 lub 17).

Czujnik posiada 3 przewody:

  • Czarny: GND
  • Czerwony: VCC
  • Żółty: dane 1-przewodowe

Tutaj możesz znaleźć pełne dane: Arkusz danych DS18B20

Instalacja czujnika:

Postępuj zgodnie z powyższym schematem i wykonaj połączenia:

  • Vcc ==> 3,3 V
  • Gnd ==> Gnd
  • Dane ==> GPIO 4 (domyślnie dla biblioteki)

Instalowanie biblioteki Pythona:

Następnie zainstalujmy bibliotekę Pythona, która obsłuży czujnik:

sudo pip3 zainstaluj w1thermsensor

Przed uruchomieniem skryptu w celu przetestowania czujnika, sprawdź, czy interfejs „1-Wire” jest włączony w twoim RPi (patrz powyżej zrzut ekranu)

Nie zapomnij zrestartować swojego RPi po zmianie jego konfiguracji

Testowanie czujnika:

Do testowania czujnika można użyć prostego skryptu Pythona:

czas importu

from w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor() while True: temperature = ds18b20Sensor.get_temperature() print("Temperatura wynosi %s Celsjusza" % temperature) time.sleep(1)

Krok 4: Instalacja BMP180

Instalowanie BMP180
Instalowanie BMP180
Instalowanie BMP180
Instalowanie BMP180
Instalowanie BMP180
Instalowanie BMP180

Przegląd czujnika:

BMP180 jest następcą BMP085, nowej generacji precyzyjnych cyfrowych czujników ciśnienia do zastosowań konsumenckich. Elektronika BMP180 o bardzo niskim poborze mocy i niskim napięciu jest zoptymalizowana do użytku w telefonach komórkowych, urządzeniach PDA, urządzeniach nawigacyjnych GPS i sprzęcie zewnętrznym. Przy niskim poziomie hałasu wynoszącym zaledwie 0,25 m przy krótkim czasie konwersji, BMP180 oferuje doskonałą wydajność. Interfejs I2C pozwala na łatwą integrację systemu z mikrokontrolerem. BMP180 jest oparty na technologii piezorezystancyjnej zapewniającej odporność EMC, wysoką dokładność i liniowość, a także długoterminową stabilność.

Kompletny arkusz danych BMP można znaleźć tutaj: BMP180 - Cyfrowy czujnik ciśnienia

Instalacja czujnika: Postępuj zgodnie z powyższym schematem i wykonaj połączenia:

  • Vin ==> 3,3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

Włączanie interfejsu I2C

Przejdź do konfiguracji RPi i potwierdź, że interfejs I2C jest włączony. Jeśli nie, włącz go i uruchom ponownie RPi.

Korzystanie z BMP180

Jeśli wszystko zostało zainstalowane w porządku i wszystko zostało podłączone w porządku, jesteś teraz gotowy, aby włączyć Pi i zacząć widzieć, co BMP180 mówi Ci o otaczającym Cię świecie.

Pierwszą rzeczą do zrobienia jest sprawdzenie, czy Pi widzi Twój BMP180. Spróbuj wykonać następujące czynności w oknie terminala:

sudo i2cdetect -y 1

Jeśli polecenie zadziałało, powinieneś zobaczyć coś podobnego do powyższego zrzutu ekranu terminala, pokazującego, że BMP180 jest na kanale '77'.

Instalowanie biblioteki BMP180:

Utwórz katalog, aby zainstalować bibliotekę:

mkdir BMP180_Sensorcd BMP180_Sensor

W przeglądarce przejdź do Adafruit GIThub:

github.com/adafruit/Adafruit_Python_BMP

Pobierz bibliotekę, klikając łącze pobierania po prawej stronie i rozpakuj archiwum w utworzonym folderze Raspberry Pi. Następnie przejdź do utworzonego podfolderu i wykonaj następujące polecenie w katalogu biblioteki:

sudo python3 setup.py zainstalować

Otwórz swoje IDE Pythona i utwórz program testowy i nazwij go, na przykład BMP180Test.py

importuj Adafruit_BMP. BMP085 jako BMP085sensor = BMP085. BMP085() print('Temp = {0:0.2f} *C'.format(sensor.read_temperature())) print('Ciśnienie = {0:0.2f} Pa'. format(sensor.read_pressure())) print('Wysokość = {0:0.2f} m'.format(sensor.read_altitude())) print('Ciśnienie na poziomie morza = {0:0.2f} Pa'.format(czujnik.read_sealevel_pressure()))

Wykonaj program testowy:

python3 BMP180Test.py

Powyższy ekran drukowania terminala pokazuje wynik.

Zauważ, że ciśnienie jest podawane w Pa (paskalach). Zobacz następny krok, aby lepiej zrozumieć to urządzenie.

Krok 5: Pomiar pogody i wysokości za pomocą BMP180

Pomiar pogody i wysokości za pomocą BMP180
Pomiar pogody i wysokości za pomocą BMP180

Poświęćmy trochę czasu, aby zrozumieć trochę więcej o tym, co otrzymamy dzięki odczytom BMP. Możesz pominąć tę część samouczka lub wrócić później.

Jeśli chcesz dowiedzieć się więcej o odczytach czujników, przejdź do tego wspaniałego samouczka:

BMP180 został zaprojektowany do dokładnego pomiaru ciśnienia atmosferycznego. Ciśnienie atmosferyczne zmienia się zarówno w zależności od pogody, jak i wysokości.

Co to jest ciśnienie atmosferyczne?

Definicja ciśnienia atmosferycznego to siła, jaką powietrze wokół ciebie wywiera na wszystko. Ciężar gazów w atmosferze tworzy ciśnienie atmosferyczne. Powszechną jednostką ciśnienia jest „funty na cal kwadratowy” lub psi. Posłużymy się tutaj notacją międzynarodową, czyli niutonami na metr kwadratowy, które nazywamy paskalami (Pa).

Gdybyś wziął 1 cm słup powietrza ważyłby około 1 kg

Ta waga, naciskając na podstawę tej kolumny, wytwarza ciśnienie atmosferyczne, które możemy zmierzyć czujnikami takimi jak BMP180. Ponieważ kolumna powietrza o szerokości cm waży około 1 kg, wynika z tego, że średnie ciśnienie na poziomie morza wynosi około 101325 paskali, lub lepiej, 1013,25 hPa (1 hPa jest również znane jako milibar - mbar). Spadnie o około 4% na każde 300 metrów wzniesienia. Im wyżej jesteś, tym mniejsze ciśnienie zobaczysz, ponieważ kolumna na szczycie atmosfery jest znacznie krótsza i dlatego waży mniej. Warto to wiedzieć, ponieważ mierząc ciśnienie i wykonując obliczenia, możesz określić swoją wysokość.

Ciśnienie powietrza na 3810 metrach jest tylko o połowę niższe niż na poziomie morza.

BMP180 podaje ciśnienie bezwzględne w paskalach (Pa). Jeden paskal to bardzo mały nacisk, w przybliżeniu taki, jaki będzie wywierać na stole kartka papieru. Częściej zobaczysz pomiary w hektopaskalach (1 hPa = 100 Pa). Wykorzystywana tutaj biblioteka dostarcza na wyjściu wartości zmiennoprzecinkowe w hPa, które również są równe jednemu milibarowi (mbar).

Oto kilka konwersji na inne jednostki ciśnienia:

  • 1 hPa = 100 Pa = 1 mbar = 0,001 bar
  • 1 hPa = 0,75006168 Torr
  • 1 hPa = 0,01450377 psi (funty na cal kwadratowy)
  • 1 hPa = 0,02953337 inHg (cale słupa rtęci)
  • 1 hpa = 0,00098692 atm (atmosfera standardowa)

Wpływ temperatury

Ponieważ temperatura wpływa na gęstość gazu, gęstość wpływa na masę gazu, a masa na ciśnienie (uuuu), ciśnienie atmosferyczne zmienia się dramatycznie wraz z temperaturą. Piloci znają to jako „wysokość gęstości”, co ułatwia start w zimny dzień niż w upalny, ponieważ powietrze jest gęstsze i ma większy efekt aerodynamiczny. Aby skompensować temperaturę, BMP180 zawiera dość dobry czujnik temperatury oraz czujnik ciśnienia.

Aby wykonać odczyt ciśnienia, najpierw wykonujesz odczyt temperatury, a następnie łączysz go z surowym odczytem ciśnienia, aby uzyskać ostateczny pomiar ciśnienia z kompensacją temperatury. (Biblioteka bardzo to ułatwia.)

Pomiar ciśnienia bezwzględnego

Jeśli Twoja aplikacja wymaga pomiaru ciśnienia bezwzględnego, wszystko, co musisz zrobić, to uzyskać odczyt temperatury, a następnie wykonać odczyt ciśnienia (szczegóły znajdziesz na przykładowym szkicu). Ostateczny odczyt ciśnienia będzie w hPa = mbar. Jeśli chcesz, możesz przekonwertować to na inną jednostkę, korzystając z powyższych współczynników konwersji.

Pamiętaj, że bezwzględne ciśnienie atmosfery będzie się różnić zarówno w zależności od wysokości, jak i aktualnych wzorców pogodowych, które są przydatne do pomiaru.

Obserwacje pogodowe

Ciśnienie atmosferyczne w dowolnym miejscu na Ziemi (lub gdziekolwiek z atmosferą) nie jest stałe. Złożona interakcja między obrotem Ziemi, nachyleniem osi i wieloma innymi czynnikami powoduje przemieszczanie się obszarów o wyższym i niższym ciśnieniu, co z kolei powoduje zmiany pogody, które obserwujemy każdego dnia. Obserwując zmiany ciśnienia, możesz przewidzieć krótkotrwałe zmiany pogody. Na przykład spadek ciśnienia zwykle oznacza deszczową pogodę lub zbliżającą się burzę (wprowadza się system niskiego ciśnienia). Rosnące ciśnienie zwykle oznacza, że zbliża się bezchmurna pogoda (przemieszcza się system wysokiego ciśnienia). Pamiętaj jednak, że ciśnienie atmosferyczne również zmienia się wraz z wysokością. Ciśnienie bezwzględne w moim domu, Lo Barnechea w Chile (wysokość 950 m) zawsze będzie niższe niż ciśnienie bezwzględne na przykład w San Francisco (mniej niż 2 metry, prawie poziom morza). Gdyby stacje pogodowe po prostu podawały swoje ciśnienie bezwzględne, trudno byłoby bezpośrednio porównać pomiary ciśnienia z jednej lokalizacji do drugiej (a prognozy pogody na dużą skalę zależą od pomiarów z jak największej liczby stacji).

Aby rozwiązać ten problem, stacje pogodowe zawsze usuwają wpływ wysokości ze swoich odczytów ciśnienia przez matematyczne dodanie równoważnego stałego ciśnienia, aby wyglądało to tak, jakby odczyt został wykonany na poziomie morza. Kiedy to zrobisz, wyższy odczyt w San Francisco niż Lo Barnechea zawsze będzie wynikał z warunków pogodowych, a nie z powodu wysokości.

W tym celu w bibliotece znajduje się funkcja o nazwie poziom morza(P, A). Pobiera ciśnienie bezwzględne (P) w hPa i aktualną wysokość stacji (A) w metrach i usuwa wpływ wysokości z ciśnienia. Możesz użyć wyjścia tej funkcji, aby bezpośrednio porównać odczyty pogody z innymi stacjami na całym świecie.

Określanie wysokości

Ponieważ ciśnienie zmienia się wraz z wysokością, możesz użyć czujnika ciśnienia do pomiaru wysokości (z kilkoma zastrzeżeniami). Średnie ciśnienie atmosfery na poziomie morza wynosi 1013,25 hPa (lub mbar). To spada do zera, gdy wspinasz się w kierunku próżni kosmicznej. Ponieważ krzywa tego spadku jest dobrze zrozumiana, można obliczyć różnicę wysokości między dwoma pomiarami ciśnienia (p i p0) za pomocą specjalnego równania.

Jeśli użyjesz ciśnienia na poziomie morza (1013,25 hPa) jako ciśnienia bazowego (p0), wynikiem równania będzie Twoja aktualna wysokość nad poziomem morza. W bibliotece znajduje się funkcja o nazwie height(P, P0), która pozwala uzyskać „obliczoną wysokość”.

Powyższe wyjaśnienie pochodzi z samouczka BMP 180 Sparkfun.

Krok 6: Kompletny sprzęt komputerowy

Kompletny sprzęt
Kompletny sprzęt

Krok 7: Wysyłanie danych do ThingSpeak

Wysyłanie danych do ThingSpeak
Wysyłanie danych do ThingSpeak

W tym momencie dowiedzieliśmy się, jak przygotować RPi do przechwytywania danych ze wszystkich 3 czujników, drukując je na terminalu. Teraz nadszedł czas, aby zobaczyć, jak przesłać te dane do platformy IoT, ThingSpeak.

Zaczynajmy!

Najpierw musisz mieć konto na ThinkSpeak.com

Postępuj zgodnie z instrukcjami, aby utworzyć kanał i zanotuj swój identyfikator kanału i zapisz klucz API

Pobierz skrypt Pythona z mojego GitHub: localData ToTS_v1_EXT.py

Skomentujmy najważniejsze części kodu:

Najpierw zaimportujmy bibliotekę ThingSpeak, zdefiniujmy klienta WiFi i zdefiniujmy poświadczenia lokalnego routera i ThinkSpeak:

importuj rzeczową mowę

Istnieje kilka sposobów komunikacji z ThingSpeak, najprostszym sposobem byłoby użycie biblioteki klienckiej dla API thingspeak.com opracowanej przez Mikołaja Chwaliza i Keitha Ellisa.

Bibliotekę można pobrać ze strony https://github.com/mchwalisz/thingspeak lub za pomocą PIP na terminalu:

sudo pip3 zainstaluj rzeczypeak

Następnie w skrypcie zaktualizuj dane logowania do kanału ThingSpeak

chId = 9999999 # Wprowadź swój identyfikator kanału

tsKey='ENTER Z KLUCZEM ZAPISU KANAŁU' tsUrl='https://api.thingspeak.com/update' ts = thingspeak. Channel(chId, tsUrl, tsKey)

Teraz zainicjujmy 3 czujniki:

# Biblioteka DS18B20 1-Wire

z w1thermsensor import W1ThermSensor ds18b20Sensor = W1ThermSensor() # Domyślnie GPIO 4 jest używane przez bibliotekę # DHT22 Library import Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 library import Adafruit_BMP. BMP085 jako BMP18085 jako BMP085(). Powinieneś zdefiniować rzeczywistą wysokość, na której znajduje się Twoja Stacja Pogodowa, aktualizując zmienną globalną „altReal”. W moim przypadku moja Stacja znajduje się na wysokości 950m n.p.m.

globalny altReal

altReal = 950

Po wprowadzeniu rzeczywistej wysokości stacji jako danych wejściowych możemy uzyskać ciśnienie bezwzględne, ciśnienie na poziomie morza, temperaturę i wysokość za pomocą funkcji bmp180GetData(altitude):

def bmp180GetData(wysokość):

temp = bmp180Sensor.read_temperature() pres = bmp180Sensor.read_pressure() alt=bmp180Sensor.read_altitude() presSeaLevel = pres / pow(1.0 - height/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100, 2) # ciśnienie bezwzględne w hPa (lub mbar) alt=round (alt) presSeaLevel = round (presSeaLevel/100, 2) # ciśnienie bezwzględne w hPa (lub mbar) temp. powrotu, pres, alt, presSeaLevel

Funkcja getLocalData(), zwróci wszystkie lokalne dane, które przechwyci nasza stacja:

def pobierzDaneLokalne():

global timeString global humLab global tempExt global tempLab global pressSL global altLab global presAbs # Pobierz czas czytania teraz = datetime.datetime.now() timeString = now.strftime("%Y-%m-%d %H:%M") # Odczyt temperatury zewnętrznej (odległość 1 metra) tempExt = round(ds18b20Sensor.get_temperature(), 1) tempLab, presAbs, altLab, presSL = bmp180GetData(altReal) humDHT, tempDHT = Adafruit_DHT.read_retry(DHT22Sensor, DHTpin) jeśli brak humDHT a tempDHT nie jest Brak: humLab = okrągły (humDHT

Gdy masz już wszystkie dane przechwycone przez powyższe funkcje, musisz wysłać je do ThingSpeak. Zrobisz to za pomocą funkcji sendDataTs():

def sendDataTs():

data = { "field1": tempLab, "field2": tempExt, "field3": humLab, "field4": pressSL, "field5": altLab } ts.update(data) print ("[INFO] Dane wysyłane dla 5 pól: ", tempLab, tempExt, humLab, pressSL, altLab)

Po zaktualizowaniu danych kanału zapisz skrypt i uruchom go na swoim terminalu:

sudo Python3 localData_ToTs_v1_EXT.py

O protokołach komunikacyjnych

Zauważ, że przy użyciu „biblioteki Thingspeak” importowana jest „biblioteka żądań”, czyli biblioteka HTTP na licencji Apache2, napisana w Pythonie. Oficjalną dokumentację na żądanie instalacji można znaleźć tutaj:

docs.python-requests.org/en/latest/user/install/

W razie potrzeby przed uruchomieniem skryptu możesz sprawdzić, czy biblioteka żądań jest zainstalowana:

żądania instalacji sudo pip3

Opcjonalnie możesz użyć MTTQ jako metody wysyłania danych do ThingSpeak. MQTT różni się od HTTP, gdy jest specjalnie zaprojektowany, aby był lekki i przeznaczony dla urządzeń wbudowanych o niskiej wydajności pamięci RAM i procesora. Ponadto w większości przypadków MQTT wykorzystuje mniejszą przepustowość.

Zapoznaj się z tym samouczkiem: Zaktualizuj kanał ThingSpeak za pomocą MQTT na Raspberry Pi, aby uzyskać więcej informacji.

Krok 8: Wysyłanie zdalnych danych do ThingSpeak za pomocą ESP8266

Wysyłanie zdalnych danych do ThingSpeak za pomocą ESP8266
Wysyłanie zdalnych danych do ThingSpeak za pomocą ESP8266
Wysyłanie zdalnych danych do ThingSpeak za pomocą ESP8266
Wysyłanie zdalnych danych do ThingSpeak za pomocą ESP8266

W tym kroku użyjemy tego samego sprzętu, który został wyjaśniony w moim samouczku:

ŁATWOŚĆ IOT: ZDALNE PRZECHWYTYWANIE DANYCH POGODOWYCH: UV I POWIETRZA TEMPERATURY I WILGOTNOŚCI

Kod, którego tutaj użyjemy, jest w zasadzie taki sam, jak w tym samouczku. Skomentujmy najważniejsze części kodu:

Najpierw wywołajmy bibliotekę ESP8266, zdefiniujmy klienta WiFi i zdefiniujmy poświadczenia lokalnego routera i Thinkspeak:

/* NodeMCU ESP12-E */

#include klienta WiFiClient; const char* MY_SSID = "WPISZ SWÓJ SSDID"; const char* MY_PWD = "WPISZ SWOJE HASŁO"; /* Thinkspeak */ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY ="WPROWADŹ SWOIM KLUCZEM ZAPISU";

Po drugie, dołączmy bardzo ważną bibliotekę dla projektów IoT: SimpleTimer.h:

/* TIMER */

#include minutnik SimpleTimer;

Po trzecie, podczas setup() zainicjujemy komunikację szeregową, wywołamy funkcję connectWiFi() i zdefiniujemy timery. Zauważ, że wiersz kodu: timer.setInterval(60000L, sendDataTS); wywoła funkcję sendDataTS() co 60 sekund, aby przesłać dane do kanału ThinkSpeak.

pusta konfiguracja()

{ … Numer seryjny.początek(115200); opóźnienie(10); … połączWifi(); timer.setInterval(60000L, sendDataTS); … }

W końcu, podczas loop(), jedynym potrzebnym poleceniem jest zainicjowanie timera i to wszystko!

pusta pętla()

{ … timer.run(); // Inicjuje SimpleTimer }

Poniżej możesz zobaczyć dwie ważne funkcje wykorzystywane do obsługi komunikacji Thinkspeak:

Połączenie ESP12-E z siecią WiFi:

/***************************************************

* Podłączanie WiFi *********************************************** ***/ void connectWifi() { Serial.print("Łączenie z "+ *MY_SSID); WiFi.begin (MOJE_SSID, MOJE_PWD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("Połączenie WiFi"); Serial.println(""); }

ESP12-E wysyła dane do ThinkSpeak:

***************************************************

* Wysyłanie danych do kanału Thinkspeak ********************************************* ******/ void sendDataTS(void) { if (client.connect(TS_SERVER, 80)) { String postStr = TS_API_KEY; postStr += "&field6="; postStr += String(temp); postStr += "&field7="; postStr += String(szum); postStr += "&field8="; postStr += String(dataSensorUV); postStr += "\r\n\r\n"; client.print("POST /aktualizacja HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Połączenie: zamknij\n"); client.print("X-THINGSPEAKAPIKEY: " + TS_API_KEY + "\n"); client.print("Typ treści: application/x-www-form-urlencoded\n"); client.print("Długość-treści: "); klient.print(postStr.length()); klient.print("\n\n"); klient.print(postStr); opóźnienie (1000); } wysłano++; klient.stop(); }

Pełny kod można znaleźć na moim GitHub: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Po przesłaniu kodu do NodeMCU. Podłączmy zewnętrzną baterię i zróbmy jakiś pomiar pod słońcem. Położyłem Stację zdalną na dachu i zacząłem przechwytywać dane na ThingSpeak.com, jak pokazano na powyższych zdjęciach.

Krok 9: Uwagi końcowe

Uwagi końcowe
Uwagi końcowe

Głównym celem tego samouczka było pokazanie, jak podłączyć Raspberry Pi do ThingSpeak. Świetnie nadaje się do przechwytywania danych i rejestrowania ich na platformie IoT.

Korzystając z okazji wysłaliśmy również dane na ten konkretny kanał, przechwytując je ze stacji zdalnej za pomocą ESP8266. Takie podejście jest w porządku, ale nie najlepsze. Ponieważ mamy do czynienia z operacją „asynchroniczną”, czasami zarówno RPi jak i ESP8266 próbują jednocześnie (lub z małym interwałem) logować to, co odrzuca ThingSpeak. Idealnie byłoby, gdyby ESP8266 wysyłał dane lokalnie do Raspberry Pi, a ostatni był odpowiedzialny za obsługę wszystkich danych. W ten sposób „Dworzec Główny” (Raspberry Pi) mógłby zrobić 3 rzeczy:

  • Rejestruj wszystkie dane w lokalnej bazie danych
  • Zaprezentuj wszystkie dane na lokalnej stronie internetowej (za pomocą Flaska, jak pokazano na powyższym zdjęciu)
  • Wysyłanie wszystkich danych do ThingSpeak w tym samym czasie.

W przyszłym samouczku zbadamy te opcje.

Krok 10: Wniosek

Wniosek
Wniosek

Jak zawsze mam nadzieję, że ten projekt pomoże innym odnaleźć drogę do ekscytującego świata elektroniki!

Aby uzyskać szczegółowe informacje i ostateczny kod, odwiedź mój depozyt na GitHub: RPi-NodeMCU-Weather-Station

Więcej projektów znajdziesz na moim blogu: MJRoBot.org

Czekać na dalsze informacje! Następny samouczek prześlemy dane ze zdalnej stacji pogodowej do centralnej, opartej na serwerze WWW Raspberry Pi:

Obraz
Obraz

Saludo z południa świata!

Do zobaczenia w mojej następnej instrukcji!

Dziękuję Ci, Marcelo

Zalecana: