Pojďme programovat elektroniku: Krabička vysílá na internetu

  • Už jsme se seznámili se základními principy mikropočítačů
  • Tentokrát se podíváme, jak zdarma prezentovat data na webu
  • Experimentální meteostanice začíná vysílat!

Před měsícem jsem ze zaprášených krabic vytáhl mikropočítače, nakoupil rezistory a hromadu všemožných analogových a digitálních čidel a začal stavět vlastní hardware – venkovní meteorologickou stanici, která mě bude jednoho dne informovat nejen o počasí u mě v bytě, ale i v parku před domem, kam na některý ze stromů do korektní dvoumetrové výšky nad zemí umístím sondu, která bude v pásmu 433 MHz (třeba pomocí tohoto) zasílat ke mně domů všechna zajímavá data.

Zatím jsem však na úplném začátku a teprve se pomalu seznamuji s tím, jak fungují a jak věrohodná data podávají jednotlivá analogová i digitální čidla. A také dál nakupuji, jakmile se totiž do tohoto světa drobných počítačových destiček a elektroniky skutečně ponoříte, jeden, dva malé počítače už vám nestačí. Je to jako droga, a tak k drobnému Photonu a velkému Edisonu přikoupím ještě klasické Arduino Uno, Wi-Fi čip ESP8266 a hromadu dalších součástek.

V první části našeho seriálu jsem se pokusil tento svět představit naprostým zelenáčům, a proto jsem k drobnému počítači připojil pouze primitivní analogové teplotní čidlo za pár korun a fotorezistor citlivý na světlo, abych demonstroval základní principy. Zároveň jsem slíbil, že se příště podíváme na samotné zapojování součástek a programování drobného čipu. Nakonec jsem se však rozhodl počkat, než mi dorazí zmíněná destička Arduino Uno, která je přeci jen typickým a výborně dokumentovaným vstupním bodem pro většinu začátečníků.

Jak dostat data z mikropočítače na web

V mezidobí jsem však rozhodně neusnul na vavřínech a věnoval se tomu nejdůležitějšímu. Samotná droboučká elektronika je totiž pouhý prostředek – nikoliv cíl. Nestavím přeci meteostanici proto, abych se přes sériovou linku či na připojeném LCD displeji podíval, jakou teplotu naměřila, když to samé zvládne i můj naprosto hloupý rtuťový teploměr. Meteostanici stavím proto, aby data automaticky posílala kamsi na internet, kde se budou kreslit grafy, počítat všemožné statistiky a analýzy a já se na to vše podívám z domova nebo třeba z mobilu na cestách.

400912425 668279409
Prototyp meteostanice: Řídícím počítačem je Photon s Wi-Fi a zatím sbírá jen údaje o teplotě a intenzitě světla. Na řadě je vlhkoměr, tlakoměr, senzor CO2 a nakonec i venkovní bezdrátová sonda napájená z baterie a samozřejmě slušivá krabička z 3D tiskárny.

Na tuto potřebu před lety zareagovala hromada nových webových služeb, a tak dnes mohou drobné IoT počítače jako třeba Arduino zasílat data z všemožných čidel na služby jako ThingSpeak, Freeboard, Thethings, Buddy a mnohé další, které dokážou ze získaných informací rovnou kreslit grafy a některé nabízejí i další složitější komunikaci s krabičkou. Nespornou výhodou podobných služeb je zejména to, že pro populární mikropočítače včetně Arduina nabízejí vlastní knihovny, což začátečníkům ušetří hromadu trápení s programováním.

95838011
ThingSpeak zpracuje z dat mikropočítače třeba takové grafy, aniž byste je museli sami složitě navrhovat a programovat

Já však ani jednu z těchto služeb, které jsou v základním tarifu zdarma, nepoužiji. Namísto toho se vrátím k platformě, o které jsem na Živě.cz psal už mnohokrát. Ano, o veškerou logiku se mi na internetu postará bezplatný a mnohem univerzálnější Apps Script – Googlem vylepšený Javascript, který běží přímo na jeho serverech a jehož základy zná jistě každý čtenář.

Mozkem všeho je Apps Script

Na jaře jsem demonstroval, jak drobný program v Apps Scriptu dokáže chytře automatizovat třeba váš Gmail, nicméně ve skutečnosti je ještě mnohem univerzálnější. Každý takový skript totiž může být dostupný i na své vlastní webové adrese a tedy přijímat data skrze běžnou komunikaci HTTP.

972316613 686764356
Zpřístupnění AS skriptu přes veřejnou webovou adresu

A přesně tuto cestu použiji i ve své meteostanici, která každých patnáct minut zašle údaj o intenzitě světla a teplotě vzduchu na adresu ve formátu:

https://script.google.com/macros/s/XXXXX/exec?teplota=28.65&svetlo=154,

kde XXXXX představuje identifikátor mého skriptu a teplota a svetlo parametry s naměřenými hodnotami z mikropočítače.

Aby tyto hodnoty zaslané přímo v URL mohl skript zpracovat, musí obsahovat funkci doGet (zpracovávám data zaslaná skrze HTTP GET), která by mohla vypadat třeba takto:

/*
 * Funkce doGet se automaticky spustí při každém načtení adresy skriptu
 * Z URL získá zaslané hodnoty s teplotou a intenzitou světla
 * Poté je společně s aktuálním časem uloží do tabulkového dokumentu
*/

function doGet(e) {
 
 // Uložení parametrů URL teplota a svetlo do stejnojmenných proměnných
 var teplota = parseFloat(e.parameter.teplota);
 var svetlo = parseInt(e.parameter.svetlo);

 // Dohledám tabulkový dokument na mém úložišti Drive podle jeho ID
 var doc = SpreadsheetApp.openById("XXXXXXXXXXXXXXXXXXXXXXX");
 
 // Seznam naměřených hodnot je v druhém listu
 var list = doc.getSheets()[1];

 // Převedu aktuální čas na textový formát, který mi vyhovuje
 var cas = Utilities.formatDate(new Date(), "Europe/Prague", "HH:mm:ss dd.MM. yyyy");

 // A konečně vložím hodnoty na konec zvoleného listu
 list.appendRow([cas, teplota, svetlo]);

}

Kód výše tedy při načtení adresy uloží do proměnných hodnoty ze sondy a já s nimi mohu dále libovolně pracovat. Mohu je třeba až nyní zaslat do některé ze zmíněných vizualizačních služeb, stejně tak je ale mohu uložit třeba do souboru na úložišti Google Drive.

Docs pro prezentaci, Fusion Table pro kompletní archiv

Já využiji služeb tabulkového procesoru v Google Docs a tabulky pro rozměrná data Google Fusion Table. Zatímco v tabulkovém dokumentu se budou ukládat jen hodnoty za posledních 24 hodin, protože by se dokument po několika týdnech příliš naplnil a jen s obtížemi by si poradil se stovkami řádků záznamů, do Fusion Table se budou ukládat hodinové aritmetické průměry a to klidně celé roky, tato tabulková databáze si totiž bez problému poradí i s desítkami a stovkami tisíc drobných záznamů. Později se tedy mohu k naměřeným datům kdykoliv vrátit a provádět další zajímavé analýzy.

207728896 138229167
Archivní hodnoty pro poslední den v tabulce Google Docs s podmíněným formátováním pro větší přehlednost (krásně se vybarví třeba nejteplejší hodiny dne) a dlouhodobý archiv průměrných hodinových hodnot ve Fusion Table. Rok má 8 760 hodin, takže tato bezplatná tabulková databáze je už mnohem vhodnější a pro podobný scénář má prakticky neomezenou kapacitu.

Apps Script umí s Fusion Table přímo komunikovat pomocí vlastní knihovny FusionTables a databázového jazyka SQL. Primitivní uložení hodnot do tabulky by tedy mohlo vypadat třeba takto:

var id_fusion_tabulky = "rkHThtcKorkHThtcKorkHThtcKo";
var datum = Utilities.formatDate(new Date(), "Europe/Prague", "yyyy-MM-dd HH:mm:ss");
var teplota = 25.65;
var svetlo = 1548;

FusionTables.Query.sql("INSERT INTO " + id_fusion_tabulky + 
 " (Datum,Teplota,Svetlo) VALUES(" + 
 "'" + datum + "'," + 
 teplota + "," +
 svetlo + ")");

Opět zopakuji, že vše, o čem nyní píšu, je k dispozici zdarma. V podstatě se tedy v tomto případě bude jednat o bezplatný aplikační a databázový hosting.

A nakonec ještě graf na veřejném webu

Tabulku v Docs použiji i pro kreslení grafů. Jelikož Apps Script ukládá do tabulky jen záznamy za posledních 24 hodin, což představuje 96 záznamů (po 15 minutách), budu tedy vlastně neustále přepisovat 96 řádků s jednotlivými buňkami.

67339792
V tabulkovém dokumentu jsem si vytvořil list s přehledem a grafy a zakázal zobrazování mřížky, ať to celé vypadá co nejlépe

Pak už pouze stačí vložit do dokumentu libovolný graf, který jako zdroj dat použije těchto 96 řádků. Grafy v Google Docs mají tu výhodu, že na ně můžete samostatně odkazovat, případně pro ně vygenerovat emebed kód, který pak můžete vložit na libovolný web.

869527892 647053642
Publikování grafu na webu pomocí jeho adresy nebo embed kódu (iframe)

Ještě podstatnější je však to, že lze jako webovou stránku publikovat i celý tabulkový dokument, který se bude průběžně aktualizovat. Stačí si tedy na jednom z listů vytvořit nějaký souhrnný přehled a ten pak používat jako konečný výstupní bod – ať už jako soukromý přehled o datech z vašeho domácího IoT, anebo jako veřejnou stránku, na kterou se bude moci podívat širší publikum.

314199929
A konečně tabulkový dokument publikovaný jako interaktivní webová stránka. Můžete se na ni podívat zde. Z grafů je patrné, že teplota už dosáhla dnešního maxima a Slunce se pomalu blíží k obzoru. Nyní už stačí pouze napojit další senzory – třeba tlakoměr a vlhkoměr.

Bezplatný a opravdu nebývale univerzální Apps Script ve spolupráci s Docs, Fusion Table či jakýmikoliv jinými webovými službami a databázemi se tedy může relativně snadno postarat o veškerou logickou i prezentační část jednoduchého amatérského IoT šitého na vaši míru.

Jakmile máte vlastní data, můžete nad nimi budovat ledacos. Třeba vlastní „Siri“

Tak a teď už jdu zkontrolovat schránku, jestli dorazily součástky, a příště už budeme opravdu stavět. Slibuji!

Diskuze (40) Další článek: Týden Živě: Avast pohltil AVG a Kuba si koupil nový telefon

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,