Vlažnost in temperatura sta zelo pogosta parametra za merjenje na mnogih mestih, kot so kmetije, rastlinjaki, medicina, industrijski domovi in pisarne. Merjenje vlage in temperature z Arduino smo že pokrili in podatke prikazali na LCD-prikazovalniku.
V tem projektu IoT bomo spremljali vlažnost in temperaturo prek interneta s pomočjo ThingSpeak, kjer bomo s strežnikom ThingSpeak prikazali trenutne podatke o vlažnosti in temperaturi prek interneta. To dosežemo s podatkovno komunikacijo med Arduino, senzorskim modulom DHT11, modulom ESP8266 WIFI in LCD. Termometer in merilnik vlažnosti na skali Celzija prikazuje temperaturo in vlažnost okolja prek LCD zaslona in ju pošlje strežniku ThingSpeak za spremljanje v živo od koder koli na svetu.
Nastavitev dela in stvari:
Ta projekt, ki temelji na IoT, ima štiri odseke, najprej senzor vlažnosti in temperature DHT11 zazna podatke o vlažnosti in temperaturi . Drugič, Arduino Uno izvleče podatke senzorja DHT11 kot primerno število v odstotkih in stopinjah Celzija ter jih pošlje v modul Wi-Fi. Tretjič, modul Wi-Fi ESP8266 podatke pošlje Severju podjetja ThingSpeak. In na koncu ThingSpeak analizira podatke in jih prikaže v obliki grafa. Izbirni LCD se uporablja tudi za prikaz temperature in vlažnosti.
ThingSpeak ponuja zelo dobro orodje za projekte na osnovi IoT za Arduino. Z uporabo spletnega mesta ThingSpeak lahko svoje podatke prek interneta spremljamo od koder koli, lahko pa tudi 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. Tukaj razlagamo o tem, kako poslati podatke strežniku ThingSpeak z uporabo modula ESP8266 WIFI:
1. Najprej mora uporabnik ustvariti račun na ThingSpeak.com, nato se prijaviti in klikniti Get Started.
2. Zdaj pojdite v meni 'Kanali' in kliknite možnost Nov kanal na isti strani za nadaljnji postopek.
3. Zdaj boste videli obrazec za ustvarjanje kanala, vnesite ime in opis po vaši izbiri. Nato v oznaki polja 1 in polja 2 izpolnite 'Vlažnost' in 'Temperatura', potrdite polji za obe polji. V obrazcu potrdite tudi polje »Objavi javno« in na koncu Shrani kanal. Zdaj je ustvarjen vaš novi kanal.
4. 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 char * api_key v kodi.
5. Po njem kliknite »Uvoz / izvoz podatkov« in kopirajte URL za posodobitev vira kanala GET Request, ki je:
api.thingspeak.com/update?api_key=SIWOYBX26OXQ1WMS&field1=0
6. Zdaj mora uporabnik odpreti »api.thingspeak.com« s pomočjo funkcije httpGet s funkcijo postUrl kot »update? Api_key = SIWOYBX26OXQ1WMS & field1 = 0« in nato podatke poslati s pomočjo podatkovnega vira ali naslova zahteve za posodobitev.
Pred pošiljanjem podatkov mora uporabnik urediti ta niz poizvedbe ali postUrl s polji s podatki o temperaturi in vlažnosti, kot je prikazano spodaj. Tu smo dodali oba parametra v niz, ki ga moramo poslati s pomočjo zahteve GET na strežnik, potem pa smo uporabili httpGet za pošiljanje podatkov na strežnik. Preverite celotno kodo spodaj.
Sprintf (postUrl, "update? Api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80);
Celoten postopek je prikazan v razdelku Video na koncu tega članka.
Delo tega projekta temelji na enožični serijski komunikaciji za pridobivanje podatkov iz DHT11. Najprej Arduino pošlje signal za zagon modulu DHT, nato pa DHT odda odzivni signal, ki vsebuje podatke. Arduino zbira in izvleče podatke v dveh delih, najprej je vlažnost, drugi pa temperatura, nato pa jih 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.
Opis vezja:
Povezave za ta projekt spremljanja temperature in vlage ThingSpeak so zelo preproste. Tu se za prikaz temperature in vlažnosti uporablja zaslon s tekočimi kristali, ki je v 4-bitnem načinu neposredno povezan z Arduinom. Zatiči LCD, in sicer RS, EN, D4, D5, D6 in D7, so povezani z Arduino digitalnimi številkami 14, 15, 16, 17, 18 in 19. Ta LCD ni obvezen.
Senzorski modul DHT11 je povezan z digitalnim zatičem 12 Arduina. Zatiči Vcc in GND modula Wi-Fi ESP8266 so neposredno povezani na 3.3V, GND Arduina in CH_PD pa je povezan tudi z 3.3V. Zatiča Tx in Rx ESP8266 sta neposredno priključena na zatiča 2 in 3 Arduina. Tu je uporabljena tudi programska serijska knjižnica, ki omogoča serijsko komunikacijo na pin 2 in 3 Arduino. Podrobno smo že obravnavali povezavo modula Wi-Fi ESP8266 z Arduinom.
Programski del:
Programski del tega projekta ima zelo pomembno vlogo za izvajanje vseh operacij. Najprej vključimo zahtevane knjižnice in inicializiramo spremenljivke.
#include "dht.h" // Vključno s knjižnico za dht #include
Potem vnesite ključ API API in zavzemite nekaj nizov.
char * api_key = "SIWOYBX26OXQ1WMS"; // Vnesite ključ API za pisanje iz statičnega znaka ThingSpeak postUrl; int humi, tem; void httpGet (String ip, String path, int port = 80);
V funkciji void loop () beremo temperaturo in vlago ter jih nato prikažemo na LCD-prikazovalniku.
void send2server () se uporablja za pošiljanje podatkov na strežnik. Funkcija Send2server je rutinska storitev prekinitve, ki kliče vsakih 20 sekund. Ko pokličemo funkcijo posodabljanja, se pokliče servisna rutina prekinitve časovnika.
neveljavno send2server () {char tempStr; char humidStr; dtostrf (tem, 5, 3, tempStr); dtostrf (humi, 5, 3, humidStr); sprintf (postUrl, "update? api_key =% s & field1 =% s & field2 =% s", api_key, humidStr, tempStr); httpGet ("api.thingspeak.com", postUrl, 80); }