V článku si ukážeme, jak využit IoT funkce desky Arduino UNO WiFi Rev2 a vytvoříme si jednoduchou meteostanici. V době internetové máme nespočet možností, jak naložit s nasbíranými daty. Na příkladu si demonstrujeme, jak údaje o naměřené teplotě a tlaku pohodlně nahrát na cloud a přehledně zobrazit.
Co budeme potřebovat pro wifi meteostanici?
- Desku Arduino UNO WiFi R2
- Snímač teploty a vlhkosti DHT22
- Nepájivé kontaktní pole s propojovacími vodiči
- Pokud by chyběly vodiče, pak je máme zde: Propojovací vodiče M/M
- Počítač s funkčním Arduino IDE
ZAPOJENÍ SNÍMAČE teploty a vlhkosti DHT22
Snímač teploty a vlhkosti DHT22 je ideálním pomocníkem při měření teploty a vzdušné vlhkosti, zapojení je velmi jednoduché. Stačí tři vodiče, připojené na popsané piny. Pro projekty s menší náročností na přesnost měření můžete zkusit i odlehčenou verzi toho snímače s označením DHT11.
Porovnání snímačů DHT11 a DHT22
Pro zajímavost si uvedeme tabulku s porovnáním snímačů teploty a vlhkosti DHT11 a DHT22. Z tabulky je vidět, že pro řadu aplikací si vystačíme i s levnějším snímačem DHT11.
DHT11 | DHT22 | |
Rozsah měření teploty | 0–50 °C | -40–80 °C |
Přesnost měření teploty | ±2 °C | ±0,5 °C |
Rozsah měření vlhkosti | 20–90 % RH | 0–100 % |
Přesnost měření vlhkosti | ±5 % RH | ±2 % RH |
Signály ze snímače DHT22 zapojíme do konektorů Arduino desky.
- VCC - na výstupních 5V z desky Arduino UNO WiFi Rev2
- GND - na zemnící svorkur GND na Arduino desce
- DATA - na libovolný digitální pin, v našem případě pin 2
- Pin s označením NIC nechte nezapojený
Snímač DHT22 není například oproti termistoru závislý na úrovni vstupního napětí. Komunikace probíhá digitálně. Napájecí napětí ale musí být v rozsahu ( 3,3–6 V ). Zbytek potřebných funkcí zajistí deska UNO WiFi Rev2 a také USB kabel.
Pojďme přijít Cloudu na kloub!
Když máte naměřená data, můžete je zobrazit třeba na LCD displeji. Ale jak k nim přistoupit dálkově, kde se na ně podívat? Dnes všichni používají cloudová úložiště. Ať už na zálohu fotografií či kontaktů, Cloud se hodí dobře i pro práci s obecnějšími daty. Pro nás je vhodný kandidát IoT Cloud ThingSpeak. Umožňuje bez poplatků využít rozsáhlý prostor na ukládání dat, tvořit vlastní grafy pro přehledné zobrazení a vlastní knihovnu pro Arduino.
IoT Cloud thingspeak
Na webu ThingSpeak si vytvoříme účet, provede nás z úvodní stránky tlačítko Get Stared For Free.
Vytvoření účtu je podobně složité, jako založit si e-mailovou adresu. Potvrďte autorizační email a můžeme se pustit do přípravy cloudu.
V horní části okna máte nabídku Channels, Apps a Support. V menu napravo jsou odkazy na příklady spojení a využití dat i na dalších deskách.
Channels jsou naše kanály, tabulky pro vstup dat a základní zobrazení.
Apps nabízí širší možnosti využití dat, komunikaci a přenos dat do externích databází.
Začneme tlačítkem New Channel.
Vyplníme si důležitá pole Name, Field 1 a Field 2.
Name je název našeho kanálu – my zvolíme Arduino DHT22 – ten uvidíme jenom v přístupu, kvůli přehlednosti.
Field 1 a Field 2 budou tabulky pro přístup jedné z proměnných. Field 1 pojmenujeme jako Teplota, Field 2 ponese název Vlhkost.
Další pole vyplňovat nemusíme.
Po potvrzení vás přivítá stránka s přehledem kanálu, který je prozatím prázdný. V horní části nejdete údaj Channel ID, ten budeme potřebovat v kódu Arduino. V záložce Api Keys se skrývá ještě jeden Write API Key, i ten budeme potřebovat.
Program pro Arduino IDE
Po připojení desky k počítači a spuštění Arduino IDE si přidáme UNO WiFi Rev2 v manažeru desek.
V hlavním menu Nástroje > Vývojová deska > Manažér desek najdeme knihovnu Arduino megaAVR Boards. I v popisu je vidět, že zde je zahrnuta deska Arduino UNO WiFi Rev.2.
Pro ověření si v menu Nástroje > Port vybereme port, který je popsán jako Arduino UNO WiFi Rev2.
Do programu si přidáme knihovny
Menu Nástroje > Spravovat knihovny... najděte a instalujte
ThingSpeak – knihovna pro komunikaci s databází ThingSpeak
WiFiNINA – knihovna k ovládání WiFi modulu uvnitř Arduino UNO WiFi Rev2
DHT – tato knihovna vyzve k instalaci ještě doplňkové moduly (DHT_U a Adafruit_Sensor)
Abychom řekli knihovně DHT, na jakém pinu má číst data, deklarujeme hodnotu DHTPIN.
Konstanty:
ssid – název naší WiFi sítě
pass – heslo k naší síti
kanal – Channel ID - zde je hodnota číselná, tedy použijeme long
apiklic - Write API Key - v kódu jako char*
#include <ThingSpeak.h> #include <WiFiNINA.h> /*knihovna pro spojení s WiFi modulem*/ #include <Adafruit_Sensor.h> #include <DHT.h> /*knihovna k senzoru DHT22/11*/ #include <DHT_U.h> #define DHTPIN 2 /* pin pripojeny na DATA DHT22 */ const char ssid[]="Audiofil007"; /* nazev WiFi sítě */ const char pass[]="Dalik1390"; /* heslo pro připojení k WiFi */ const long kanal=1372078; const char* apiklic= "52LP9CD5FWTN1PCJ"; int status = WL_IDLE_STATUS; int temp, humid; #define DHTTYPE DHT22 /* DHT 22 (AM2302) */ DHT_Unified dht(DHTPIN, DHTTYPE); /* inicializace procedury dht */ WiFiClient client; /* připojení procedury client ke knihovně WiFiNINA jako klient */ void setup() { Serial.begin(9600); WiFi.begin(ssid,pass); /* připojení k wifi síti */ Serial.print("Pripojovani k siti "); Serial.println(ssid); if (WiFi.status()==WL_NO_MODULE) { Serial.println("Nenalezen modul WiFi"); } do { status=WiFi.status(); Serial.print("."); delay(500); } while (status != WL_CONNECTED); Serial.println(); Serial.println("WiFi pripojena :-)"); Serial.println(WiFi.localIP()); dht.begin(); /* spuštění procedury DHT */ ThingSpeak.begin(client); /* spuštění knihovny ThingSpeak */ } void loop() { if (status=WiFi.status() == WL_CONNECTED) { readnload(); } else { Serial.println("WiFi se odpojila..."); WiFi.begin(ssid, pass); } } void readnload() { sensors_event_t event; dht.temperature().getEvent(&event); int teplota=event.temperature; /* čtení teploty z DHT22*/ Serial.print("Teplota: "); Serial.print(teplota); Serial.println(" °C"); dht.humidity().getEvent(&event); int vlhkost=event.relative_humidity; /* čtení vlhkosti z DHT22*/ Serial.print("Vlhkost: "); Serial.print(vlhkost); Serial.println(" %"); ThingSpeak.setField(1,teplota); /* nastaveni nodnoty "teplota" pro pole 1 na ThingSpeaku */ ThingSpeak.setField(2,vlhkost); /* nastaveni nodnoty "vlhkost" pro pole 2 na ThingSpeaku */ int xx = ThingSpeak.writeFields(kanal,apiklic); /* nahrání dat na ThingSpeak */ if (xx == 200) /* kontrola zpětné vazby od serveru, kód 200 je OK */ { Serial.println("Data nahrana na ThingSpeak.."); delay(60000); /* deset vterin prodleva mezi jednotlivými vstupy */ } else { Serial.println("Chyba HTTP - " + String(xx)); /* v případě chyby ohlásit kód*/ ThingSpeak.begin(client); /* reset připojení u chybové hlášky */ } }
Kód samotný je opravdu jednoduchý. Arduino se pokusí připojit k WiFi síti, jakmile se spojí, vypíše na sériovou linku text "WiFi pripojena".
Následně vypíše přidělenou IP adresu, spustí proceduru dht a ThingSpeak.
Funkce readnload() stáhne data ze senzoru, přiřadí je k vytvořenému poli a nahraje.
ThingSpeak.setField(field,hodnota) – nastaví, do jakého pole( field ) se nahraje hodnota
ThingSpeak.writeFields(kanal,apiklic) – nahraje data do kanálu – příkaz vrací číselnou hodnotou stav nahrání, vrátí-li 200, je nahráno správně.
Při každém vstupu se s hodnotou ukládá i čas, takže se nemusíte starat o hodiny, ThingSpeak to zvládne za vás.
zpracování dat v thingspeaku
Máme spuštěný program, Arduino vesele posílá data a vy už můžete vidět plody práce. Hned po přihlášení je na úvodní stránce kanálu dvojice grafů, které zobrazují průběh vstupních dat. Grafy můžete libovolně měnit, ikona tužky nabídne úpravy barev i stylu zobrazení. Tlačítko čtverečku s drobnou šipkou nám aplet přesune do nového okna a dále jej můžeme exportovat na web.
Přidejte si Widget Gauge a zobrazí se ukazatel poslední nahrané hodnoty, reprezentuje aktuální teplotu a vlhkost.
A co to rozjet na mobilu?
Chcete data sledovat ze svého telefonu? Určitě ano! Na výběr je řada aplikací, které mají přímý přístup. V kanálu ThingSpeak, v záložce Sharing si přepnete nastavení na "Share channel view with everyone" a zpřístupní se záložka Public View.
Aplikace ThingViewer používá vlastní grafy, takže zobrazení je závislé na nastavení uvnitř programu.
Naopak ThingShow zobrazuje grafy i widgety stejně, jak je máme nastavené v ThingSpeaku. Tato varianta se mi osvědčila, protože si v ThingSpeaku můžu nastavit časový rozptyl grafu, rozsah hodnot, které uvidím a grafickou podobu. Zároveň umí zobrazit widget na hlavní obrazovce telefonu.
Alternativy pro Arduino Uno WiFI rev2
Pro použití s ThingSpeak se nabízí celá paleta vývojových desek. Originální desky Arduino mají jednotné provedení, vysokou kvalitu zpracování a můžeme se spolehnout na špičkovou podporu. Zároveň jsou originální desky vybaveny různými ochranami, které zajistí vysokou životnost při aktivním používání. Při použití klonu se můžeme setkat bohužel s celou řadou problémů, ať na straně knihoven, které si nebudou s deskou jednoduše rozumět nebo s horší kvalitou součástek nebo výroby (vodiče špatně drží v kontaktech, potisky pinů nejsou dobře čitelné, součástky jsou citlivé na ESD nebo i malé přepětí a podobně). Originální desky jsou sice oproti klonům výrazně dražší, dokáží někdy ale ušetřit hodiny času stráveného nad rozličnými chybami.
WeMos D1 UNO je zajímavá varianta, která má shodný Arduino tvar a nabízí se za nižší cenu. Bohužel má jen jeden analogový vstupní port a pracovní napětí je pouze 3,3V. Zde může být určitý problém s použitím dalších zařízení, jejichž logika potřebuje 5V pro provoz (některé LCD displeje, integrované obvody, řadiče atd..).
V rukou jsem měl i desku ESP32, která staví na základu Arduino UNO. Má vyšší výkon, větší paměť a rovněž zabudovanou WiFi. Naneštěstí není v manažeru desek, tedy je třeba zkoušet, kterou desku zvolit. Kompilace kódu trvá déle, piny mají trochu nelogické uspořádání a díky tomu není kompatibilní se shieldy. Je vhodná spíše pro bastlíře, kteří mají čas a chuť tyto drobné neduhy přehlédnout a kterým se vyplatí výhody, které ESP32 nabízí.
A teď můžete s UNO WiFI zkusit další projekty
Ukázali jsme si, jak snadno data nahrát na internet a zobrazit si je v telefonu. Stejným způsobem bychom mohli realizovat třeba sledování kvality vzduchu v bytě nebo na pracovišti. Senzor kvality vzduchu PM2,5 je na to jak dělaný!
Pokud narazíte na něco, co vám není v návodu jasné, zeptejte v sekci komentářů nebo se podívejte na další HWKITCHEN návody na stránce www.hwkitchen.cz/navody-hwkitchen/.
Bastlení ZDAR!