Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2

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?

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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - zapojení

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č teploty a vlhkosti - signály

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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak

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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak1

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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak2

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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak3

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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak - manažer desek

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

kanalChannel 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.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak grafy

Přidejte si Widget Gauge a zobrazí se ukazatel poslední nahrané hodnoty, reprezentuje aktuální teplotu a vlhkost.

Meteostanice v Cloudu s deskou Arduino UNO WiFi Rev2 - ThinkSpeak hodnoty

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!