Toto je starší verze dokumentu!
S využitím vývojových desek STM32F4DISCOVERY a STM32F4DIS-BB zprovozněte Ethernet rozhraní. Implementujte jednoduchý HTTP server, který pomocí dynamicky generovaných stránek umožní grafické zobrazení sledované veličiny.
Projekt má za cíl demo aplikaci HTTP serveru. Výsledné demo má sloužit jako základ pro vývoj centrální jednotky senzorické sítě. Tato jednotka bude sbírat údaje ze senzorů v síti a zobrazovat naměřená data uživateli pomocí webových stránek. Dále by tento server mohl sloužit k jednoduchému monitoringu vyvýjených přípravků během testů. (R&D centrum se nachází jinde než testovaný výrobek)
Server je implementován do vývojového kitu STM32F4DISCOVERY . Kit je osazen mikroprocessorem s jádrem architectury ARM rodiny Cortex M4. K vývojovému kitu je připojená rozšiřující deska STM32F4DIS-BB jinak Base Board. Rozšiřující deska obsahuje Ethernet PHY LAN8720A. Server je napřímo připojen ke klientskému počítači (síť o dvou prvcích) . Dále je použit obvod pro emulaci virtualního COM portu pro zasílaní dat k zobrazení. tento přístup nahrazuje modul sběru dat ze senzorů a samotné senzory. K Base boardu je možné připojit ještě další zařízení jako kamera OV7670, nebo LCD. Ty ovšem nejsou v demo aplikaci použity.
Jedinou věcí která je potřeba, je nastavit manualně ip adresy obou zařízení. Server je nastaven na adresu 192.168.10.10 z toho plyne že klientský počítač je potřeba nastavit na adresu například 192.168.10.11. V budoucnu se samozřejmě očekává, že síť bude mít standartní architekturu a ip adresa serveru bude dynamicky nastavena řídímcím prvkem. Pro naši jednoduchou síť postačí tento přístup.
Cílem je webová stránka zobrazující graf hodnot. Zatímto učel nebylo možné se vyhnout použití již napsané funkce v javascriptu. Pro svoji jednoduchost byla zvolena metoda flot využívající funkce knihovního balíku jQuery (Referenční příklad) Použitím těchto knihoven vzroste nárok na velikost paměti serveru o 381 kB a co víc je potřeba tento objem dat odeslat s každým požadavkem na aktualiazaci webové stránky.
Obě knihovni jsou napsány v tradičním tvaru - obsahují komentáře a odřádkování. Odstraněním této irelevantní složky zmenšíme nárok na paměť na 191 kB(jquery.flot.min a jquery.min ). Dalším krokem jak zjednodušit práci serveru je ukládání jíž stáhnutých stránek do cache paměti prohlížeče. Tento jednoduchý server bude podporovat verzi protkolu HTTP 1.0 kde je nastavení cache pamětí složitější a protože se nejedná o klíčový problém tak nebyl vyřešen. Nejvhodnější variantou je odkazovat se na jiné stránky, které také využívají stejné knihovny jQuery jako například www.google.com nebo www.dokuwiki.com. Tato možnost vyžaduje připojení klienta k internetu.
Snahou je navrhnout stránku tak aby při dynamickém parsování dat serverem bylo zapotřeba co nejmenší počet operací. Proto jako vstupní data pro vykreslení je řetězec znaků reprezentující hodnoty v šestnáckové soustavě. například
// 0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC var input = '000100020003000400050006000700080009000A000B000C'
V následujícím úryvku kódu je ukázka parsování vztupních dat.
var datasets = [[ [1, parseInt(input .substring(0,4),16)], [2, parseInt(input .substring(4,8),16)], // ...... ]];
Stránky je možné automaticky aktualizovat pomocí příkazu
<!-- each 1 s --> <meta http-equiv="refresh" content="1">
Tento projekt vychází ze Software examples pro Base Board. V tomto balíčku je ukazkový projekt implementovaného http serveru který pomocí CGI ovládá jednu LED a periodicky vyčíta hodnu napětí na AD převodníku(SSI). Je možné si zvolit příklad z RTOS a bez něj. Bohužel příklad s RTOS se mi nepodařilo zprovoznit.
Nějnižší komunikační vrstvy jsou naimplementovány lwIP (low weigth IP) stackem. Vrstva http serveru je zřejmně naimplementována knihovnou funkcí vývojářů STM. Kód http stránek je uložen jako jeden string pro každý soubor ve formátu hexadecimalních čísel. Proto byl v perlu napsán script pro překlad ASCII to HEX.
Server Side Includes neboli SSI je technika kterou využijeme k implementaci dynamicky se měnících dat. Implementaci SSI poznáme podle koncovky .ssi , .shtml a .shtm to musíme dodržet i v našem případě. Vkládání textu do uložených stránech v pamětí processoru probíhá tak že obslužný program obdrží požadavek GET na soubor s koncovkou např. .shtml. Ukazatelem na místo kde bude přidán text se označuje tagem. Například
var input = <!--t-->
Před odesláním souboru probíha jeho parsování. Text je generován funkcí, která ja volána mechanizmy stacku. Její argumenty jsou dány proto pole vložených znaku je předáváno globalní proměnou s ukazatele na vkládané pole.