. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Malý webový server
30.brezna 2008 | Pandatron | Malý webový server | Komentářů: 60  
Malý webový server

Malý webový server

V dnešní době není nic vyjímečného, když se v domácnosti nachází dva a více počítačů a celý byt či dům je propleten sítí ethernet. Co tedy použít toto médium také k ovládání a monitorování domácích spotřebičů? A to vše přes obyčejné www rozhranní a pohodlně, třeba i z vyhřáté postele?

Ano, tato myšlenka není nová. Dají se zakoupit speciální domácí a kuchyňské spotřebiče, které těmito funkcemi disponují. Avšak cena takových spotřebičů není nízká a například vyhřívání bazénu s monitoringem teploty přes ethernet či WiFi se stejně neprodává.
Rád bych tímto článkem přiblížil tuto formu automatizace i běžnému čtenáři / elektronikovi. Jediná bariéra, bránící rozšíření těchto konstrukcí i na stránky Amatérského Rádia, je poměrně složitý TCP / IP protokol. Ten však nyní prolomíme. Předkládám Vám totiž již hotové, mnou naprogramované a odladěné zařízení. Navíc bezplatně uvolňuji zdrojové kódy a celou dokumentaci, pro vlastní výrobu a modifikaci.

Technické údaje:
Napájecí napětí   7 – 20 V
Odebíraný proud   250mA
     
Počet vstupů   8
Možných analogových vstupů   7
Počet výstupů   8
     
Doba odezvy na ping   3 ms
Doba stahování index.htm   0,4 s

Popis zařízení
První pohled na schéma zapojení na obrázku 1 zarazí jistě nejednoho čtenáře. Na otázky „to je celé ?“, „kde je zbytek ?“ bych rád odpověděl hned v úvodu: Ano, je to celé schéma. Vidíte, jak jednoduše lze dnes udělat tak složitou věc, jako je webový server. Navíc, není potřeba ani žádný těžko dostupný integrovaný obvod či přesně daná síťová ISA karta jako v jiných konstrukcích. Jen toto a modul SPINET od českého výrobce (byl popsán v předchozím článku). Ale postupně...


Obr. 1: Schéma zapojení

Základní částí obvodu je naprogramovaný procesor PIC18F458 nebo PIC18F4580. Ten se stará o řízení TCP / IP protokolu a zároveň ovládá a čte vstupy / výstupy. Napájení mu poskytuje stabilizátor IO1 (7805), blokovaný kondenzátory C1 a C2. Blokování proti rozkmitání napájecího napětí potřebuje i procesor. K tomu mu slouží kondenzátory C3 a C6, které by měli být umístěny co nejblíže jeho nožičnám. Jelikož jsem se chtěl vyhnout SMD součástkám, jsou i tyto v klasickém drátovém provedení. Protože však jádro procesour běží na 40MHz, bylo by lepší přidat ještě další 100nF kondenzátory, ale SMD a paralelně k C3 a C6 a to nejlépe přímo na piny procesoru. Avšak není to nutné. Procesor je zvenčí taktován krystalem Y1 – 10.000 Mhz a tento kmitočet si dále uvnitř svého pouzdra násobí až na rovných 40MHz. Součástky R1 a D1 slouží k oddělení napájecího napětí a případného programovacího napětí Vpp, přivedeného z programátoru.
Do sítě ethernet je procesor připojen modulem SPINET [3], který se připojuje na konektor J4. Tento modul jsem vybral kvůli jednoduchosti jeho implementace do zařízení (žádné těžko sehnatelné a miniaturní SMD součástky), nízké ceně a především dostupnosti. Modul totiž vyrábí a prodává česká firma ASIX s.r.o. [2].
Na druhé straně řídícího procesoru PIC je již jen osm vstupů a osm výstupů na konektorech J2 a J3. I když jsem o tom uvažoval, nakonec jsem do tohoto serveru nedal žádné optické oddělení či tranzistorové posílení výstupů. Jejich připojení by nemělo činit žádné potíže ani záčátečníkovi a navíc, takto je celý server mnohem menší a univerzálnější. Umožňuje tak připojení i jiných budičů, či přímo analogových čidel. Sedm vstupů z osmi (kromě IN5) je možné uvnitř procesoru přepnout a použít je jako analogové vstupy. Procesor má v sobě 10-ti bitový A/D převodník. Tím je možné například přímé připojení teplotního čidla, světelného čidla a jiných s analogovou úrovní na výstupu. Vše tedy takto záleží jen na konstruktérových potřebách.

Stavba
Na obrázcích 2 a 3 je motiv plošného spoje a rozmístění součástek.


Obr. 2: Motiv DPS (60 x 80 mm) (klikněte pro 3000dpi)
 
Obr. 3: Rozmístění součástek

Při osazování DPS se nevyskytují žádné problémy či záludnosti. Doporučuji začít obvodem IO2 (podle hesla, pokud se nezničí polovodič, přežije i zbytek), nebo místo něho můžete dát precizní patici DIL40, což však není nutné. Pro programování je totiž na desce konektor J1 - ICSP, takže procesor je možné programovat pohodlně v zapojení. Poté se osadí rezistory, kondenzátory a další součástky.

Modul SPINET se k desce připojí pomocí konektoru S2G16 (dvouřadá lišta se 16-ti piny) zde a protikusem AWRF16Z-6,9 zaletovaným zespodu do Spinetu. Obě je možné běžně sehnat s 20-ti piny a čtyři z nich ulomit. Nebo je možné modul propojit pevně drátky a tím se získá nižší profil celku.

Napájecí napětí v rozsahu 7 – 20V se přivádí na piny označené VDD (kladný pól) a GND (zem). Zde jsem na kousek drátku přiletoval konektor K3716B či podobný a ten připevnil na krabičku. Je tak možné server napájet běžným 9V adaptérem.

Stabilizátor IO1 je vhodné opatřit přiměřeným chladičem. Při napájení 9V adaptérem, by měl stačit levný typ D01A. Pro vyšší napájecí napětí doporučuji spíše typ V4330, protože se jinak stabilizátor již příliš zahřívá.

Mechanika
Jako každé správné elektronické zařízení, je i toto umístěné v úhledné plastové krabičce. Zvolil jsem standartní typ KP5. Na obrázku 4 je nákres čelíčka a spodního dílu krabičky a jejího opracování. Na vstupy a výstupy je možné vytvořit vhodné otvory do druhého čelíčka. Jelikož však jejich velikost a množství závisí na každém konstruktérovi, neuvádím zde žádný nákres. Osobně jsem to vyřešil vypilováním jen jakési „štěrbiny“, do které se kablíky umístí ještě před uzavřením krabičky a jsou s ní tedy pevně spojeny.



Obr. 4: Mechanické provedení krabičky

Oživení
Po očištění zaletované desky a kontrole pájených spojů je možné připojit napájecí napětí. Pro oživení doporučují použít stabilizovaný napájecí zdroj cca. 9 V s omezením proudu na 300 mA. Pokud je vše v pořádku a nejsou nikde žádné zkraty apod., měl by se odběr v klidu pohybovat kolem 230 mA. Ten se sice může zdát na první pohled vyšší, avšak je vpořádku. Je způsoben nízkou impedancí ethernetového transformátorku – 50 Ohmů.

Nyní, pokud máte nový nenaprogramovaný procesor, je potřeba ho naprogramovat. Programátor se připojuje na konektor J1 a soubor HEX je volně ke stažení na konci tohoto článku. V souboru jsou již uloženy konfigurační pojistky, takže by nemělo být třeba je měnit, avšak pro jistotu je uvádím na obrázku 5.


Obr. 5: Konfigurační pojistky procesoru

Pro případné zájemce, kteří nemají možnost si procesor naprogramovat, uvedu na konci článku možnost jeho získání.

Po úspěšném oživení, připojíme do modulu SPINET volný RJ45 kabel s ethernetem. Pokud server pracuje správně a je detekována síť, rozsvítí se na konektoru zelená dioda LED a případně žlutá bude problikávat. Pokud se nerozsvítí žádná LED, znamená to, že nebyla detekována síť nebo chybí napájecí napětí. Pokud se rozsvítí žlutá LED, nepracuje server správně (nepodařilo se inicializovat obvod na SPINETU) a je potřeba zkontrolovat oscilátor procesoru (na pinu č.7 obvodu IO2 by mělo být asi 2,5 V) a přívodní piny k modulu.

Připojení a nastavení
Po naprogramování má server IP adresu 192.168.0.100 a jméno „spinet“. Mělo by tedy stačit otevřít jakýkoliv www prohlížeč a zadat buď „spinet“ (bez uvozovek) a nebo přímo jeho IP adresu. Po potvrzením klávesou Enter by se nám měla zobrazit úvodní stránka serveru, jako na obrázku 6. Pokud se tak nestane, můžete ještě z příkazové řádky zkusit příkaz „ping 192.168.0.100“ (opět bez uvozovek).
Pokud ani tak nic (a modul svítí zeleně), bude potřeba změnit IP adresu na některou volnou a podporovanou ve vaší síti.


Obr. 6: Úvodní stránka serveru

K tomuto základnímu nastavení však není potřeba programátor. Server má totiž vyvedený sériový konfigurační port, kterým se připojí na volný COM port u PC. Zde se poté v terminálu, v jednoduchém textovém menu, nastaví vše potřebné.
Sériový port je tedy vyveden na konektor J5. Jsou to signály RxD na pinu 1 a TxD na pinu 2. Samozřejmě je potřeba i zem a to například z konektoru J1. Tyto signály mají 5V TTL úrovně a tak je potřeba mezi ně a PC zapojit jednoduchý RS232 / TTL převodník. Pro začínající konstruktéry uvádím na obrázku 7 schéma jednoduchého převodníku RS232 / TTL se dvěma tranzistory. Napájení +5V pro převodník je možné získat, společně s GND, z konektoru J1.


Obr. 7: Převodník RS232 / TTL

Na PC poté spusťte jakýkoliv terminál, tedy například Hyperterminál z Widnows. Nastavení komunikace je 9600, N, 8. Po navázání spojení stiskněte klávesu Enter, server by na ní měl odpovědět vypsáním servisního menu (obr. 8).


Obr. 8: Servisní menu

Menu se ovládá pomocí číselných kláves a volba se potvrzuje klávesou Enter. Změna například IP adresy se teda provede stiskem 1 + enter. Poté budete vyzváni k zadání nové adresy ve formátu například: 192.168.0.101 (tedy i s tečkami) a potvrzením klávesou enter.
Dále, pokud by bylo potřeba, je zde možné změnit i MAC adresu.
Po provedení změn je ještě potřeba modul restartovat, například opět pohodlně volbou 0 + enter.
Poté by již měl být server přístupný pod novou IP či MAC adresou. Textové jméno (adresa) „spinet“ zůstane zachováno.

Ovládání serveru
Nyní již práce se serverem probíhá pohodlně z webového prohlížeče. Na úvodní stránce se pod volbou - formulář - dostanete na stranu se stavem vstupů a výstupů a jejich ovládáním – obrázek 9.
Práce s tímto formulářem je jednoduchá. Výstupy se ovládají zaškrtáváním políček a celá stránka se poté aktualizuje a odesílá tlačítkem „Refresh“. Zaškrtnuté bity reprezentují logickou jedničku na příslušném pinu, tedy +5V.


Obr. 9: Formulář pro ovládání vstupů / výstupů

Na úvodní stránce je ještě volba - status -, která zobrazí aktuální IP a MAC adresy jak serveru, tak i klienta (PC).
Tyto jednoduché webové stránky mají sloužit především k prezentaci samotného serveru a vyzkoušení jeho funkcí. Jak bude popsáno dále, je samozřejmě možné je přepsat jinými.

Nové webové stránky
Jak bylo řečeno, do serveru je možné nahrát jiné webové stránky. Můžete na ně přidat jak grafické prvky a obrázky, tak samozřejmě i další funkce. V procesoru je poměrně dost místa, takže rozšíření například o měření teploty by nemělo činit žádné potíže. Bohužel jsou však webové stránky součástí programové paměti procesoru a tak je jejich změna možná pouze úpravou zdrojových kódů a přeprogramováním dle následujícího postupu.
Všechny webové stránky, obrázky a další soubory jsou uloženy ve zdrojových kódech serveru, v souboru htm.c. Vše je uloženo v textových polích a ty jsou patřičně okomentovány, takže jejich změna není problém. Procesor je z nich poté vyčítá a posílá klientovi. Avšak, aby to nebylo tak jednoduché, webové stránky je potřeba mírně upravit. Není možné vzít holý xHTML, Java či jiný kód a vložit ho do souboru.
Předvedeme si to tedy na prvním textovém poli, obsahujícím společné záhlaví pro html soubory, viz. obr. 10. První řádek, tedy standartně jen <html> je v souboru uveden v této podobě: "<html>" "\x0D\x0A"
Jak je patrné, je nutné dát na začátek řádku, před html kód, jednu uvozovku a na konec řádku vložit toto: " "\x0D\x0A"


Obr. 10: Zápis HTML hlavičky

Zároveň je nutné projít celý html kód a před všechny výskyty znaku „ (uvozovky) dát zpětné lomítko \. Přesně tak, jak je to uvedeno na obrázku 11.

Tímto jednoduchým postupem se kód přizpůsobí pro použití v serveru. Avšak ještě je nutné, na místa kam chcete, aby server při generování stránky vkládal dynamické hodnoty, vložit speciální značky. Dynamickou hodnotou se myslí cokoliv, co se má měnit v závislosti na nějaké situaci. Tedy například zaškrtávání polí, vkládání obrázků či vypisování nějakých hodnot. Tato funkce je již trochu složitější. Místo, ve zdrojovém kódu stránky, kam se má příslušná hodnota vložit, je označeno znaky \xFF následované jedinečným indexem, například \x01, určujícím konkrétní zprávu. Odesílání stránky poté vypadá tak, že při nalezení značky \xFF se zde procesor pozastaví a přečte ještě jeden následující znak. Podle něho poté rozhodne, jaká data má místo těchto dvou hexadecimálních znaků vložit. Tato záměna znaků za data se provádí v souboru action.c ve funkci insert_data();. Sem odkazuji případné zájemce, aby si tuto funkci prozkoumali.

Po těchto upravách je již možné zdrojové kódy znovu zkompilovat a naprogramovat. V podstatě se zde není ani čeho bát, vždy je možné naprogramovat zpět původní kompilaci.

Jiné úpravy zdrojových kódů
Kromě nových webových stránek je možné ve zdrojových kódech změnit i další vlastnosti serveru. IP a MAC adresy se nacházejí v souboru main.c a jméno „spinet“ je umístěno v souboru eth.c. U jména bych se pozastavil. To je tvořeno a „zakódováno“ specifikací Name Service (NS). Bohužel se však Microsoft ve specifikaci mnoho nepředal a tak se jen těžko zjišťuje postup převodu jména na číselný kód. Já jsem si tedy pomohl libovolným TCP/IP sniferem. Nejlépe se mi osvědčil program CommView [4]. Ten dokáže zachytávat a zobrazovat veškeré ethernetové rámce, které po sítí probíhají (nezakódovaných hesel si prosím nevšímejte, hi). Takže stačí do prohlížeče zadat jméno SPINET a rázem vidíme NS hodnotu tohoto jména, viz. obr. 11. Podle toho můžete zjistit hodnotu jakéhokoliv jména, zapsat ho do zdrojových kódů a ve webovém prohlížeči pak server volat třeba jako rodinného mazlíčka.
Jinak bych zájemcům doporučil přečíst si celé zdrojové kódy k serveru, nejsou nijak dlouhé ani složité.


Obr. 11: Služba Name Service a jméno SPINET

Závěr
Tento článek měl ukázat, jak jednoduše lze udělat takový webový server, či vzdálené řízení. Již není potřeba kuchat starou ISA síťovku, zkoumat její drivery a poté ji velkým procesorem s mnoha piny ovládat. V dnešní době stačí pouze dvě aktivní součástky (vyjma stabilizátorů) a webový server s otevřenými zdrojovými kódy a plnou dokumentací je na světě.
Nemám v úmyslu na této konstrukci jakkoliv vydělávat, přesto však případným zájemcům mohu nabídnout plošný spoj či naprogramovaný procesor.

Seznam soucastek
C1             100nF
C2             100nF
C3             100nF
C4             22pF
C5             22pF
C6             100nF
R1             10k
D1             1N4148
IO1            7805
IO2            PIC18F458-I/P
Y1             10.000 MHz
J1             jednorada lista 5(+ 1) pinu
J2             jednorada lista 8 pinu
J3             jednorada lista 8 pinu
J5             jednorada lista 2 piny
J4             S1G16 a  protikus AWRF16Z-6,9
krabicka KP5
A pár obrázků na závěr:

 

 

Literatura:
[1]
http://pandatron.cz
[2]
http://asix.cz
[3]
http://asix.cz/a6_spinet.htm
[4]
http://www.tamos.com/products/commview

Download:
SPINET v1.0 - aktuální firmware pro procesor PIC18F458







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (101):

Zobrazit starší 30 dnů (101)...

host
101. Dne 05. 06. 2013 v 20:27 zaslal host
Bez titulku
Zdravím,
chtěl jsem se zeptat, kde se dá sehnat ten modul s RJ45, kromě firmy Asix, která již jej nevyrábí...


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
M75 QUECTEL
Dual-Band GSM modul provedení SMD, pouze pro SMS služby
Termín nepotvrzen od 275 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007