User manual
Internetový čas / Internet clock
V tomto projektu bude využito všech předchozích znalostí a modul NanoESP bude navíc schopen
samostatně shromažďovat informace z webu. Tento program načítá aktuální čas z internetové stránky
a použije jej coby interní čas pro vlastní kontrolér. Čas bude implementován do interní knihovny
a bude interpretován ve výstupu na sériovém rozhraní. K tomuto experimentu bude potřeba pouze
samotný modul.
Program
Zatímco předchozí program vyžadoval spoustu manuálních operací a zadání, tento program pracuje
převážně automaticky. Modul se připojí k website: http://chonic.herokuapp.com/.
URL může být použita v různých systémech a časových pásmech. Aktuální a platný čas například
pro Německo je získán prostřednictvím URL: http://chronic.herokuapp.com/utc/in-one-hour.
Příkaz getTime() aplikuje druhý parametr utec/in-one-hour. Na základě UTC (Universal Time
Coordinated) bude však zapotřebí provést určité úpravy pro zohlednění změny letního času
(utec/in-two-hours). Aktuální čas je od té chvíle v modulu používán prostřednictvím knihovny Time-
Library (od vývojáře M. Margolise, zdroj: http://www.pjrc.com/teensy/td_libs_Time.html). Pro praktické
využití je kopie této knihovny přiložena v příslušném adresáři. Překopírujte tuto knihovnu do vlastního
adresáře s knihovnami. Čas od té chvíle bude neustále běžet na pozadí a poskytovat přesný výstup
(včetně sekund). Díky internímu času pak můžete jednoduše programovat alarm clock pro různé,
časově nastavitelné aplikace. Pro spuštění aktuálního času je nezbytné použití nové funkce:
boolean getTime(String Host, String Subpage)
{
boolean success = true;
int xyear, xmonth, xday, xhour, xminute, xsecond; //local
variables
success &= sendCom("AT+CIPSTART=\"TCP\",\"" + Host
+
"\",80", "OK");
String getRequest = "GET " + Subpage + "
HTTP/1.1\r\nHost:" +
Host + "\r\n";
success &= sendCom("AT+CIPSEND=" +
String(getRequest.length() + 2), ">");
esp8266.println(getRequest);
if (esp8266.find("+IPD"))
{
if (esp8266.find("\r\n\r\n"))
{
xyear = esp8266.parseInt();
xmonth = esp8266.parseInt();
xday = esp8266.parseInt();
xhour = esp8266.parseInt();
xminute = esp8266.parseInt();
xsecond = esp8266.parseInt();
if (xday < 0) xday *= -1; //Because of date separator -
parseInt detects negative integer
if (xmonth < 0) xmonth *= -1; //Because of date separator -
parseInt detects negative integer
setTime(xhour, xminute, xsecond, xday, xmonth, xyear);
sendCom("AT+CIPCLOSE", "OK");
return true;
}
else return false;
}
else return false;
}
Parametry pro host address a subaddress jsou této funkci předloženy. Get-Request query
je vytvořen a potvrzen TCP serverem webu po navázání připojení. Následně je zapotřebí provést
analýzu odezvy serveru (response). Proto je část záhlaví požadavku vynecháno vyhledáváním znaků
\r\n\r\n, což představuje pokračování programu po Carriage Return a New Line.
Další číslice korespondují s požadovaným datem a časem, který se ukládá do proměnných s počtem
volání parselnt(). Datum má specifickou podobu, vzhledem k tomu, že jsou jeho jednotlivé hodnoty
od sebe odděleny pomlčkou. Funkce parselnt() tyto hodnoty interpretuje jako záporná čísla.
Z tohoto důvodu jsou tyto hodnoty jednoduše vynásobeny –1. Čas je nakonec nastaven funkcí
setTime() a poskytuje i výstup se zobrazením sekund. Tím došlo k úspěšné aplikaci aktuálního
času převzatého z internetu.
Zobrazení teploty / Temperature display
Tento projekt má za účel zobrazení aktuální teploty a informací o počasí. Výstupní hodnoty se budou
znovu zobrazovat v použitém sériovém rozhraní. Současně přitom bude výstup provázen RGB-LED
indikací. Získáte tak přesné informace o aktuálním počasí přímo z internetu. Pro tento experiment
bude znovu zapotřebí nepájivého pole, modul NanoESP, 1 RGB–LED, 3 rezistory 1 k a vodie.
Velmi dležité je v tomto pípad správné pipojení vývod RGB–LED. RGB je zkratka (Red, Green,
Blue) a tato LED je konstruována s použitím nkolika takových diod a se spolenou katodou.
Kombinace tchto barev za rzného jasu pak mže prezentovat celou barevnou paletu. LED by mla
být pipojena do PWM výstup pin D3, D5 a D6 modulu spolen s pedadnými rezistory.
Program
Jako první je zapotebí pejít na website, který poskytuje informace o poasí:
http://www.openweathermap.com/
Zadejte svou lokalitu (msto). V tomto pípadu je použito msto Essen:
www.temp.fkainka.de/?city=Essen