Svět IoT (Internet of Things) je všude kolem nás a Arduino IoT Cloud nabízí kutilům možnost ovládat jejich zařízení kdykoliv a odkudkoliv na profesionální úrovni. O Arduino online nástrojích jsme si již v minulosti psali, teď se ale zdá, že to už opravdu bude stát za to.
S Arduino IoT Cloud můžete pomocí prohlížeče internetu dálkově ovládat nebo sledovat chod programu vašeho zařízení. V článku si ukážeme jednoduchou meteostanici s Arduino NANO 33 IoT, zobrazením dat na OLED a posíláním do IoT Cloud. Na závěr vyzkoušíme ovládání vašeho zařízení hlasem pomocí asistenta Alexa od Amazonu.
Měříme teplotu, tlak a vlhkost
Pro seznámení s Arduino Cloud jsem zvolil konstrukci jednoduché meteostanice postavené ze dvou mikropočítačů Arduino Nano 33 IoT. K prvnímu mikropočítači je přes sběrnici I2C připojen senzor BME280 pro měření teploty, tlaku a vlhkosti. K druhému mikropočítači je pomocí I2C připojen malý grafický OLED displej 0,96“, který měřené hodnoty zobrazuje. Zapojení je jednoduché a patrné z obrázků níže. Stačí propojit piny VCC, GND, SCL a SDA. Pin VCC je výstup +3V3 z Arduina. Oba mikropočítače se po zapnutí připojí ke cloudu pomocí WiFi sítě a sdílí měřené hodnoty. Při napájení Arduina 5 V do pinu VIN je potřeba počítat se střední hodnotou odebíraného proudu asi 75 mA, při zvýšení napájecího napětí na 18 V hodnota proudu klesne na 25 mA.
Mikropočítač Arduino Nano 33 IoT
Arduino Nano 33 IoT je mnohoúčelový mikropočítač vybavený gyroskopem, akcelerometrem, WiFi, Bluetooth, RTC a spínaným zdrojem v rozsahu vstupního napětí 5-18 V. Zapojením pinů je téměř shodné s původním Arduino Nano (DIL 30), ale napětí I/O obvodů je pouhých 3,3 V s maximální proudem výstupu 7 mA. Mikropočítač používá 32bitový procesor ARM SAMD21 Cortex-M0+ na frekvenci 48 MHz s 256 kB paměti SRAM a 1 MB paměti Flash. Díky integrovanému radiovému modulu uBlox NINA-W102 a kryptografickému čipu ATECC608A je ideální pro konstrukce zařízení IoT. Dokumentaci mikropočítače včetně schéma zapojení najdete třeba zde. Všestranné Arduino Nano 33 IoT je pro použití s IoT Cloud ideální.
Arduino IoT Cloud
Nano 33 IoT je jeden z mnoha mikropočítačů, který můžete programovat online pomocí webové aplikace Arduino IoT Cloud. Podrobný návod, jak pracovat s touto aplikací najdete třeba zde. Prostředí Arduino IoT Cloud je intuitivní a samo vás navede, co je potřeba udělat. Po nutné registraci a instalaci Arduino Create Agent lze pomocí USB připojit váš mikropočítač a začít vytvářet vlastní IoT projekt.
Každý nový uživatel má automaticky nastaven bezplatný plán, který umožňuje vytvořit až dvě IoT zařízení (Things) a využívat až 5 proměnných (Variables), pomocí kterých můžete svůj mikropočítač dálkově sledovat nebo ovládat. Nastudujte si omezení a možnosti rozšíření vašeho plánu. V záložce Thinks-Setup zadáte název svého nového zařízení, k němu přiřadíte a pojmenujete mikropočítač (Device), vytvoříte cloud proměnné a zadáte parametry WiFi sítě, ke které se mikropočítač připojí po zapnutí napájení.
Nastavení cloud proměnných meteostanice jsem vložil do úvodní poznámky programu. V záložce Thinks-Sketch dopíšete vaši část řídícího programu (viz výpis níže), který nakonec nahrajete do mikropočítače. Chod programu můžete sledovat pomocí sériového monitoru webové aplikace. Již vytvořené cloud proměnné se v programu znovu nedeklarují. Řídící panel svého nového zařízení si vytvoříte v záložce Dashboards. Samostatně lze navrhnout panel pro mobilní nebo desktopovou aplikaci. K sestavení řídícího panelu použijte nabídku Widgets. Jde například o tlačítka, přepínače, kontrolky nebo jiné grafické zobrazení hodnot proměnných. Prvky řídícího panelu se nakonec propojí s programem v mikropočítači pomocí vytvořených cloud proměnných.
Přístup z mobilu pomocí aplikace Arduino IoT Cloud Remote
Pro rychlý přístup k vašemu řídícímu panelu z mobilního telefonu si naistalujte aplikaci Arduino IoT Cloud Remote.
Ovládání Nano 33 IoT pomocí hlasového asistenta Alexa
Pro zpestření jsem v zařízení Meteo_Senzor vytvořil navíc proměnnou teplota_alexa, která je v cloudu deklarována jako Alexa kompatibilní proměnná a umožňuje čtení hodnoty pomocí hlasového asistenta Alexa od Amazonu. Zde je ovšem nutné do aplikace Alexa přidat Arduino dovednosti (Skill) a potom v záložce zařízení (Devices) vyhledat nová zařízení (Discover Devices). O to samé můžete Alexu požádat slovně v angličtině. Alexa by měla najít nové zařízení pro měření teploty, které si pak zařadíte do konkrétní místnosti. Potom už jen stačí Alexu požádat, aby vám řekla, jaká je teplota v konkrétní místnosti.
Program v Meteo_Senzor (Device_1)
/* Nastavení cloud proměnných pro zařízení Meteo_Senzor: teplota, Float (Basic types), Read only, Variable update periodically 1 s teplota_alexa, CloudTemperatureSensor (Alexa compatible), Read only, Variable update periodically 1 s tlak, Float (Basic types), Read only, Variable update periodically 1 s vlhkost, Int (Basic types), Read only, Variable update periodically 1 s */ #include "thingProperties.h" // Parametry definované v Arduino IoT Cloud #include <Adafruit_BME280.h> Adafruit_BME280 bme; float teplota_predchozi = 0; float tlak_predchozi = 0; int vlhkost_predchozi = 0; void setup() { Serial.begin(9600); bme.begin(0x76); // I2C adresa čidla 0x76 delay (100); initProperties(); // Parametry definované v Arduino IoT Cloud ArduinoCloud.begin(ArduinoIoTPreferredConnection); // Připojení k Arduino IoT Cloud setDebugMessageLevel(2); // Nastavení důležitosti výpisu zpráv na sérový monitor ArduinoCloud.printDebugInfo(); } void loop() { ArduinoCloud.update(); delay (1000); teplota = round (10 * bme.readTemperature()) / 10; // Převod na jedno desetinné místo teplota_alexa = teplota; delay (100); tlak = round (bme.readPressure() / 10) / 10; // Převod na jedno desetinné místo a hPa delay (100); vlhkost = bme.readHumidity(); delay (100); if (tlak_predchozi != tlak or teplota_predchozi != teplota or vlhkost != vlhkost_predchozi) { Serial.print(teplota, 1); Serial.print(" °C "); Serial.print(tlak, 1); Serial.print(" hPa "); Serial.print(vlhkost, 1); Serial.println(" %"); teplota_predchozi = teplota; tlak_predchozi = tlak; vlhkost_predchozi = vlhkost; } }
Program v Meteo_OLED (Device_2)
/* Nastavení cloud proměnných pro zařízení Meteo_OLED: teplota, Float (Basic types), Read/Write, Variable update on change, In sync with Meteo_Senzor tlak, Float (Basic types), Read/Write, Variable update on change, In sync with Meteo_Senzor vlhkost, Int (Basic types); Read/Write, Variable update on change, In sync with Meteo_Senzor */ #include <Adafruit_SSD1306.h> #include "thingProperties.h" // Parametry definované v Arduino IoT Cloud Adafruit_SSD1306 display(128, 64, &Wire, -1); // OLED šířka, výška void setup() { Serial.begin(9600); initProperties(); ArduinoCloud.begin(ArduinoIoTPreferredConnection); setDebugMessageLevel(2); ArduinoCloud.printDebugInfo(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Interní zdroj 3V3, I2C adresa OLED display.setTextColor(SSD1306_WHITE); // Nastav bílý text na černém pozadí display.cp437(true); // Použij znakovou sadu CP437 aktualizuj_OLED (); } void loop() { ArduinoCloud.update(); delay (1000); } void onTeplotaChange() { // Při změně teploty aktualizuj_OLED (); } void onTlakChange() { // Při změně tlaku aktualizuj_OLED (); } void onVlhkostChange() { // Při změně vlhkosti aktualizuj_OLED (); } void aktualizuj_OLED () { display.setTextSize(2); // Nastav velikost textu display.clearDisplay(); // Smaž displej display.setCursor(0, 0); // Nastav počáteční pozici kurzoru display.print("T="); display.print(teplota, 1); display.print(" "); display.print(char(248)); display.println("C"); display.print("P="); display.print(tlak, 0); display.println(" hPa"); display.print("RH="); display.print(vlhkost); display.println(" %"); display.setTextSize(1); // Nastav velikost textu if (ArduinoCloud.connected()) display.println("CLOUD - SPOJENO"); else display.println("CLOUD - NESPOJENO"); display.display(); }