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í, Arduino, IoT, Stavebnice, Google Docs, Google Apps, Fusion, IO, Arduino Uno, Edison, Buddy

37 komentářů

Nejnovější komentáře

  • bjelko 23. 1. 2017 13:12:44
    Arduino vie poslat http ale nie...
  • 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ž...
reklama
Určitě si přečtěte

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

20.  2.  2017 | Stanislav Janů | 35

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

20.  2.  2017 | Karel Javůrek | 132

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

** Každý bastlíř se po čase neobjede bez armády švábů ** Dnes si některé z nich vyzkoušíme ** Třeba zázračný posuvný registr

19.  2.  2017 | Jakub Čížek | 39

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

** AMD uvedlo první tři procesory Ryzen 7 ** Všechny budou pracovat s osmi jádry a šestnácti vlákny ** Na pulty obchodů se dostanou už za týden

22.  2.  2017 | Stanislav Janů | 122

Vyhledávání ve Windows není dokonalé, zkuste to 5× jinak

Vyhledávání ve Windows není dokonalé, zkuste to 5× jinak

** V macOS funguje vyhledávání Spotlight, ve Windows podobně propracovaná funkce chybí ** Alternativy se zaměřují na rychlé hledání souborů i externí zdroje ** Mnohé mohou vyhledávání ve Windows kompletně nahradit

18.  2.  2017 | Stanislav Janů | 58

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

** Evropští úředníci chtějí, aby byly Desítky transparentnější ** Microsoft od jara skutečně chystá změny ** Ochráncům soukromí to ale nestačí

21.  2.  2017 | Jakub Čížek | 217


Aktuální číslo časopisu Computer

Stavba 3D tiskárny

Výbava domácí elektrodílničky

Budoucnost 5G sítí

Velké testy microSD karet a vodních chladičů

Přehled mobilních tarifů

reklama
reklama