reklama

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!

Témata článku: Hardware, Software, Web, Pojďme programovat elektroniku, Programování, IoT, Arduino, Stavebnice, Fusion, Google Docs, IO, Arduino Uno, Buddy, Edison

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...
reklama
Určitě si přečtěte

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 104

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

6.  12.  2016 | Jakub Čížek | 36

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 74

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

** V notebooku s cenou nad 20 tisíc nesmí chybět kvalitní displej a rychlé úložiště ** Za dalších deset tisíc můžete dostat navíc styl nebo výkonnější komponenty ** Vybírat můžete z různých velikostí i konstrukcí

8.  12.  2016 | Stanislav Janů | 85


reklama