Bastlením proti covidu! ❤️

Do internetu s deskou Arduino UNO WiFi Rev2

do internetu s deskou arduino uno wifi rev2

úvodní obrázek

Dneska se podíváme na využití IoT funkcí u desky Arduino UNO WiFi Rev2. V době internetové máme nespočet možností, jak naložit s nasbíranými daty. Dnes vám ukážu, jak údaje pohodlně a nahrát na cloud a přehledně je zobrazit.

Co budeme potřebovat

Desku Arduino UNO WiFi Rev2

Snímač teploty a vlhkosti DHT22

Nepájivé pole

Pár propojovacích vodičů - kdyby chyběly, jsou k dostání >> PROPOJOVACÍ VODIČE M/M

Rozhraní Arduino IDE

ZAPOJENÍ SNÍMAČE

celé zapojení_V2

Snímač DHT22 od Texas Instruments je ideálním pomocníkem při měření teploty a vzdušné vlhkosti, díky jednoduchému zapojení. 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 DHT11.

Pro rychlé porovnání:

DHT11 DHT22
Rozsah teplot 0–60 °C -20 – 80°C
Přesnost teploty ~ 2°C 0,1 °C
Rozsah vlhkosti 20 – 80 % 0 – 100 %
Přesnost vlhkosti 5 % 2 %

 

Vodiče zapojíme do konektorů:

VCC - na výstupních 5V z desky Arduino

GND - na zemnící konektor GND na desce

DATA - na libovolný digitální pin, v našem případě pin 2.

DHT22

Pin s označením NIC nechte volný.

Snímač DHT22/11 není oproti termistoru závislý na úrovni vstupního napětí, dokud splňuje deklarovaný rozsah ( 3,3 – 6V ).

Zbytek funkcí vám zajistí samotná deska a USB kabel.

cloud

Když máte data, můžete je zobrazit na LCD či OLED 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ů. Pro nás je vhodný kandidát ThingSpeak. Umožňuje bez poplatků využít rozsáhlý prostor na ukládání dat, vlastní grafy pro přehledné zobrazení a vlastní knihovnu pro Arduino.

thingspeak

Na webu ThingSpeaku vytvoříme účet, provede nás z úvodní stránky tlačítko Get Stared For Free.

thingspeak úvod

Vytvoření účtu je prakticky stejné, jako založit 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

thingspeak1

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.

thingspeak2

 

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 v Arduino IDE

Po připojení desky k počítači a spuštění Arduino IDE si přidáme 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.

board_manager

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 nahrává 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.

grafy1

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

Bez názvu-4

bonus

Chtěli jsme data sledovat ze svého telefonu ? 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.

srovnání a alternativa

Jako možné použití 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 desky vybaveny ochrannou, která zvýší bezpečí při používání. Při použití klonu se můžeme setkat s celou řadou problémů, ať na straně knihoven, které si nebudou s deskou jednoduše rozumět nebo s horší kvalitou použitých dílů ( vodiče špatně drží v kontaktech, potisky pinů nejsou rovné nebo dobře čitelné ).

WeMos D1 UNO je zajímavá varianta, která spojí shodný tvar a nabízí se za nižší cenu. Bohužel nabízí 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í.

ZÁVĚREM

Ukázali jsme si, jak snadno data nahrát na internet a zobrazit si je ve svém telefonu. Stejným způsobem bychom mohli sledovat kvalitu vzduchu v bytě nebo na pracovišti s čidlem OCTOPUS

 

Náš e-shop používá soubory cookies, aby to všechno pro vás dobře šlapalo. Cookies nejsou k jídlu, ale ze zákona to tady musíme mít. Odkliknutí vaše bastlení nijak neohrozí.