Komunikace ESP8266 s Raspberry Pi pomocí HTTP

Dnes uděláme malý krůček vedoucí k propojení čipu ESP8266 s Raspberry Pi a postavíme si display zobrazující data o aktuálním počasí. Dáme tím dohromady dvě větve článků, které již máme za sebou. Pojďme se tedy podívat na jednu z mnoha možných implementací.

 

Pro naše účely budeme potřebovat Raspberry Pi nakonfigurovanou podle minulého návodu. ESP čip s připojeným I²C displejem a účet na openweathermap.org.

openweathermap.org

Nejdříve si zaregistrujeme účet pro získávání meteorologických dat. https://home.openweathermap.org/users/sign_up

Po odeslání formuláře se můžeme podívat do záložky API keys, kde už na nás čeká náš klíč. Klíčem se budeme hlásit do API při stahování serializovaných dat ve formátu JSON.

Kromě klíče je nutné znát ještě id města, na kterém se nacházíme. Město si můžeme vyhledat zde http://openweathermap.org/city/ pomocí boxu v horní části stránky. Vyhledávání nám vysype veškeré výskyty města v databázi.

Po výběru města a kliknutí na jeho odkaz se dostaneme na adresu ve tvaru http://openweathermap.org/city/3067696. Číslo, které je za city/ reprezentuje id města. V našem případě je to id Prahy.

API pak zavoláme následujícím dotazem, do kterého dosadíme id a klíč, které jsme zjistili výše. Do odkazu jsem doplnil i parametr units, tak aby nám byl vrácen výsledek v metrické soustavě.

http://api.openweathermap.org/data/2.5/weather?id=3067696&APPID=eb545485995e93b7b5c821b946ae161a&units=metric

Výstup odkazu v prohlížeči může vypadat následovně:

{„coord“:{„lon“:14.42,“lat“:50.09},“weather“:[{„id“:803,“main“:“Clouds“,“description“:“broken clouds“,“icon“:“04d“}],“base“:“stations“,“main“:{„temp“:10.5,“pressure“:1016,“humidity“:57,“temp_min“:10,“temp_max“:11},“visibility“:10000,“wind“:{„speed“:3.6,“deg“:250},“clouds“:{„all“:75},“dt“:1489071600,“sys“:{„type“:1,“id“:5889,“message“:0.0044,“country“:“CZ“,“sunrise“:1489037246,“sunset“:1489078722},“id“:3067696,“name“:“Prague“,“cod“:200}

Raspberry Pi

K jeho zpracování využijeme php skript na Raspberry. Mnozí by v tomto bodě mohli namítat, proč to neděláme přímo na ESP8266. Samozřemě, že by to šlo a nebylo by to nijak složité. V tomto případě si však můžeme k počasí přidat ještě další informace a je to zároveň příprava pro případ, kdy Raspberry bude sloužit jako kolektor dat z vlastních čidel.

Na Raspberry se připojíme pomocí ssh, nainstalujeme webový server a php parser.

instalace webserveru lighttpd

sudo apt-get install lighttpd

instalace php

sudo apt-get install php5-common php5-cgi php5

povolíme php-cgi modul na webserveru

sudo lighty-enable-mod fastcgi-php

nastavíme vlastníky a práva a dáme uživatel pi do skupiny www-data, pod kterou je lighttpd spuštěn
sudo chown www-data:www-data /var/www
sudo chmod 775 /var/www
sudo usermod -a -G www-data pi

V adresáři /var/www/html vytvoříme php skript, kterým budeme převádět data pro ESP.

nano /var/www/html/openweathermap.php

Do skriptu vložíme volání API a překlad na výstup.

<?php
header('Content-Type: text/html; charset=utf-8');
$nwm=json_decode(file_get_contents("http://api.openweathermap.org/data/2.5/weather?id=3061368&APPID=fe041032723f739d2a8d3e6dfffc03e0&units=metric"));
echo "@datum a cas @".exec("date +\"%F %H:%M\"")."&";
echo "teplota @".$nwm->main->temp."ßC&";
echo "tlak @".$nwm->main->pressure." hPa&";
echo "vlhkost @".$nwm->main->humidity."%&";
echo "rychlost vetru @".$nwm->wind->speed." m/s&";
echo "vychod slunce @".gmdate("Y-m-d H:i:s", $nwm->sys->sunrise)."&";
echo "zapad slunce @".gmdate("Y-m-d H:i:s", $nwm->sys->sunset)."&";
?>

Přes ctrl+x soubor uložíme a editor ukončíme.

Pokud nyní zadáme do prohlížeče adresu http://<IP_naší_raspberry>/openweathermap.php měl by se nám vrátit podobný výstup.

@datum a cas @2017-03-04 00:41&teplota @7.04ßC&tlak @973.11 hPa&vlhkost @96%&rychlost vetru @3.36 m/s&vychod slunce @2017-03-09 05:26:49&zapad slunce @2017-03-09 16:59:38&konec@

Nyní stačí postupovat podle článku Hrátky s WiFi čipem ESP8266 (5.díl – I²C LCD). Kde je v přiloženém zdrojovém kódu pouze nutné nastavit IP adresu vašeho Raspberry.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.