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.

Klepněte pro větší obrázek Klepněte pro větší obrázek
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.

Klepněte pro větší obrázek
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.

Klepněte pro větší obrázek Klepněte pro větší obrázek
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.

Klepněte pro větší obrázek Klepněte pro větší obrázek
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.

Klepněte pro větší obrázek
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.

Klepněte pro větší obrázek Klepněte pro větší obrázek
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.

Klepněte pro větší obrázek
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!

36 komentářů

Nejnovější komentáře

  • GalaxyS6 29. 8. 2016 5:26:59
    vypadá lákavě :-)
  • Daniel Novák 24. 7. 2016 23:26:08
    Já nechápu proč si lidi co tomu rozumějí si to kupují za hodně peněz když...
  • konykorn 16. 7. 2016 8:51:27
    Skoda, ze je tu takovych clanku malo... vlastne v dnesni dobe je toho...

Určitě si přečtěte


Deset tipů, jak ovládnout Google: Vyhledávejte jako mistři

Deset tipů, jak ovládnout Google: Vyhledávejte jako mistři

** Vyhledávače jsou natolik dobré, že si poradí i s frází v běžné češtině ** Pokud to ale nebude stačit, můžete vyzkoušet pokročilé funkce ** Vybrali jsme ty nejzajímavější

25.  9.  2016 | Jakub Čížek | 18

9 nejlepších programů na úpravu fotek. Placené i zdarma

9 nejlepších programů na úpravu fotek. Placené i zdarma

** Pro běžné úpravy fotek nemusíte pirátit Photoshop, vystačíte si s levnějšími programy ** Ceny pokročilých editorů se většinou vejdou do dvou tisíc korun ** Mnohdy stačí i bezplatné nástroje

26.  9.  2016 | Stanislav Janů | 43

Jak zastavit nechtěné programy na Windows? Koukněte na Plánovač úloh

Jak zastavit nechtěné programy na Windows? Koukněte na Plánovač úloh

** V systému se mohou periodicky spouštět nechtěné aplikace ** Anebo si vyberou tu nejméně vhodnou chvíli ** Prozkoumejte Plánovač úloh na Windows

23.  9.  2016 | Jakub Čížek | 128

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

** Budeme odposlouchávat IR ovladač klimatizace ** Vyrobíme laciný rádiový vysílač ** Vyzkoušíme komunikaci pomocí Bluetooth a v pásmu 433 MHz

21.  9.  2016 | Jakub Čížek | 19

Komentář: Apple pořád inovuje, ale jen když musí

Komentář: Apple pořád inovuje, ale jen když musí

** Největší inovace vždy vychází z radikálních kroků ** Apple není v situaci, kdy by jej ke změnám něco tlačilo ** Chybí-li na trhu konkurence, nemůžou existovat ani invoace

22.  9.  2016 | Stanislav Janů | 139

Týden Živě: Zvyknou si Češi platit paušál za software?

Týden Živě: Zvyknou si Češi platit paušál za software?

** Zoner vypustil do světa nové Photo Studio. Je za paušál. ** HP nechce neoficiální inkoust ** Koutek časopisu Computer

25.  9.  2016 | Časopis Computer | 65


Aktuální číslo časopisu Computer

Srovnání výhodných 27" monitorů

Velký test levných rychlých routerů

Jak nastavit Android, aby vás nesledoval

45 podrobných testů a recenzí