Díl 2.: Praktické provedení web serveru v interaktivním režimu
Praktické provedené web serveru v interaktivním režimu spolupráce s jednoduchým procesorem.
Díl 1.: Vytvoření web serveru ve WiFi modulech Mini/Secure Socket a WiFi/LAN modulech řady Nano a jeho uvedení do provozu.
Příklad uživatelského web serveru v interaktivním režimu:

V 1. díle bylo popsáno vytvoření jednoduchého web serveru vhodného především ke konfiguraci modulu nebo zobrazení požadovaných parametrů modulu.
Dále bude uveden postup vytvoření web serveru umožňujícího interaktivní režim s externím procesorem.

Úkolem procesoru je číst z web serveru uživatelsky zadané hodnoty nebo naopak tyto hodnoty do web serveru přenášet. Tato činnost probíhá přes sériový port a zásadní výhodou takového řešení je to, že procesor je zde použit pouze pro komunikaci se sériovým portem a případnými vstupy/výstupy a veškeré další procesy, jako je provoz TCP/IP stacku, šifrování atd., běží nezávisle na procesoru ve Wi-Fi modulu.
Vstupy a výstupy aplikace jsou k dispozici na příslušných portech použitého procesoru.
Komunikace mezi procesorem a Wi-Fi modulem probíhá za použití jednoduchých AT příkazů.
Jak bylo řečeno v minulém dílu, do užitelského web serveru lze vložit vlastní proměnné, které se stanou AT příkazy (to se stane v okamžiku aktivace web serveru, po příkazu AT+iwww).
Díky tomu, že proměnné jsou ASCII textem, lze jako proměnnou použít nejen číselné hodnoty, ale i html linky, jména souborů, HTML kód atd.
Když tedy externí procesor (host) vyšle AT příkaz nastavující hodnotu parametru (např. AT+iteplota=23,1°C), Wi-Fi modul si tuto hodnotu parametru uloží do RAM paměti. V reakci na požadavek GET (např. načtení .htm stránky web serveru) internetového prohlížeče je hodnota parametru dosazena kdekoli tam, kde je ve web serveru volána, tj. všude tam, kde se na stránce nachází příslušný parametr (např. ~teplota~).
I do web serveru v interaktivním režimu lze vložit jakékoli konfigurační parametry nebo možnost jejich změny, např. zobrazení IP adresy z příkladu v úvodu stránky (pod ukazatelem síly signálu) se jednoduše provede tak, že kdekoli na stránce web serveru bude uveden následující text:
IP: ~DIP~
Naopak, je-li uživatelem na stránce web serveru změněna hodnota parametru a odeslána pomocí htm formuláře, je uložena do paměti RAM modulu. Externí host procesor se potom může dotázat na hodnotu parametru.
Pro zjištění, byla-li změněna nějaká hodnota lze využít příkazu Status Report 7 (AT+iRP7). Výsledkem příkazu Status Report 7 je bitová mapa, kde bit 10 indikuje (logickou 1), zda došlo k dálkové změně jedné nebo více hodnot.
Hardwarově je k dispozici logický signál Wi-Fi modulu DATA_RDY, jež lze využít pro generování interruptu procesoru v případě, že došlo ke změně nějaké hodnoty parametru.
Příkazem AT+iWNXT, který projde všechny parametry, které byly dálkově změněny, ale ještě nepřečteny aplikací (přes host procesor) lze potom tyto parametry snadno zobrazit a přečíst procesorem.
Přenos statických hodnot (npř. vypnuto/zapnuto) lze snadno přenášet pomocí textových hodnot, např. 0/1, kdy procesor přiřadí těmto předem zvoleným hodnotám stav svých výstupů.
Dále lze s výhodou použít různé javascripty umožňující určité operace již na straně webového prohlížeče. Jako příklad lze uvést ukazatel síly signálu.
Údaj o síle signálu lze snadno získat příkazem AT+iRP10, kdy modul vrátí zprávu v tomto tvaru:
I/(<port stat>, <xfer rate>, <sig level>, <lnk qual>)
<sig level> ... úroveň signálu v rozsahu 0-100 %
Protože nás v tuto chvíli zajímá síla signálu, tj. <sig level>, lze použít jednoduchý javascript pro získání tohoto údaje. Jak bylo již řečeno, je-li AT příkaz volán ve web serveru, nezadavá se prefix AT+i, použijeme tedy v javascriptu výraz ~RP10~, který bude ve web serveru nahrazen skutečným údajem.
Požadovaný javascript může vypadat například takto:
<script type="text/javascript">
var RP10 = '~RP10~';
var temp = new Array();
temp = RP10.split(',');
var signal = 200 - 2*(temp[2]);
</script>
Výraz (temp[2]) pak udává sílu signálu. Protože bylo požadováno i grafické zobrazení síly signálu, byly použity následující 2 obrázky a ještě navíc provedena jednoduchá aritmetická operace 200 - 2*(temp[2]), neboť obrázky jsou široké 200 pixelů, zatímco síla signálu je číslo od 0 do 100 (tj. je potřeba vynásobit sílu signálu dvěma a odečíst od čísla 200 tak, že při 100% signálu nebude obrázek grey.gif vůbec zobrazen a bude vidět celý bargraph.jpg):
bargraph.jpg
grey.gif
Barevný bargraph.jpg je použitý jako pozadí buňky tabulky a obrázek grey.gif má dynamicky měněnou šířku pomocí javascriptu, buňka je zarovnána doprava:
<td align="right" background="bargraph.jpg">
<script type="text/javascript">document.write('<img src="grey.gif" height="10" width='+ signal +'>')
</script>
</td>
Dokument html s ukazatelem síly signálu je pak vložen do iframe ve web serveru, to umožní obnovovat automaticky po několika sekundách pouze iframe a ne celou stránku web serveru.
Pokud nám stačí pouze zobrazení číselné hodnoty síly signálu, necháme toto číslo vypsat scriptem:
Signál: <script type="text/javascript">document.write(temp[2])</script>%
Výše popsané postupy jsou pouze stručnou ukázkou širokých možností, které web server nabízí, stejně tak příklady javascriptů rozhodně nemusí znamenat ideální řešení požadovaných vlastností.
Další technické informace:
Mini Socket iWiFi™ / Secure Socket iWiFi™
bezdrátové RS232 WiFi moduly |